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

   

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



· كتابة النص Key :" " بدءا من الصف الأول والعامود الأول (لاحظ وجود مسافتين خالية قبل : لتنسيق النص على الشاشة كما فى الشكل .

كود:
Lcd_Out(1, 1, "Key :"); // Write message text on LCD
· وكتابة النص "Times:" بدءا من الصف الثانى والعامود الأول .
كود:
Lcd_Out(2, 1, "Times:");




اعلانات

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


· الدخول فى حلقة غير منتهية :
كود:
 do{…..}while(1)
وفيها يتم تنفيذ :



كود:
do {
· الجزء الخاص باستخلاص رقم المفتاح الذى يتم النقر عليه وحفظه فى المتغير الخاص به kp .
# تصفير متغير كود المفتاح kp

كود:
kp = 0; // Reset key code variable
# الدخول فى حلقة داخلية
كود:
do{….} while(condition)
تعبر عن الانتظار حتى يتم النقر على مفتاح أى الضغط ثم التحرير وفيها : يتم قراءة (مسح) جميع المفاتيح بالدالة
كود:
Keypad_Key_Click();
ونسخ نتيجة المسح فى متغير كود رقم المفتاح kp واختبار : هل تم تغيير حالة kp من الصفر إلى معكوسه وهو الواحد ؟ ففى حالة عدم التغيير تكون kp=0 ويكون معكوسها !kp=1 ويتحقق شرط while وتتكرر الحلقة حتى يتم تغيير حالة kp إلى قيمة غير صفرية فيكون معكوسها بقيمة صفرية ولا يتحقق الشرط فيخرج البرنامج من هذه الحلقة و يحتوى kp على كود الرقم الذى تم النقر عليه .


كود:
// Wait for key to be pressed and released do{ kp = Keypad_Key_Click(); // Store key code in kp variable Delay_ms(10); //wait a bit } while (!kp);


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 25-04-2011 الساعة 06:26 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

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


# تحويل (تجهيز) كود الرقم السابق إلى كود أسكى ليصلح لعرضه على وحدة العرض LCD باستخدام اختبار المطابقة من بين عدد من الحالات الممكنة باستخدام تعبير
كود:
 switch(….){case:1…..
كما يلى


كود:
// Prepare value for output, transform key to it's ASCII value switch (kp) { 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 default: kp += 48; }


الصورة الرمزية compiler_x
compiler_x
:: مهندس متميز ::
تاريخ التسجيل: Apr 2008
الدولة: IRAQ
المشاركات: 374
نشاط [ compiler_x ]
قوة السمعة:
قديم 25-04-2011, 06:32 PM المشاركة 12   
افتراضي


سبحان الله يا محاسن الصدف
حيث يصدف اني اشتريت كي باد 3*4 البارحة وكنت اخطط للعمل عليها ولا اعتقد ان هناك فارق كبير بين 4*4 او 3*4 فقط الاختلاف في البرمجة داخل المتحكم ، ام ان لك راي اخر يا استاذ فتح الله ؟


جنبتني عناء البحث في المواقع الاجنبيه ، جنبك الله كل سوء وزادك اجرا فيما تقدمه


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


الآن الجزء الخاص بعدد مرات النقر على نفس المفتاح :
يستخدم تعبير الشرط if للتحقق من أن محتويات المتغير kp (كود رقم المفتاح) لا تساوى != " " محتويات متغير الحالة السابقة oldstate علما بأننا وضعنا صفر فى المتغير oldstate فى البداية وعندما يحتوى kp على رقم أى غير صفر فإن الشرط يتحقق أى أنه تم النقر على مفتاح غير المفتاح السابق ويتم تنفيذ : } جعل متغير العداد cnt (الذى كان صفر ) بواحد cnt=1 ونسخ محتويات kp إلى oldstste لتصبح حالة سابقة للحالة التالية oldstate=kp { ويخرج إلى ما بعد تعبير else
وإذا لم يتحقق الشرط أى أنه تم النقر على نفس المفتاح فيتم تنفيذ ما بعد else وهو زيادة متغير العداد بواحد ليعطى الرقم التالى للرقم المسجل سابقا .


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


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


· عرض (كتابة) رقم المفتاح kp كحرف من حروف أسكى عند الصف الأول والعامود العاشر .

كود:
Lcd_Chr(1, 10, kp); // Print key ASCII value on LCD


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


· التأكد من عدم تجاوز العداد cnt أقصى قيمة متاحة وهى 255 . فعندما يصل إلى هذه القيمة يتحقق الشرط cnt == 255 ويتم تصفير العداد من جديد cnt = 0 وعرض مسافة فارغة " " فى السطر الثانى والعامود العاشر


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


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


· تحويل قيمة العداد إلى نص ونسخه إلى المتغير text باستخدام دالة التحويل

كود:
WordToStr(cnt, txt); // Transform counter value to string
· عرض(كتابة) محتويات المتغير text بدءا من الصف الثانى والعامود العاشر


كود:
Lcd_Out(2, 10, txt); // Display counter value on LCD
· تكرار العملية بصفة مستمرة لتحديث البيانات .


كود:
 
 
 
} while (1); }



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