قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:46 AM المشاركة 113   
افتراضي



التدريب السابع :
نفس التدريب السابق ولكن باستخدلم قناتين ADC

الدائرة الكهربية :
البرنامج :

كود:
/* UART - 2XADC Tutorial 2 */ unsigned char text0[4] ; unsigned char text1[4]; int temp0 = 0; int temp1 = 0; // void main() { Uart1_Init(9600); do{ temp0 = Adc_Read(0); // temp1 = Adc_Read(1); // intToStr(temp0,text0); // UART1_Write_Text(text0); Uart1_Write('\t'); // Tabe (Horizontal) intToStr(temp1, text1); // UART1_Write_Text(text1); Uart1_Write('\r'); // OR 13 : Carriage Return //Uart1_Write('\f');//OR 10 : Form feed //Uart1_Write('\n');//OR 10 : New line (line feed) //Uart1_Write('\v'); //Vretical Tabe } while(1); }
النتائج :



اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:51 AM المشاركة 114   
افتراضي


التدريب الثامن : 2*LM35>>2*ADC>>LCD>>UART>>PC(Hyper TERMILAL)
فى التدريب التالى سوف نستخدم أيضا وحدة عرض LCD ودخلين تناظريين هما AN0 و AN1 يتصل بهما حساسين لدرجة الحرارة من نوع LM35 بحيث تظهر قراءة درجات الحرارة لمكانين مختلفين على كل من وحدة العرص وعلى وحدة طرفية أخرى مثل الكومبيوتر .
الدائرة الكهربية :








البرنامج :

كود:
/*LESSON 19 TUTORIAL8 LM35>>ADC>>LCD>>UART""PC Hyper Terminal PIC16F877A crystal: 4MHz
ENG.F.ABDELAZIZ http://www.eeecb.com/vb/index.php */ // LCD module connections sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; // End LCD module connections
unsigned char text0[4] ; unsigned char text1[4] ;
int temp0 = 0; int temp1 = 0;
// Main program void main () {
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1,1,"ROOM1 TEMP.= C"); // writes text on line 1, column 1 of the lcd Lcd_Out(2,1,"ROOM2 TEMP.= C"); // writes text on line 2, column 1 of the lcd
Uart1_Init (9600);
do {
temp0 = Adc_Read(0); // Read channel AN0 and save value in the variable temp0 temp0 =temp0/2.05;// Convert from value to TEMPERATURE temp1 = Adc_Read(1); // Read channel AN1 and save value in the variable temp1 temp1 =temp1/2.05; // Convert from value to TEMPERATURE
ByteToStr(temp0, text0);// converts TEMP.to string ByteToStr(temp1, text1); // converts TEMP.to string
Lcd_Out(1,12,text0); // Write the value to LCD delay_ms (10); Lcd_Out(2,12,text1); // Write the value to LCD delay_ms (10);
UART1_Write_Text("ROOM1 TEMP.="); UART1_Write_Text(text0); // Sent to uart UART1_Write_Text("C");
Uart1_Write('\t'); // Tabe (Horizontal)
UART1_Write_Text("ROOM2 TEMP.="); UART1_Write_Text(text1); UART1_Write_Text("C"); Uart1_Write('\r'); // OR 13 : Carriage Return
}
while (1); }
النتائج :

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 04-04-2012, 12:23 PM المشاركة 115   
افتراضي


الدرس العشرون :
مصفوفة لوحة المفاتيح KeyPad Matrix
مقدمة :
خصائص وتقنيات البرمجة لقراءة مصفوفة لوحة المفاتيح :
تستخدم لوحة المفاتيح على نطاق واسع فى الوقت الحاضر لأنه من خلالها نتمكن من استخدام عدد كبير من المفاتيح الضاغطة فى تطبيقاتنا دون المساس بعدد كبير من أطراف الميكروكونترولر . تعرف مصفوفة لوحة المفاتيح أيضا بمصفوفة المفاتيح الضاغطة حيث يتم ترتيبها فى شكل مصفوفة من الأعمدة والصفوف C x R (C عدد الأعمدة وR عدد الصفوف) , مثل مصفوفة لوحة المفاتيح 4X4 و 3X4 كما فى الشكل التالى :



عدد الأطرف المطلوبة لعمل مسح للوحة المفاتيح يتحدد بمجموع عدد الأعمدة وعدد الصفوف .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 04-04-2012, 12:26 PM المشاركة 116   
افتراضي


مبدأ العمل :
لنتفهم جيدا طريقة العمل دعنا نحلل الدائرة الكهربية بالشكل التالى :




ماذا يعنى مسح scanning لوحة المفاتيح ؟ :
يعنى :
وضع المستوى المنطقى المرتفع 1 على الصفوف ( أى الأطراف RD4-RD7 ) صف تلو الآخر وفى كل مرة يتم قراءة الحالة المنطقية للأعمدة ( أى الأطراف RD0-RD3) والتى حالتها الابتدائية هى المستوى المنطقى المنخفض 0 نتيجة لتوصيلها بمقاومات جذب لأسفل (متصلة بالأرضى ) .
إذا كان أحد هذه الأعمدة فى الحالة المنطقية المرتفعة 1 فهذا يعنى أن "المفتاح الضاغط الموجود عند تقاطع الصف الحالى وهذا العامود يكون مضغوطا " .
مثال :
نفترض أننا وضعنا المستوى المنطقى المرتفع 1 على الصف الأول (الطرف RD4) بينما باقى الصفوف ظلت عند المستوى المنطقى المنخفض 0 . بعد ذلك نأخذ قراءات حالة الأعمدة . إذا كانت جميع المفاتيح غير مضغوطة (محررة) فإن جميع الأعمدة سوف تكون عند المستوى المنطقى المنخفض 0 . إذا كان أحد الأعمدة عند المستوى المنطقى المرتفع 1 عند صف محدد فهذا يعنى أن المفتاح الموجود عند تقاطع هذا العامود وهذا الصف يكون مضغوطا .
صف واحد فقط يجب أن يوضع عند المستوى المنطقى المرتفع 1 بينما باقى الصفوف يجب أن توضع عند المستوى المنطقى المنخفض 0 .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 04-04-2012, 12:30 PM المشاركة 117   
افتراضي


مكتبة لوحة المفاتيح Keypad Library
يوفر المترجم mikroC PRO مكتبة لتسهيل العمل بلوحة مفاتيح 4x4 keypad (أربعة صفوف وأربعة أعمدة) . يمكن أيضا استخدام روتينات المكتبة مع لوحات المفاتيح 4x1, 4x2, 4x3 .
الشكل التالى يبين توصيل لوحة المفاتيح :

ملحوظة :
فى جميع المشاريع التى تستخدم مكتبة دوال لوحة المفاتيح يجب تعريف منفذ توصيل لوحة المفاتيح . على سبيل المثال عند التوصيل بالمنفذ PORTD يستخدم التعبير (الأمر) :


كود:
char keypadPort at PORTD ;
دوال أو روتينات المكتبة :
تحتوى المكتبة على ثلاثة دوال :
  • Keypad_Int
  • Keypad_Key_Press
  • Keypad_Key_Click
1- الدالة Keypad_Init " إعداد أو تهيئة لوحة المفاتيح للبدء"

· نموذج كتابة الدالة

كود:
void Keypad_Init(void);

· العائدات : لا تعود الدالة بشىء void .
· الغرض: إعداد (تهيئة) المنفذ لبدء العمل مع لوحة المفاتيح .
· المطالب : يجب التعريف بمنفذ توصيل لوحة المفاتيح عن طريق تعريف متغير باسم keypadPort قبل استخدام الدالة كما ذكرنا .
مثال :
كود:
// Keypad module connections char keypadPort at PORTD; // End of keypad module connections ... Keypad_Init();
2- الدالة Keypad_Key_Press " الضغط على مفتاح من لوحة المفاتيح "
· نموذج كتابة الدالة :

كود:
char Keypad_Key_Press(void);
· العائدات : تعود الدالة بكود رقم المفتاح الذى تم الضغط عليه (1..16). (نوع char ) وإذا لم يكن هناك أى مفتاح مضغوط فإن العائد يكون بصفر (0) .
· ليس للدالة بارامترات .
· الغرض: قراءة حالة مفتاح من لوحة المفاتيح بمجرد الضغط عليه .
· المطالب : يجب إعداد المنفذ وتهيئة لوحة المفاتيح .

مثال :
كشف المفتاح المضغوط ونسخ رقمه (عائد الدالة) إلى المتغير kp المعرف مسبقا char kp:

كود:
char kp; ... kp = Keypad_Key_Press();
3- الدالة Keypad_Key_Click "النقر على مفتاح من لوحة المفاتيح "
· نموذج كتابة الدالة :


كود:
char Keypad_Key_Click(void);
· العائدات : تعود الدالة بكود رقم المفتاح الذى تم النقر عليه (1..16) ( نوع char ). وإذا لم يكن هناك أى مفتاح تم النقر عليه فإن العائد يكون بصفر (0) .
· ليس للدالة بارامترات .
· الغرض: تظل الدالة فى حالة إنتظار حتى يتم النقر على مفتاح (الضغط ثم التحرير ) . عند التحرير تعود الدالة بالعائد وهو من 1 إلى 16 تبعا للمفتاح .إذا تم الضغط على أكثر من مفتاح فى نفس الوقت فسوف تنتظر الدالة حتى يتم تحرير جميع المفاتيح وبعد ذلك تعود الدالة بكود رقم أول مفتاح تم الضغط عليه .
· المطالب : يجب إعداد المنفذ وتهيئة لوحة المفاتيح .

مثال :
كود:
char kp; ... kp = Keypad_Key_Click();



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 04-04-2012, 12:35 PM المشاركة 118   
افتراضي


التدريب على لوحة المفاتيح :
يعتمد هذا التدريب لوحات المفاتيح التى تحتوى على من 1 إلى 4 صفوف ومن 1 إلى 4 أعمدة .
·الدالة Keypad_Key_Click() " نقر لوحة المفاتيح" تعود بكود فى المدى( 1….16 ) يمثل موقع المفتاح الذى تم النقر عليه .
·فى هذا التدريب سوف يتم تحويل الكود العائد إلى أكواد أسكى [0..9,A..F] وعرضها على وحدة العرض LCD .
·بالإضافة إلى ذلك يتم عرض عداد لعدد مرات الضغطات المتتالية لنفس المفتاح فى الصف الثانى لوحدة العرض LCD.

الدائرة الكهربية :



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 04-04-2012, 12:38 PM المشاركة 119   
افتراضي


البرنامج :

كود:
// LESSON 20 Keypad-LCD-Tutotial 1
unsigned short kp, cnt, oldstate = 0;
char txt[6];

// Keypad module connections
char  keypadPort at PORTD;
// End Keypad module connections

// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

void main() {
  cnt = 0;                                 // Reset counter
  Keypad_Init();                           // Initialize Keypad


Lcd_Init();                              // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                     // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);                // Cursor off
  Lcd_Out(1, 1, "1");
  Lcd_Out(1, 1, "Key  :");                 // Write message text on LCD
  Lcd_Out(2, 1, "Times:");

  do {
    kp = 0;                                // Reset key code variable

    // Wait for key to be pressed and released
    do
      // kp = Keypad_Key_Press();          // Store key code in kp variable
      kp = Keypad_Key_Click();             // Store key code in kp variable
    while (!kp);
   // Prepare value for output, transform key to it's ASCII value
    switch (kp) {
      //case 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
      //case 11: kp = 48; break;  // '0'
      //case 12: kp = 35; break;  // '#'
      //default: kp += 48;

      case  1: kp = 49; break; // 1        // Uncomment this block for keypad4x4
      case  2: kp = 50; break; // 2
      case  3: kp = 51; break; // 3
      case  4: kp = 65; break; // A
      case  5: kp = 52; break; // 4
      case  6: kp = 53; break; // 5
      case  7: kp = 54; break; // 6
      case  8: kp = 66; break; // B
      case  9: kp = 55; break; // 7
      case 10: kp = 56; break; // 8
      case 11: kp = 57; break; // 9
      case 12: kp = 67; break; // C
      case 13: kp = 42; break; // *
      case 14: kp = 48; break; // 0
      case 15: kp = 35; break; // #
      case 16: kp = 68; break; // D

    }

    if (kp != oldstate) {                  // Pressed key differs from previous
      cnt = 1;
      oldstate = kp;
      }
    else {                                 // Pressed key is same as previous
      cnt++;
      }

    Lcd_Chr(1, 10, kp);                    // Print key ASCII value on LCD

    if (cnt == 255) {                      // If counter varialble overflow
      cnt = 0;
      Lcd_Out(2, 10, "   ");
      }

    WordToStr(cnt, txt);                   // Transform counter value to string
    Lcd_Out(2, 10, txt);                   // Display counter value on LCD
  } while (1);
}



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 04-04-2012, 12:57 PM المشاركة 120   
افتراضي


مشروع قفل إلكترونى برقم سرى قابل للتغيير والتطوير كتطبيق على LCD&Keypad&EEPROM :
الدائرة الكهربية :




الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 07:24 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)