لوحات المفاتيح هي أجهزة إدخال مستخدمة على نطاق واسع في مختلف الإلكترونيات والمشاريع المدمجة. يتم استخدامها لأخذ المدخلات في شكل أرقام وألبهايات ، وإدخالها في النظام لمزيد من المعالجة. في هذا البرنامج التعليمي سنقوم بواجهة لوحة مفاتيح مصفوفة 4x4 مع متحكم 8051.
لوحة مفاتيح ماتريكس 4 × 4
قبل أن نربط لوحة المفاتيح بوحدة تحكم دقيقة ، نحتاج أولاً إلى فهم كيفية عملها. تتكون لوحة مفاتيح المصفوفة من مجموعة من الأزرار الانضغاطية المترابطة. كما هو الحال في حالتنا ، نستخدم لوحة مفاتيح مصفوفة 4X4 ، حيث يوجد 4 أزرار ضغط في كل من الصفوف الأربعة. ويتم توصيل أطراف أزرار الضغط وفقًا للرسم التخطيطي. في الصف الأول ، يتم توصيل طرف واحد من جميع الأزرار الانضغاطية الأربعة معًا وطرف آخر من 4 أزرار ضغط يمثل كل من 4 أعمدة ، وينطبق نفس الشيء على كل صف. لذلك نحصل على 8 أطراف توصيل مع متحكم دقيق.
واجهة لوحة المفاتيح مع متحكم 8051 (AT89S52)
نحتاج أولاً إلى واجهة وحدة LCD لعرض البيانات التي سيتم تغذيتها من خلال KEYPAD ، لذا يرجى الاطلاع على مقالة "LCD Interfacing with 8051 Microcontroller" قبل توصيل KEYPAD.
كما هو موضح في الرسم التخطيطي للدائرة أعلاه ، لواجهة لوحة المفاتيح ، نحتاج إلى توصيل 8 أطراف من لوحة المفاتيح بأي منفذ (8 دبابيس) من المتحكم الدقيق. مثلما قمنا بتوصيل أطراف لوحة المفاتيح بالمنفذ 1 من 8051. كلما تم الضغط على أي زر ، نحتاج إلى الحصول على موقع الزر ، وهذا يعني ROW المقابل و COLUMN no. بمجرد أن نحصل على موقع الزر ، يمكننا طباعة الحرف وفقًا لذلك.
الآن السؤال هو كيف تحصل على موقع الزر المضغوط؟ سأشرح هذا في الخطوات أدناه وأريد منك أيضًا إلقاء نظرة على الكود:
1. أولاً ، قمنا بعمل جميع الصفوف إلى المستوى 0 المنطقي وجميع الأعمدة إلى المستوى 1.
2. عندما نضغط على زر ، يتم اختصار العمود والصف المقابل لهذا الزر ويجعل العمود المقابل للمستوى المنطقي 0. نظرًا لأن هذا العمود يصبح متصلاً (قصيرًا) بالصف ، والذي يقع عند المستوى المنطقي 0. لذلك نحصل على العمود لا. انظر وظيفة () الرئيسية.
3. الآن نحتاج إلى إيجاد رقم الصف ، لذلك أنشأنا أربع وظائف مقابلة لكل عمود. كما لو تم الضغط على أي زر في العمود الأول ، فإننا نسمي الوظيفة row_finder1 () ، للعثور على الصف لا.
4. في الدالة row_finder1 () ، قمنا بعكس مستويات المنطق ، مما يعني الآن أن جميع الصفوف هي 1 والأعمدة هي 0. الآن يجب أن يكون صف الزر المضغوط 0 لأنه أصبح متصلاً (مختصرًا) بالعمود الذي يتم الضغط على زره ، وجميع الأعمدة في منطق 0. لذلك قمنا بفحص جميع الصفوف بحثًا عن 0.
5. لذلك عندما نجد الصف عند المنطق 0 ، فهذا يعني أن هذا هو صف الزر المضغوط. حتى الآن لدينا العمود رقم (دخل في الخطوة 2) والصف لا. ، ويمكننا طباعة لا. من هذا الزر باستخدام وظيفة lcd_data.
يتبع نفس الإجراء لكل ضغطة زر ، ونحن نستخدم while (1) للتحقق باستمرار ، سواء كان الزر مضغوطًا أم لا.