العرض هو الجزء الضروري من الجهاز سواء كان أي جهاز منزلي أو آلات صناعية. لا تعرض الشاشة خيارات التحكم لتشغيل الجهاز فحسب ، بل تعرض أيضًا حالة وإخراج المهمة التي يقوم بها هذا الجهاز. هناك العديد من أنواع الشاشات المستخدمة في الإلكترونيات مثل شاشة العرض المكونة من 7 أجزاء ، وشاشة LCD ، وشاشة TFT التي تعمل باللمس ، وشاشة LED ، وما إلى ذلك ، تعد شاشة العرض LCD مقاس 16 × 2 هي الأكثر أساسية وتستخدم أيضًا في بعض المعدات الإلكترونية الصغيرة ، وقد قمنا بالكثير المشاريع التي تستخدم شاشة LCD مقاس 16 × 2 بما في ذلك الواجهة الأساسية مع وحدات التحكم الدقيقة الأخرى:
- واجهة LCD مع متحكم 8051
- واجهة LCD مع متحكم ATmega32
- واجهة LCD مع متحكم PIC
- واجهات 16x2 LCD مع Arduino
- شاشة LCD مقاس 16 × 2 مع Raspberry Pi باستخدام Python
في هذا البرنامج التعليمي ، سنرى كيفية توصيل شاشة LCD مقاس 16 × 2 بوحدة تحكم دقيقة ARM7-LPC2148 وعرض رسالة ترحيب بسيطة. إذا كنت جديدًا مع ARM7 ، فابدأ بأساسيات ARM7 LPC2148 وتعلم كيف يمكن برمجتها باستخدام Keil uVision
المواد المطلوبة
المعدات
- لوحة متحكم ARM7-LPC2148
- LCD (16 × 2)
- مقياس فرق الجهد
- 5V منظم الجهد IC
- اللوح
- توصيل الأسلاك
- بطارية 9 فولت
- كابل Micro USB
البرمجيات
- Keil uVision 5
- أداة ماجيك فلاش
قبل الدخول في المشروع ، يجب أن نعرف بعض الأشياء حول أوضاع تشغيل شاشة LCD وعن رموز LCD Hex.
وحدة عرض LCD مقاس 16 × 2
تشير شاشة LCD مقاس 16 × 2 إلى أنها تحتوي على 16 عمودًا وصفين. تحتوي شاشة LCD هذه على 16 دبوسًا. يظهر الجدول والصورة أدناه أسماء أطراف شاشة LCD ووظائفها.
اسم |
وظيفة |
VSS |
دبوس الأرض |
VDD |
+ 5V إدخال دبوس |
VEE |
التباين ضبط دبوس |
RS |
تسجيل حدد |
ص / دبليو |
قراءة / كتابة دبوس |
ه |
تمكين دبوس |
D0-D7 |
دبابيس البيانات (8 دبابيس) |
الصمام أ |
دبوس الأنود (+ 5 فولت) |
LED ك |
دبوس الكاثود (GND) |
يمكن أن تعمل شاشة LCD في وضعين مختلفين ، وهما وضع 4 بت ووضع 8 بت. في وضع 4 بت ، نرسل nibble للبيانات عن طريق nibble ، ثم nibble العلوي ثم السفلي nibble. بالنسبة لأولئك منكم الذين لا يعرفون ما هو nibble: nibble عبارة عن مجموعة من أربع بتات ، لذا فإن البتات الأربع السفلية (D0-D3) للبايت تشكل الحلمة السفلية بينما البتات الأربعة العلوية (D4-D7) للبايت من العضم الأعلى. هذا يمكننا من إرسال بيانات 8 بت.
بينما في وضع 8 بت ، يمكننا إرسال بيانات 8 بت مباشرة بضربة واحدة نظرًا لأننا نستخدم جميع خطوط البيانات الثمانية.
هنا في هذا المشروع سوف نستخدم الوضع الأكثر استخدامًا وهو وضع 4 بت. في وضع أربع بتات ، يمكننا حفظ 4 دبابيس من متحكم دقيق وتقليل الحمل الكهربائي للأسلاك.
يستخدم 16x2 أيضًا رمز HEX لأخذ أي أمر ، وهناك العديد من الأوامر السداسية لشاشات الكريستال السائل مثل تحريك المؤشر ، وتحديد الوضع ، وتحويل عنصر التحكم إلى السطر الثاني وما إلى ذلك. لمعرفة المزيد عن وحدة العرض 16X2 LCD والأوامر السداسية ، اتبع الرابط.
مخطط الدائرة والتوصيلات
يوضح الجدول أدناه توصيلات الدائرة بين LCD و ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16 × 2) |
ص 0.4 |
RS (اختيار التسجيل) |
P0.6 |
E (تمكين) |
ص 0.12 |
D4 (دبوس البيانات 4) |
ص 0.13 |
D5 (دبوس البيانات 5) |
ص 0.14 |
D6 (دبوس البيانات 6) |
ص 0.15 |
D7 (دبوس البيانات 7) |
توصيلات منظم الجهد مع LCD و ARM7 Stick
يوضح الجدول أدناه التوصيلات بين ARM7 و LCD مع منظم الجهد.
منظم الجهد IC |
وظيفة الدبوس |
LCD و ARM-7 LPC2148 |
1. اليسار دبوس |
+ Ve من مدخلات البطارية 9 فولت |
NC |
2-مركز الدبوس |
- Ve من البطارية |
VSS ، R / W ، K لشاشات الكريستال السائل GND من ARM7 |
3. الدبوس الأيمن |
منظم + خرج 5 فولت |
VDD ، A من شاشات الكريستال السائل + 5V من ARM7 |
الجهد مع LCD
يستخدم مقياس الجهد لتغيير تباين شاشة LCD. وعاء به ثلاثة دبابيس ، الدبوس الأيسر (1) متصل بـ + 5 فولت والمركز (2) إلى VEE أو V0 من وحدة LCD والدبوس الأيمن (3) متصل بـ GND. يمكننا ضبط التباين عن طريق تدوير المقبض.
إعدادات الطائر
يوجد دبوس وصلة في ARM7-Stick حتى نتمكن من تشغيل الكود وتحميله باستخدام USB أو باستخدام إدخال 5V DC للطاقة فقط. تستطيع أن ترى الصور أدناه.
توضح الصورة أدناه أن العبور في وضع التيار المستمر. هذا يعني أنه يجب علينا تشغيل اللوحة من مصدر خارجي 5 فولت.
وتظهر هذه الصورة أن العبور متصل في وضع USB. هنا يتم توفير الطاقة والكود عبر منفذ USB الصغير.
ملاحظة: هنا في هذا البرنامج التعليمي ، قمنا بتحميل الكود باستخدام USB عن طريق ضبط وصلة المرور على USB ثم غيرنا العبور إلى وضع DC لتشغيل LPC2148 من إدخال 5 فولت للمنظم. يمكنك التحقق من ذلك في الفيديو المقدم في النهاية.
ستبدو الدائرة النهائية لواجهة شاشة LCD مقاس 16 × 2 مع متحكم ARM7 كما يلي:
برمجة ARM7-LPC2148
لبرمجة ARM7-LPC2148 نحتاج إلى أداة keil uVision & Flash Magic. نحن نستخدم كابل USB لبرمجة ARM7 Stick عبر منفذ micro USB. نكتب رمزًا باستخدام Keil وننشئ ملفًا سداسيًا ثم يتم وميض ملف HEX إلى ARM7 باستخدام Flash Magic. لمعرفة المزيد حول تثبيت keil uVision و Flash Magic وكيفية استخدامهما ، اتبع الرابط Getting Started with ARM7 LPC2148 Microcontroller وبرمجته باستخدام Keil uVision.
يتم تقديم الكود الكامل لربط LCD بـ ARM 7 في نهاية هذا البرنامج التعليمي ، ونوضح هنا أجزاء قليلة منه.
بادئ ذي بدء ، نحتاج إلى تضمين ملفات الرأس المطلوبة
#تضمن
تعد تهيئة وحدة LCD خطوة مهمة للغاية. هنا نستخدم رموز HEX معينة ، وهي أوامر في الواقع ، لإخبار شاشة LCD عن وضع التشغيل (4 بت) ، ونوع شاشة LCD (16 × 2) ، وخط البداية ، إلخ.
LCD_INITILIZE باطل (باطل) // وظيفة لتجهيز شاشة LCD { IO0DIR = 0x0000FFF0 ؛ // مجموعات دبوس P0.4 ، P0.6 ، P0.12 ، P0.13 ، P0.14 ، P0.15 as OUTPUT delay_ms (20) ؛ LCD_SEND (0x02) ، // تهيئة شاشة LCD في وضع التشغيل ذي 4 بتات LCD_SEND (0x28) ؛ // 2 خطوط (16X2) LCD_SEND (0x0C) ؛ // العرض على المؤشر خارج LCD_SEND (0x06) ؛ // مؤشر الزيادة التلقائية LCD_SEND (0x01) ؛ // عرض واضح LCD_SEND (0x80) ؛ // الموضع الأول في السطر الأول }
بالنسبة لوضع 4 بت ، لدينا نوع مختلف من وظائف الكتابة للدبابيس ، أي باستخدام عاب علوي وسفلي. دعونا نرى كيف يتم ذلك
LCD_SEND باطل (أمر char) // وظيفة لإرسال أوامر سداسية عشبية nibble بواسطة nibble { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((الأمر & 0xF0) << 8)) ؛ // أرسل nibble العلوي للأمر IO0SET = 0x00000040 ؛ // جعل تمكين HIGH IO0CLR = 0x00000030 ؛ // جعل RS & RW LOW delay_ms (5) ؛ IO0CLR = 0x00000040 ؛ // جعل تمكين LOW delay_ms (5) ؛ IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((الأمر & 0x0F) << 12)) ؛ // Send nibble السفلي للأمر IO0SET = 0x00000040 ؛ // ENABLE HIGH IO0CLR = 0x00000030 ؛ // RS & RW LOW delay_ms (5) ؛ IO0CLR = 0x00000040 ؛ // تمكين LOW delay_ms (5) ؛ }
Nibble إرسال منطق
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((الأمر & 0x0F) << 12)) ؛ // إرسال nibble السفلي للأمر IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((الأمر & 0xF0) << 8)) ؛ // أرسل عاب أعلى للقيادة
العبارتين أعلاه تلعب دورًا مهمًا في هذا البرنامج. يقوم الأمر الأول بإرسال nibble السفلي والثاني يرسل nibble العلوي. هذا دون التأثير على الدبابيس الأخرى التي نقوم بها. دعونا نرى كيف يحدث ذلك قبل أن نتعرف على هذا المنطق أولاً
ORing- (A-0 = A) ، (A-1 = 1) ANDing- (A & 0 = 0) ، (A & 1 = A)
لذلك نستخدم مفهوم التقنيع وعملية النقل المنطقية دون التأثير على المسامير الأخرى. يعني أنه يتم استخدام المسامير فقط (P0.12-P0.15) ولا تتأثر أي دبابيس أخرى مثل P0.4 و P0.6. سيتم القيام بذلك عن طريق تحويل البيانات في أربع بتات وجعل الحلمة العلوية في مكان الحلمة السفلية وإخفاء الحلمة العلوية. ثم نجعل البتات السفلية صفرًا (0XF0) و ORed مع بيانات nibble للحصول على بيانات nibble العليا عند الإخراج.
يتم استخدام عملية مماثلة لبيانات nibble أقل ولكن هنا لا نحتاج إلى تحويل البيانات.
أثناء كتابة البيانات للإخراج ، أي في وضع الأمر ، يجب أن يكون RS منخفضًا ويجب أن يكون تنفيذ التمكين عاليًا ، وفي وضع البيانات يجب أن يكون RS مرتفعًا ويجب أن يكون التنفيذ مرتفعًا.
الآن لإرسال بيانات السلسلة التي سيتم طباعتها عند الإخراج ، يتم استخدام نفس المبدأ nibble بواسطة nibble. خطوة مهمة هنا هي أن REGISTER SELECT (RS) يجب أن يكون مرتفعًا لوضع البيانات.
LCD_DISPLAY (char * msg) باطل // وظيفة لطباعة الأحرف المرسلة واحدة تلو الأخرى { uint8_t i = 0 ؛ while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)) ؛ // يرسل IO0SET العلوي nibble = 0x00000050 ؛ // RS HIGH & ENABLE HIGH لطباعة البيانات IO0CLR = 0x00000020 ؛ // RW LOW الكتابة تأخير وضع مللي (2) ؛ IO0CLR = 0x00000040 ؛ // EN = 0 ، RS و RW دون تغيير (أي RS = 1 ، RW = 0) تأخير مللي ثانية (5) ؛ IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)) ؛ // يرسل IO0SET السفلي nibble = 0x00000050 ؛ // RS & EN HIGH IO0CLR = 0x00000020 ؛ تأخير مللي ثانية (2) ؛ IO0CLR = 0x00000040 ؛ تأخير مللي ثانية (5) ؛ أنا ++ ؛ }
ويرد أدناه فيديو شرح وترميز كامل.