 |
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
|
|
نشاط [ funky112233 ]
قوة السمعة:93
|
|
11-09-2012, 07:41 PM
المشاركة 1
|
|
بسم الله الرحمن الرحيم
السلام عليكم ورحمه الله وبركاته
فى هذا الجزء سوف نتحدث ان شاء الله عن الكيبورد KeyBoard
والذى يتكون فى بعض الاحيان من 104 زرار ويزيد عن ذلك
اى 104 وظيفة مختلفة
وكل هذا من خلال طرفين فقط من المتحكم ((الميكروكنترولر))
وهو هام جدا للناس الى بتتعامل مع الماتريكس
لانة يمكنك تركيب كيبورد مع شاشة LCD صغيرة
ويقوم المستخدم بتركيب اى كيبورد فى المدخل الخاص
ويقوم بكتابة ما يريد ثم يضغط Enter مثلا فيتم العرض على الماتريكس
وايضا هام للروبوت
تخيل انك تتحكم فى ريوبروت من خلال الاسهم الخاصة بالكيبورد
مثل العاب الكمبيوتر هههههههههه وايضا هناك 104 وظيفة مختلفة
ولكن اولا
هذا هو رابط الجزء الاول وفية كيفية استخدام الكيباد 4*4 واشباهة وبشكل عام
http://www.qariya.com/vb/showthread.php?t=113833
__________________________________________________ __________________________
ثانيا
شاهدوا هذا الفديو
مع العلم انا هنا استخدم GLCD لان معنديش العادية والكود الي هرفعه ان شاء الله يتعامل مع شاشة عادية
لان ال GLCD دى لها مكتبة خاصة وسوف تشرح ان شاء الله فى موضوعها
فالفديو للتوضيح ليس الا
__________________________________________________ ______________________
وبعد ما شوفنا الفديو هنخوش فى الجزء العملى على طول ولكن هبدء ان شاء الله
بتركيب الدائرة ال hardware
وبعد كدا نخش على البرمجة ان شاء الله
اولا انظر الى الصورة التالية

زى مانت شايف كدة كل طرف مكتوب جنبة الطرف بتاعه واسمة
وكل الى هنحتاجة 4 اطراف
2 للبور الكهرباء و 2 لتبادل المعلومات واسمهم data && Clock
وبالنسبة للمقاومتين فا من غيرهم هيشتغل عادى بردوة
ولكن لو مشروعك حساس الافضل تلتزم بيهم
دة بالنسبة للى مش عايز لعب فى الكيبورد
اما لو هتعمل زى وعايز توصل من جوة الكيبورد
يبقى اطلع على الصورة دى

هذه هى البوردة الخاصة بالكيبورد
وكما ترى هناك 4 اسلاك
الاول امامة حرف V وهذا يعنى طرف الموجب للكيبورد
الثانى امامة حرف G وهذا يعنى طرف الارضى السالب للكيبورد
الثالث امامة حرف D وهذا يعنى طرف الداتا Data للكيبورد
الرابع امامة حرف C وهذا يعنى طرف الساعة Clock للكيبورد
اما عن تحديد اطراف التوصيل فى البك فدة انت بتحددة من الكود الخاص بك على حسب ما تريد
__________________________________________________ _____________________
ناتى الان الى جزء السوفت وير والبرمجة
اولا
حمل الكود والدائرة وكل شىء من هنا
http://www.4shared.com/rar/y3TUeXs1/keyboard.html?
.................................................. ..........................................
ثانيا
المكتبة الخاصة بالتعامل مع الكيبورد اسمها PS/2
واوامرها امران فقط وهما
كود:
Ps2_Config
Ps2_Key_Read
اول امر هو
وهو امر تعريف الاطراف وتهيئتها للعمل
ويكتب هكذا
كود:
sbit PS2_Data at RC0_bit;
sbit PS2_Clock at RC1_bit;
sbit PS2_Data_Direction at TRISC0_bit;
sbit PS2_Clock_Direction at TRISC1_bit;
اولا يكتب هذه الاوامر قبل الداله الرئيسية وفية تعريف الاطراف يمكنك تغيرهم كما تشاء فقط اكتب مكان C اى اسم لاى بورت اخر
وبعد ذلك تضع هذا الامر داخل الداله الرئيسية .................................................. .................................................. ..........
ثانى امر هو
وهو امر قراءة اوامر وازرار الكيبورد
وهو ببساطة يعطيك ثلاث قيم تعبر عن كل شىء فى الكيبورد
وتحفظ كل قيمة منهم فى متغير اى اننا نحتاج الى 3 متغيرات لقراءة الكيبورد
وهذا الامر يكتب هكذا
كود:
Ps2_Key_Read(&keydata, &special, &down)
كما ترى هناك ثلاث متغيرات
المتغير الاول Keydata
وهو المتغير الخاص بقراءة قيم الازرار بالاسكى كود
اى ان كل زر من الكيبورد يرسل رقم مقابل له بالاسكى كود
يعنى لعرضه على الشاشة انت لست بحاجة لتحويلة بل يعرض على طول جاهز
وهذا يعنى ان مثلا اذا ضغط على الحرف a فى الكيبورد
هيتم ارسال الرقم 97 اى ان Keydata هيساوى 97
وهكذا مع كل الازرار ..
.................................................. ................................................
المتغير الثانى special
كما نعلم انة يوجد فى الكيبورد ازرار مثل F1 الى F12
وايضا Enter و Esc و الاسهم الاربعه و Ctrl و Alt و Shift
وكل هذه الازرار
ولكن هذه الازرار ترسل ارقام مختلفة شوية
بترسل 2 بايت يعنى 16 خانة علشان تعبر عن اى رقم فيهم
وطبعا دى مشكلة
لكن الميكروسى حلهالنا من خلال المكتبة بتعتة
وهنا يظهر دور المتغير special
وهو انة عند ضغطك على اى زر من هذه الازرار
يصبح قيمة هذا المتغير تساوى 1
والمتغير الاول Keydata يكون برقم يعبر عن الزر المضغوط علية
اى يجب قراءة المتغير special اولا اذا كان يساوى 1
نبدء نختبر انهى زرار تم الضغط علية من هذه الازرار التى ذكرتها
من خلال المتغير الاول Keydata
وكل زر لة رقم مكتوب داخل مكتبة الميكروسى
يمكنك معرفة كيفية الدخول الى المكتبات من خلال الرابط الاتى
http://www.qariya.com/vb/showthread.php?t=112652
وتسمى بال Special Function Keys
وهذه صورة لكى تضح الرؤية اكثر

كما نرى كل زر له قيمة موضوعه امامة
وان شاء الله هنتعرف ازاى نقدر نستخدمهم داخل الكود
.................................................. .................................................. ..........
المتغير الثالث down
هذا المتغير تكون قيمتة 1 اذا تم الضغط على اى زر فى الكيباد واذا لم يضغط يكون ب 0
اى يخبرنا اذا تم الضغط على اى زر ام لا
ملحوظة ::
يمكن تغير اسماء المتغيرات كما نريد ولكن الترتيب هو الاهم
مثل المتغير الاول والثانى وهكذا
.................................................. ..........................................
ثالثا دة الكود
كود:
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit PS2_Data at RD0_bit;
sbit PS2_Clock at RD1_bit;
sbit PS2_Data_Direction at TRISD0_bit;
sbit PS2_Clock_Direction at TRISD1_bit;
unsigned short keydata = 0, special = 0, down = 0;
void main() {
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Ps2_Config();
while(1){
Ps2_Key_Read(&keydata, &special, &down);
if(down==1){down=0;
if(special==1){special=0;
if(keydata==16){Lcd_Cmd(_LCD_CLEAR);}
else {Lcd_Chr_Cp(keydata);}
}
}
}
اولا
تم تعريف ارجل الشاشة
ثانيا وهذا هو الاهم تعريف الارجل التى سوف يربط بها الميكرو والكيبورد وهى
كود:
sbit PS2_Data at RD0_bit;
sbit PS2_Clock at RD1_bit;
sbit PS2_Data_Direction at TRISD0_bit;
sbit PS2_Clock_Direction at TRISD1_bit;
كما ترون اخترت انا اول طرفين فى البورت D
.................................................. .................................................. .........
ثم قمت بتعريف الثلاث متغيرات الى هنحتاجهم لقراءة ازرار الكيبورد
كود:
unsigned short keydata = 0, special = 0, down = 0;
ويمكن تغير اسمائهم كما قلت
.................................................. .................................................. ..........
ثم اوامر تعريف الشاشة ولن اشرحها هنا بالطبع اذا اردت شرح لها
اتبع الرابط التالى
http://www.qariya.com/vb/showthread.php?t=113441
وبعد ذلك امر تعريف مكتبة الكيبورد
.................................................. .................................................. ..........
ثم while وهو امر التكرار الى ملانهاية
ثم امر قراءة الكيبورد وازرارة
كود:
Ps2_Key_Read(&keydata, &special, &down);
ونضع بداخلة اسماء المتغيرات بتاعتنا
ثم اختبار هل تم الضغط على اى زرار فى الكيبورد ام لا
وهذا من خلال اختبار قيمة المتغير down اذا كان يساوى 1 فنعم تم الضغط
ونبدء فى تنفيذ الاوامر
اما اذا كان يساوى 0 فلم يتم الضغط
وانا هنا اذا تم الضغط اجعلة يساوى 0 حتى لا انساة
لانة يجب ان نرجع قيمتة الى 0 حتى لا يحدث خطا
.................................................. .................................................. ..........
فاذا تم الضغط سوف نقوم اولا باختبار قيمة المتغير special
فاذا كان يساوى 1 فهذا يعنى انة تم الضغط على الازرار الخاصة
مثل Enter او Alt كما ذكرت سابقا
فاذا حدث ذلك نقوم بجعل قيمتة ب 0 اوى
ثم نختبر اى زر تم الضغط علية
كود:
if(special==1){special=0;
وانا اخبرتة اذا كان ال Keydata يساوى 16 يقوم بمسح الشاشة
وهذا الزر يعنى زرار المسح فى الكيبورد
كود:
if(keydata==16){Lcd_Cmd(_LCD_CLEAR);}
.................................................. .................................................. ..........
واذا لم تكن قيمة المتغير special تساوى 1 اى انة مازال يساوى 0
فهذا يعنى انه لم يتم الضغط على اى زرار خاص
بل تم الضغط على ازرار الحروف
فهنا وكما ذكرت ان كل حرف يرسل قيمتة بالاسكى كود لذلك
لا نحتاج الى تحويلة لعرضة على الشاشة
فيتم عرضة على طول
كود:
else {Lcd_Chr_Cp(keydata);}
ويقوم البرنامج بعد ذلك بتكرار الاوامر مرة اخرى ...
ملحوظة ::
الكود صغير حتى يكون سهل على الفهم ..
الامر فى غاية البساطة فا فى البداية
يتم التاكد هل ارسل الكيبورد اى شىء ام لا
فاذا ارسل فسوف تتغير قيمة المتغيرات وهذا من خلال امر القراءة
ثم نقوم بعد ذلك باختبار هل تم الضغط على اى زر مهما كان فى الكيبورد ام لا
من خلال المتغير الثالث down فاذا كان ب 1 فنعم تم الضغط واذا كان ب 0 فلا
ثم نقوم بعمل اختبار داخل جملة الاختبار الاولى الخاصة ب down
اى ان جمل الاختبار كلها داخل الاختبار الاول
وهو يختبر المتغير special
فاذا كان ب 1 فهذا يعنى انه تم الضغط على الازرار الخاصة كما ذكرت
وهنا نقوم بختبار قيمة كل زر وما نريد فعلة اذا تم الضغط علية
مثل مسح الشاشة او Enter يقوم بارسال شىء معين
كلة كما نريد
اما اذا كان يساوى 0 فهذا يعنى انة لم يتم الضغط على زرار خاص
بل تم الضغط على ازرار الحروف
وهنا يتم عرضها مباشرة على الشاشة ويمكن ايضا عمل وظائف اخر
وبالنسبة للكتابة بالعربى من الكيبورد فالامر سهل ان شاء الله
فيمكننا اختبار هل تم الضغط على Shift و Alt معا
فهنا نقوم بتفعيل الكتابة من خلال الفونت العربى
وهكذا وهذا كلة مشروح فى دروس ال GLCD
.................................................. ..انتهى........................................... .......
اى سؤال او شىء غير مفهوم فقط اترك سؤال عنة وان شاء الله اجيبك بتفصيل اكثر
وانا تحت امركم ان شاء الله
|