- تعمل شاشة ال سي دي 16x2
- مخطط الدائرة لواجهة شاشة LCD مع متحكم STM8
- مكتبة STM8 LCD - ملف رأس لـ STM8S103F3P6
- برنامج LCD لوحدة التحكم الدقيقة STM8S
- STM8 مع LCD - العمل
تعد شاشة LCD الأبجدية الرقمية مقاس 16 × 2 هي الشاشة الأكثر استخدامًا بين الهواة والمتحمسين. تعتبر الشاشة مفيدة للغاية عندما تريد عرض المعلومات الأساسية للمستخدم ويمكنها أيضًا المساعدة في اختبار أو تصحيح الكود الخاص بنا. تتوفر وحدة LCD مقاس 16 × 2 الخاصة هذه بسهولة وقد اشتهرت لفترة طويلة. يمكنك معرفة المزيد حول أساسيات وحدة 16x2 LCD في المقالة المرتبطة.
لمتابعة سلسلتنا التعليمية لـ STM8 Microcontroller ، في هذا البرنامج التعليمي ، سوف نتعلم كيفية توصيل شاشة LCD بوحدة التحكم الدقيقة STM8. لقد قمنا سابقًا بتوصيل شاشة LCD مقاس 16 × 2 مع العديد من وحدات التحكم الدقيقة الأخرى أيضًا ، وتم سرد البرامج التعليمية أدناه ويمكنك التحقق منها إذا كنت مهتمًا.
إذا كنت جديدًا على STM8 ، فراجع مقالة البدء باستخدام STM8 Microcontroller لفهم أساسيات لوحة التحكم وبيئة البرمجة. لن نغطي الأساسيات في هذا البرنامج التعليمي.
تعمل شاشة ال سي دي 16x2
كما يوحي الاسم ، ستحتوي شاشة LCD مقاس 16 × 2 على 16 عمودًا وصفين. في المجموع ، سنكون قادرين على عرض 32 حرفًا على هذه الشاشة ويمكن أن تكون هذه الأحرف أبجدية أو أرقامًا أو حتى رموزًا. يتم عرض pinout 16x2 LCD البسيط الذي نستخدمه في هذا البرنامج التعليمي أدناه-
كما ترى ، تحتوي الشاشة على 16 دبوسًا ويمكننا تقسيمها إلى خمس فئات ، ودبابيس الطاقة ، ودبوس التباين ، ودبابيس التحكم ، ودبابيس البيانات ، ودبابيس الإضاءة الخلفية كما هو موضح في الجدول أدناه. سوف ندخل في تفاصيل كل دبوس عندما نناقش مخطط الدائرة لهذا البرنامج التعليمي.
الفئة | رقم الدبوس | اسم الدبوس | وظيفة |
دبابيس الطاقة | 1 | VSS | الدبوس الأرضي ، متصل بالأرض |
2 | VDD أو Vcc | الجهد دبوس + 5V | |
دبوس التباين | 3 | V0 أو VEE | إعداد التباين ، متصل بـ Vcc من خلال المقاوم المتغير. |
دبابيس التحكم | 4 | RS | تسجيل حدد دبوس ، RS = 0 وضع الأمر ، RS = 1 وضع البيانات |
5 | RW | قراءة / كتابة دبوس ، RW = 0 وضع الكتابة ، RW = 1 وضع القراءة | |
6 | ه | تمكين ، تحتاج نبضة عالية إلى منخفضة لتمكين شاشة LCD | |
دبابيس البيانات | 7-14 | D0-D7 | دبابيس البيانات ، تخزن البيانات المراد عرضها على شاشة LCD أو تعليمات الأوامر |
دبابيس الإضاءة الخلفية | 15 | LED + أو A. | لتشغيل الإضاءة الخلفية + 5 فولت |
16 | LED- أو K. | الخلفية الأرضية |
على الجانب الخلفي من شاشة LCD ، كما هو موضح في الصورة أدناه ، ستجد نقطتين سوداوين ، يوجد بداخلهما محرك HD44780 LCD IC (محاط بدائرة باللون الأحمر). يجب أن يتصل متحكمنا الدقيق بهذا IC والذي بدوره سيتحكم في ما يتم عرضه على شاشة LCD. إذا كنت مهتمًا بمعرفة كيفية عمل كل هذا بالضبط ، فيجب عليك التحقق من عمل شاشة LCD مقاس 16 × 2 حيث ناقشنا بالفعل كيفية عمل شاشة LCD بالتفصيل.
في هذا البرنامج التعليمي ، سنناقش مخطط الدائرة ورمزها لعرض الأحرف الأبجدية (الأبجدية والأرقام) على شاشة LCD مقاس 16 × 2 باستخدام أوامر LCD_print _char و LCD_print_string البسيطة . يمكن استخدام هذه الأوامر مباشرة في البرنامج بعد تضمين ملف الرأس الخاص بنا. يتعامل ملف الرأس مع معظم الأشياء من أجلك ، لذا فليس من الضروري معرفة كيفية عمل الشاشة أو برنامج تشغيل IC HD44780.
مخطط الدائرة لواجهة شاشة LCD مع متحكم STM8
يمكن العثور على دائرة STM8 LCD الكاملة في الصورة أدناه. كما ترى ، فإن اتصال وحدة التحكم STM8S103F3P6 مع شاشة LCD بسيط للغاية ، فلدينا شاشة LCD متصلة مباشرة بلوحنا كما أن وصلة STM8S103F3P6 متصلة ببرمجة اللوحة.
يتم توصيل دبابيس الطاقة Vss و Vcc بالدبوس 5 فولت على لوحة STM8S ، لاحظ أن جهد التشغيل لشاشة LCD هو 5 فولت ومتصل للعمل على 3.3 فولت. لذلك على الرغم من أن وحدة التحكم الدقيقة STM8S103F3P6 تعمل على 3.3 فولت إلزامي للحصول على مصدر 5 فولت لشاشة LCD ، يمكنك تجنب ذلك باستخدام وحدة تحكم الشحن IC لكننا لن نناقش ذلك في هذا البرنامج التعليمي.
بعد ذلك ، لدينا دبوس التباين المستخدم لضبط تباين شاشة LCD ، وقمنا بتوصيله بمقياس الجهد حتى نتمكن من التحكم في التباين. لقد استخدمنا قدر 10 كيلو ، ولكن يمكنك أيضًا استخدام قيم أخرى قريبة ، يعمل الوعاء كمقسم محتمل لتوفير 0-5 فولت لدبوس التباين ، وعادة ما يمكنك أيضًا استخدام المقاوم مباشرةً لتوفير حوالي 2.2 فولت للحصول على تباين معقول القيمة. ثم لدينا إعادة تعيين (RS) ، قراءة / كتابة (RW) ، وتمكين (E) دبابيس. تم تأريض دبوس القراءة والكتابة لأننا لن نقرأ أي شيء من شاشة LCD ، وسنقوم فقط بعمليات الكتابة. يتم توصيل دبابيس التحكم الأخرى Rs و E بدبابيس PA1 و PA2 على التوالي.
ثم لدينا دبابيس البيانات DB0 إلى DB7. يمكن أن تعمل شاشة LCD مقاس 16 × 2 في وضعين ، أحدهما عبارة عن وضع تشغيل 8 بت حيث يتعين علينا استخدام جميع دبابيس البيانات الثمانية (DB0-DB7) على شاشة LCD والآخر هو وضع التشغيل 4 بت حيث نحتاج فقط إلى 4 دبابيس البيانات (DB4-DB7). يتم استخدام الوضع 4 بت بشكل شائع لأنه يتطلب عددًا أقل من دبابيس GPIO من وحدة التحكم ، لذلك استخدمنا أيضًا وضع 4 بت في هذا البرنامج التعليمي وقمنا بتوصيل الدبابيس DB4 و DB5 و DB6 و DB7 فقط بالدبابيس PD1 و PD2 و PD3 و PD4 على التوالي.
يتم استخدام آخر دبابيس BLA و BLK لتشغيل مصباح الإضاءة الخلفية الداخلية ، وقد استخدمنا المقاوم 560 أوم كمقاوم مقيد للتيار. يتم توصيل مبرمج ST-Link كما هو الحال دائمًا كما هو الحال دائمًا في برنامجنا التعليمي السابق. لقد أجريت الاتصال الكامل على اللوح ويبدو إعدادي كما هو موضح في الصورة أدناه.
مكتبة STM8 LCD - ملف رأس لـ STM8S103F3P6
قبل المتابعة في الرسم التخطيطي للدائرة ، دعنا نحصل على ملف رأس STM8 LCD من GitHub باستخدام الرابط التالي-
ملف رأسي STM8S 16x2 LCD
يمكنك إما تنزيل الريبو الكامل والحصول على ملف stm8s103_LCD_16x2.h أو ببساطة الكود من الرابط أعلاه. أثناء إعداد المشروع ، تأكد من تضمين جميع ملفات الرأس المطلوبة في الدليل inc مع ملف الرأس هذا.
إذا لم تكن متأكدًا من كيفية إضافة ملفات الرأس وتجميع البرنامج ، فاتبع الفيديو الموجود أسفل هذه الصفحة. وإذا كنت مهتمًا بكيفية عمل الكود الموجود داخل ملف الرأس ، فيمكنك التحقق من PIC باستخدام برنامج تعليمي LCD. ملف الرأس المستخدم في هذا المشروع مشابه جدًا للملف الموضح هناك ، لذلك لن ندخل في تفاصيل ذلك.
برنامج LCD لوحدة التحكم الدقيقة STM8S
من أجل العرض التوضيحي ، سنبرمج وحدة التحكم STM8S الخاصة بنا لعرض سلسلة بسيطة مثل "Circuit Digest" وبعد ذلك سنزيد قيمة "Test" لكل ثانية واحدة في السطر الثاني. يمكن العثور على البرنامج الكامل في أسفل هذه الصفحة. وتفسير ذلك على النحو التالي.
نبدأ برنامجنا من خلال تحديد المسامير وإضافة ملفات الرأس المطلوبة كما هو الحال دائمًا. في مخطط الدائرة الذي تمت مناقشته أعلاه ، قمنا بتوصيل LCD_RS بـ PA1 لذلك قمنا بتعريفه على أنه LCD_RS GPIOA ، GPIO_PIN_1. وبالمثل ، فعلنا نفس الشيء مع دبابيس أخرى أيضًا. إذا كانوا يتبعون دائرة مختلفة ، فتأكد من تغيير هذه القيم وفقًا لذلك.
#define LCD_RS GPIOA ، GPIO_PIN_1 #define LCD_EN GPIOA ، GPIO_PIN_2 #define LCD_DB4 GPIOD ، GPIO_PIN_1 #define LCD_DB5 GPIOD ، GPIO_PIN_2 #define LCD_DB6 GPIOD ، GPIO_PIN_3 #Blude8 "
بعد ذلك داخل برنامجنا الرئيسي ، أعلنا عن المتغيرات المطلوبة لعينة التعليمات البرمجية هذه. لدينا متغير اختبار يسمى test_var والذي تمت تهيئته إلى الصفر ، وسوف نزيد المتغير ونعرضه على شاشة LCD. تمثل الأحرف d1 إلى d4 الأرقام الأربعة لمتغير الاختبار لأن شاشة LCD الخاصة بنا لا يمكنها عرض قيمة int مباشرة ، وعلينا تحويلها إلى أحرف.
// الإعلانات المتغيرة int test_var = 0 ؛ شار d4، d3، d2، d1 ؛
تُستخدم الوظيفة LCD_Begin () لتهيئة شاشة LCD. ستعمل هذه الوظيفة على تهيئة جميع دبابيس GPIO المطلوبة وكذلك ضبط شاشة LCD في وضع 16x2 LCD ثم لدينا وظيفة LCD_Clear () التي تُستخدم لمسح جميع القيم الموجودة على شاشة LCD ، وهذا سيؤدي إلى محو كل شيء على شاشة LCD بحيث تكون كتابة قيم جديدة نظيفة. ثم لدينا وظيفة LCD_Set_Cursor (x ، y) حيث x و y هما الموضعان اللذان نحتاج فيهما إلى كتابة حرفنا الجديد. على سبيل المثال ، (1،1) تعني الصف الأول والأول عمود ، وبالمثل (2،12) تعني الصف الثاني 12 عمودًا ، بالمثل. لاحظ أن لدينا صفين و 16 عمودًا هنا كما ناقشنا سابقًا.
Lcd_Begin () ، Lcd_Clear () ، Lcd_Set_Cursor (1،1) ،
الآن ، تم ضبط شاشة LCD ومسحها وأصبح المؤشر في المكان. الشيء التالي هو طباعة شيء ما على الشاشة. يمكننا استخدام LCD_Print_String ("نموذج السلسلة") لطباعة سلسلة على LCD و LCD_Print_Char (a) لطباعة قيمة حرف على شاشة LCD. في برنامجنا هنا ، قمنا بطباعة "STM8S103F3P3 LCD" وقمنا بإنشاء تأخير لمدة 5 ثوانٍ باستخدام الكود أدناه.
Lcd_Print_String ("STM8S103F3P3 LCD") ؛ delay_ms (5000) ؛
بعد التأخير لمدة 5 ثوان ، نقوم بمسح شاشة LCD مرة أخرى وعرض "ملخص الدائرة" في الصف الأول و "اختبار:" في الصف الثاني.
Lcd_Clear () ، Lcd_Set_Cursor (1،1) ، Lcd_Print_String ("ملخص الدائرة") ؛ Lcd_Set_Cursor (2،1) ، Lcd_Print_String ("اختبار:") ؛
داخل حلقة while ، سنقسم القيمة على متغير صحيح test_var إلى أحرف فردية بحيث يمكن عرضها على شاشة LCD باستخدام عوامل تقسيم ومعامل بسيطة. أضفنا أيضًا "0" لتحويل قيمة ASCII إلى الحرف.
d4 = test_var٪ 10 + '0' ؛ d3 = (test_var / 10)٪ 10 + '0' ؛ d2 = (test_var / 100)٪ 10 + '0' ؛ d1 = (test_var / 1000) + '0' ؛
ثم قمنا بتعيين المؤشر على (2،6) لأننا كتبنا بالفعل "Test:" في الصف الثاني وهو 6 أحرف. إذا قمنا بالكتابة فوق ، فسيتم استبدال الحرف الموجود بحرف جديد على شاشة LCD. أضفنا أيضًا تأخيرًا بمقدار ثانية واحدة وزادنا المتغير.
Lcd_Set_Cursor (2،6) ، Lcd_Print_Char (d1) ؛ Lcd_Print_Char (d2) ؛ Lcd_Print_Char (d3) ؛ Lcd_Print_Char (d4) ؛ delay_ms (1000) ؛ test_var ++ ؛
STM8 مع LCD - العمل
لاختبار برنامجنا ، ما عليك سوى تحميل الكود إلى وحدة التحكم الخاصة بنا وتشغيله باستخدام منفذ micro-USB. لاحظ أن شاشة LCD تتطلب 5 فولت للعمل ، لذا فمن الضروري تشغيل اللوحة من منفذ USB. لقد قمنا سابقًا بتشغيله مباشرة من ST-link لأننا لم نكن بحاجة إلى مصدر 5V.
كما ترى ، تعمل شاشة LCD كما هو متوقع مع زيادة قيمة متغير الاختبار لكل ثانية تقريبًا. لاحظ أيضًا أننا لم نستخدم أجهزة ضبط الوقت ولم نستخدم سوى وظيفة التأخير لإنشاء هذا التأخير ، لذلك لا تتوقع أن تكون مدة التأخير دقيقة ، وسوف نستخدم أجهزة ضبط الوقت لاحقًا في برنامج تعليمي آخر لهذا الغرض.
يمكن العثور على العمل الكامل للمشروع في الفيديو المرتبط أدناه. آمل أن تكون قد استمتعت بالبرنامج التعليمي وتعلمت شيئًا مفيدًا. إذا كانت لديك أي أسئلة ، فاتركها في قسم التعليقات أو استخدم منتدياتنا للاستفسارات الفنية الأخرى.