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

أدوات الموضوع

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:93
قديم 11-09-2012, 07:41 PM المشاركة 1   
افتراضي تعلم كيفية التعامل مع الكيباد بانواعه وبالميكروسى ((الجزء الثانى)) الكيبورد Twitter FaceBook Google+



بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

فى هذا الجزء سوف نتحدث ان شاء الله عن الكيبورد 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
اول امر هو

كود:
Ps2_Config
وهو امر تعريف الاطراف وتهيئتها للعمل

ويكتب هكذا

كود:
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;
اولا يكتب هذه الاوامر قبل الداله الرئيسية
كود:
 void main
وفية تعريف الاطراف يمكنك تغيرهم كما تشاء فقط اكتب مكان C اى اسم لاى بورت اخر

وبعد ذلك تضع هذا الامر داخل الداله الرئيسية
كود:
 void main
كود:
Ps2_Config();
.................................................. .................................................. ..........

ثانى امر هو

كود:
Ps2_Key_Read
وهو امر قراءة اوامر وازرار الكيبورد

وهو ببساطة يعطيك ثلاث قيم تعبر عن كل شىء فى الكيبورد

وتحفظ كل قيمة منهم فى متغير اى اننا نحتاج الى 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

وبعد ذلك امر تعريف مكتبة الكيبورد

كود:
Ps2_Config();
.................................................. .................................................. ..........

ثم while وهو امر التكرار الى ملانهاية

ثم امر قراءة الكيبورد وازرارة

كود:
Ps2_Key_Read(&keydata, &special, &down);
ونضع بداخلة اسماء المتغيرات بتاعتنا

ثم اختبار هل تم الضغط على اى زرار فى الكيبورد ام لا
وهذا من خلال اختبار قيمة المتغير down اذا كان يساوى 1 فنعم تم الضغط
ونبدء فى تنفيذ الاوامر
اما اذا كان يساوى 0 فلم يتم الضغط

كود:
if(down==1){down=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

.................................................. ..انتهى........................................... .......


اى سؤال او شىء غير مفهوم فقط اترك سؤال عنة وان شاء الله اجيبك بتفصيل اكثر
وانا تحت امركم ان شاء الله

اعلانات

الصورة الرمزية هيثم العليمي
هيثم العليمي
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
الدولة: yemen
المشاركات: 236
نشاط [ هيثم العليمي ]
قوة السمعة:0
قديم 12-09-2012, 08:26 PM المشاركة 2   
افتراضي


سلمت يداك يا مهندسنا الغالي ...

شرح رائع ومميز ... وواضح


بانتضار الجديد

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

eng/desha
:: مهندس ::
تاريخ التسجيل: Sep 2012
المشاركات: 46
نشاط [ eng/desha ]
قوة السمعة:0
قديم 12-09-2012, 08:43 PM المشاركة 3   
افتراضي


موضوع رائع وشرح ممتاز


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:93
قديم 13-09-2012, 01:20 PM المشاركة 4   
افتراضي


بسم الله الرحمن الرحيم

اخى هيثم العليمي

جزاك الله كل خير شكرا جزيلا لك على متابعتك للمواضيع
وان شاء الله اى جديد سوف اقوم بتنزيلة

اخى eng/desha

شكرا جزيلا لك يا اخى ارجوا ان تكون استفد منه بشكل كامل

بالتوفيق لنا جميعا ان شاء الله


hunter27
:: مهندس جيد ::
تاريخ التسجيل: Jul 2012
الدولة: المغرب
المشاركات: 284
نشاط [ hunter27 ]
قوة السمعة:0
قديم 13-09-2012, 06:09 PM المشاركة 5   
افتراضي


السلام عليكم

دمتم بهذآ العـطآء ألمستمـر

يسعـدني ألـرد على مـوأإضيعكـم

وأتلـذذ بمـآ قرأت وشآهـدت

تـقبل مني خـآلص احترامي

و الله دائما مواضيعك متميزة و مفيذة كثيييييراا ما شاء الله

والله وحده الذي يعلم كم ندعو لك

ربنا يحفظك و يوفقك لما يحب و يرضى


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:93
قديم 13-09-2012, 10:56 PM المشاركة 6   
افتراضي


بسم الله الرحمن الرحيم

اخى hunter27
جزاك الله كل خير والله شىء يفرح ويشجع شكرا جزيلا لك
والحمد لله ان الشرح كويس وانكوا استفدوا

اتمنى لكم جميعا التوفيق فى حياتكم بما يرضى الله

بالتوفيق لك يا اخى


عبدالعزيز السيد
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 72
نشاط [ عبدالعزيز السيد ]
قوة السمعة:0
قديم 29-09-2014, 08:54 AM المشاركة 7   
افتراضي


جزاك الله خيرا اخى الكريم ولكن السيمسوليشن لا يعمل عندما اضغط على اى زر من الكيبورد فما الخطا؟

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025