- لماذا نحتاج لوحة مفاتيح 4x4:
- كيف تعمل لوحة المفاتيح 4x4 Matrix Keypad:
- المواد المطلوبة:
- مخطط الرسم البياني:
- شرح البرمجة:
لوحات المفاتيح هي أجهزة إدخال مستخدمة على نطاق واسع في مختلف الإلكترونيات والمشاريع المدمجة. يتم استخدامها لأخذ المدخلات في شكل أرقام وحروف أبجدية ، وإدخالها في النظام لمزيد من المعالجة. في هذا البرنامج التعليمي سنقوم بربط لوحة مفاتيح مصفوفة 4x4 مع PIC16F877A.
قبل الدخول في منطق التفاصيل ومعرفة كيفية استخدام لوحة المفاتيح ، سنحتاج إلى معرفة بعض الأشياء.
لماذا نحتاج لوحة مفاتيح 4x4:
عادةً ما نستخدم دبوس إدخال / إخراج واحد لوحدة متحكم دقيقة لقراءة الإشارة الرقمية ، مثل إدخال مفتاح. في عدد قليل من التطبيقات التي يلزم فيها 9 ، 12 ، 16 مفتاحًا لأغراض الإدخال ، إذا أضفنا كل مفتاح في منفذ متحكم دقيق ، فسننتهي باستخدام 16 منفذ إدخال / إخراج. منافذ الإدخال / الإخراج الـ 16 هذه ليست فقط لقراءة إشارات الإدخال / الإخراج ، ولكن يمكن استخدامها كتوصيلات طرفية أيضًا ، مثل دعم ADC ، كما يتم دعم اتصالات I2C و SPI بواسطة دبابيس الإدخال / الإخراج هذه. نظرًا لأن هذه المسامير متصلة بالمفاتيح / المفاتيح ، فلا يمكننا استخدامها ولكن فقط كمنافذ إدخال / إخراج. هذا لا معنى له على الإطلاق. لذا ، كيف تقلل عدد الدبوس؟ الإجابة هي استخدام لوحة مفاتيح سداسية عشرية أو لوحة مفاتيح مصفوفة ؛ يمكننا تقليل عدد الدبوس، والتي تربط مفاتيح المصفوفة 4x4. سيستخدم 8 دبابيس من بينها 4 متصلة في صفوف و 4 متصلة في أعمدة ، وبالتالي توفير 8 دبابيس من وحدة التحكم الدقيقة.
كيف تعمل لوحة المفاتيح 4x4 Matrix Keypad:
في الصورة العليا ، تظهر وحدة لوحة مفاتيح مصفوفة على اليسار. على اليمين يظهر الاتصال الداخلي وكذلك اتصال المنفذ. إذا رأينا المنفذ هناك 8 دبابيس ، أول 4 من اليسار إلى اليمين هي X1 و X2 و X3 و X4 هي الصفوف ، وآخر 4 من اليسار إلى اليمين هي Y1 و Y2 و Y3 و Y4 أربعة أعمدة. إذا جعلنا 4 صفوف أو الجانب X كما الانتاج وجعلها أدنى منطق أو 0 ، وجعل 4 أعمدة كما المدخلات وقراءة مفاتيح سنقرأ الصحافة التبديل عندما مراسل يحصل Y 0.
سيحدث نفس الشيء في مصفوفة nxn حيث n هو الرقم. يمكن أن يكون 3x3 ، 6x6 إلخ.
الآن فقط أعتقد أن 1 مضغوط. ثم يقع 1 في صف X1 وعمود Y1. إذا كانت X1 تساوي 0 ، فإن Y1 ستكون 0. وبنفس الطريقة يمكننا استشعار كل مفتاح في صف X1 ، عن طريق استشعار العمود Y1 و Y2 و Y3 و Y4. يحدث هذا الشيء لكل مفتاح وسنقرأ موضع المفاتيح في المصفوفة.
كل دوائر خضراء هي المفتاح وكلاهما متصلان معًا بنفس الطريقة.
في هذا البرنامج التعليمي ، سنقوم بتوصيل لوحة المفاتيح بالمواصفات التالية-
- سوف نستخدم السحب الداخلي
- سنضيف خيار فك مفتاح الارتداد
ولكن ليس عندما تكون مفاتيح ضغط نحن بحاجة للتأكد من Y1، Y2، Y3 وY4 كما مرتفعة أو 1. وإلا فإننا لا يمكن الكشف عن التغييرات المنطق عندما يتم الضغط على مفتاح. لكننا لم نتمكن من جعله عن طريق الرموز أو البرنامج نظرًا لاستخدام هذه المسامير كمدخلات ، وليس إخراج. لذلك ، سنستخدم سجل تشغيل داخلي في وحدة التحكم الدقيقة ونشغل تلك المسامير كوضع تمكين سحب ضعيف. باستخدام هذا ، سيكون هناك وضع تمكين منطقي مرتفع عندما يكون في الحالة الافتراضية.
أيضًا ، عندما نضغط على المفتاح ، تحدث ارتفاعات أو ضوضاء مع جهات اتصال التبديل ، وبسبب هذا الضغط على المفتاح المتعدد يحدث وهو أمر غير متوقع. لذلك ، سنكتشف أولاً الضغط على المفتاح ، وانتظر بضع أجزاء من الثانية ، ثم تحقق مرة أخرى مما إذا كان المفتاح لا يزال مضغوطًا أم لا ، وإذا استمر الضغط على المفتاح ، فسنقبل الضغط على المفتاح في النهاية وإلا لا. يسمى هذا بإلغاء ارتداد المفاتيح.
سنقوم بتنفيذ كل هذا في التعليمات البرمجية الخاصة بنا ، ونقوم بإجراء الاتصال على اللوح.
تحقق أيضًا من كيفية توصيل لوحة مفاتيح 4x4 بوحدات تحكم دقيقة أخرى:
- واجهة لوحة المفاتيح مع Arduino Uno
- 4x4 مصفوفة لوحة المفاتيح تتفاعل مع 8051 متحكم
- 4x4 Keypad Interfacing مع ATmega32 Microcontroller
- قفل رمز Raspberry Pi الرقمي على اللوح
المواد المطلوبة:
- اللوح
- Pic-kit 3 وبيئة التطوير في جهاز الكمبيوتر الخاص بك ، أي MPLABX
- الأسلاك والموصلات
- شاشة LCD مقاس 16x2.5 سم
- 20 ميجا هرتز كريستال
- 2 قطعة 33pF غطاء قرص السيراميك.
- 4.7 كيلو المقاوم
- 10 كيلو مسبقا (المقاوم المتغير)
- لوحة مفاتيح 4x4 ماتريكس
- محول 5 فولت
مخطط الرسم البياني:
سنقوم بتوصيل البلورات والمقاوم في المسامير المرتبطة. أيضًا ، سنقوم بتوصيل شاشة LCD في وضع 4 بت عبر PORTD. قمنا بتوصيل لوحة المفاتيح السداسية أو لوحة المفاتيح المصفوفة عبر المنفذ RB4.
إذا كنت جديدًا على PIC ، فابدأ بـ Getting started with PIC Microcontroller: مقدمة عن PIC و MPLABX
شرح البرمجة:
يتم تقديم الكود الكامل للتفاعل بين لوحة مفاتيح Matrix Keypad مع PIC Microcontroller في النهاية. الكود سهل ولا يحتاج إلى شرح. مكتبة لوحة المفاتيح هي الشيء الوحيد الذي يجب فهمه في الكود. استخدمنا هنا keypad.h و lcd.h Library لربط لوحة المفاتيح وشاشة LCD مقاس 16 × 2. لذلك دعونا نرى ما يحدث داخل ذلك.
داخل keypad.h سنرى أننا استخدمنا رأس xc.h وهو مكتبة التسجيل الافتراضية ، يتم تعريف التردد البلوري لاستخدام التأخير المستخدم في ملف kepad.c. حددنا منافذ لوحة المفاتيح في سجل PORTRB وحددنا المسامير الفردية بصفتها صف (X) وأعمدة (Y).
استخدمنا أيضًا وظيفتين إحداهما لتهيئة لوحة المفاتيح والتي ستعيد توجيه المنفذ كإخراج وإدخال ، ومسح ضوئي للضغط على المفتاح سيعيد حالة ضغط المفتاح عند الاتصال.
#تضمن
في keypad.c سنرى أن الوظيفة أدناه ستعيد الضغط على المفتاح عندما لا تعود وظيفة الماسح الضوئي للوحة المفاتيح "n".
char switch_press_scan (void) // احصل على مفتاح من المستخدم { char key = 'n'؛ // تفترض عدم الضغط على أي مفتاح أثناء (المفتاح == 'n') // انتظر حتى يتم الضغط على مفتاح مفتاح = keypad_scanner () ؛ // امسح المفاتيح مرارًا وتكرارًا مفتاح العودة ؛ // عند الضغط على المفتاح ثم إرجاع قيمته }
يوجد أدناه وظيفة قراءة لوحة المفاتيح. في كل خطوة سنجعل الصف X1 و X2 و X3 و X4 على شكل 0 ونقرأ حالة Y1 و Y2 و Y3 و Y4. يتم استخدام التأخير لتأثير الارتداد ، عندما لا يزال المفتاح مضغوطًا ، سنعيد القيمة المرتبطة به. عندما لا يتم الضغط على مفتاح سنعود "n".
char keypad_scanner (باطل) { X_1 = 0 ؛ X_2 = 1 ، X_3 = 1 ، X_4 = 1 ، إذا (Y_1 == 0) {__delay_ms (100) ؛ بينما (Y_1 == 0) ؛ إرجاع "1" ؛ } إذا (Y_2 == 0) {__delay_ms (100) ؛ بينما (Y_2 == 0) ؛ إرجاع "2" ؛ } إذا (Y_3 == 0) {__delay_ms (100) ؛ بينما (Y_3 == 0) ؛ إرجاع "3" ؛ } إذا (Y_4 == 0) {__delay_ms (100) ؛ بينما (Y_4 == 0) ؛ إرجاع "أ" ؛ } X_1 = 1 ؛ X_2 = 0 ؛ X_3 = 1 ، X_4 = 1 ، إذا (Y_1 == 0) {__delay_ms (100) ؛ بينما (Y_1 == 0) ؛ إرجاع "4" ؛ } إذا (Y_2 == 0) {__delay_ms (100) ؛ بينما (Y_2 == 0) ؛ إرجاع "5" ؛ } إذا (Y_3 == 0) {__delay_ms (100) ؛ بينما (Y_3 == 0) ؛ إرجاع "6" ؛ } إذا (Y_4 == 0) {__delay_ms (100) ؛ بينما (Y_4 == 0) ؛ العودة "ب" ؛ } X_1 = 1 ؛ X_2 = 1 ، X_3 = 0 ، X_4 = 1 ، إذا (Y_1 == 0) {__delay_ms (100) ؛ بينما (Y_1 == 0) ؛ إرجاع "7" ؛ } إذا (Y_2 == 0) {__delay_ms (100) ؛ بينما (Y_2 == 0) ؛ إرجاع "8" ؛ } إذا (Y_3 == 0) {__delay_ms (100) ؛ بينما (Y_3 == 0) ؛ إرجاع "9" ؛ } إذا (Y_4 == 0) {__delay_ms (100) ؛ بينما (Y_4 == 0) ؛ إرجاع "C" ؛ } X_1 = 1 ؛ X_2 = 1 ، X_3 = 1 ، X_4 = 0 ؛ إذا (Y_1 == 0) {__delay_ms (100) ؛ بينما (Y_1 == 0) ؛ إرجاع '*'؛ } إذا (Y_2 == 0) {__delay_ms (100) ؛ بينما (Y_2 == 0) ؛ إرجاع "0" ؛ } إذا (Y_3 == 0) {__delay_ms (100) ؛ بينما (Y_3 == 0) ؛ إرجاع '#'؛ } إذا (Y_4 == 0) {__delay_ms (100) ؛ بينما (Y_4 == 0) ؛ إرجاع "D" ؛ } return 'n'؛ }
سنقوم أيضًا بتعيين السحب الضعيف على آخر أربع بتات ، وكذلك تحديد اتجاه المنافذ كآخر 4 مدخلات وأول 4 كمخرجات. و OPTION_REG و= 0x7F. يستخدم لضبط وضع السحب الضعيف على آخر دبابيس.
InitKeypad باطل (باطل) { Keypad_PORT = 0x00 ؛ // تعيين قيم منفذ لوحة المفاتيح صفر Keypad_PORT_Direction = 0xF0 ؛ // آخر 4 دبابيس إدخال ، خرج أول 4 دبابيس OPTION_REG & = 0x7F ؛ }
في برنامج الموافقة المسبقة عن علم الرئيسي (الوارد أدناه) قمنا أولاً بتعيين بتات التكوين وقمنا بتضمين عدد قليل من المكتبات المطلوبة. ثم في وظائف system_init الفارغة نقوم بتهيئة لوحة المفاتيح وشاشات الكريستال السائل. وأخيرا في في أهم وظيفة قرأنا لوحة المفاتيح عن طريق استدعاء switch_press_scan () وظيفة وإرجاع القيمة لشاشات الكريستال السائل.
قم بتنزيل الكود الكامل مع ملفات الرأس من هنا وتحقق من فيديو العرض التوضيحي أدناه.