مكتبة للعمل مع شاشات الكريستال السائل. استخدام المكتبة للعمل مع شاشة LCD HD44780. الطاقة وتعديل التباين والإضاءة الخلفية

الدرس 12

الجزء 5

مؤشر LCD 16×2

واليوم سنواصل الدراسة مؤشر حرف LCDوهو قادر على إخراج أحرف معينة في سطرين يتكون كل منهما من 16 حرفًا.

في الجزء الأخير انتهينا من كتابة الكود الخاص بوظيفة عرض أي حرف على شاشة العرض والتحقق من صحتها.

حان الوقت الآن لكتابة دالة لعرض سطر كامل على الشاشة، نظرًا لأن إخراجها حرفًا تلو الآخر ليس مناسبًا تمامًا؛ دعونا نضيف هذه الوظيفة مباشرة قبل الوظيفة main() وسنمرر إليها مجموعة من الأحرف ذات حجم غير محدد

//—————————————-

فارغstr_lcd( شارstr1)

{

}

//—————————————-

لنستدعي هذه الوظيفة في main()، بعد أن قمنا أولاً بإزالة كافة رموز العرض لكل حرف على حدة

LCD_ini(); // تهيئة العرض

setpos(0,0);

str_lcd( "مرحبا بالعالم!");

بعد ذلك، لنبدأ في كتابة نص دالة إخراج السلسلة. لنعلن عن متغير للرمز الموجود في نص الدالة. سيكون المتغير الخاص بنا من نوع مختلف قليلًا. كقاعدة عامة، يتم التعرف على رموز الأحرف بشكل أفضل مع هذا النوع. يمكنك بالطبع تجربة أنواع أخرى

فارغstr_lcd( شارstr1)

wchar_tن;

بعد ذلك، سنقوم وفقًا لذلك بتنظيم حلقة وسنقوم بالتكرار بالتناوب عبر جميع الأحرف المرسلة في المصفوفة وعرضها على الشاشة. سوف نستخدم أيضًا خيار تمثيل الحرف الفارغ "ن"وحتى هذه اللحظة سنقوم بفرز الشخصيات

Wchar_tن;

ل( ن=0; str1[ ن]!=""; ن++)

com.sendchar( str1[ ن]);

دعونا نجمع الكود ونتحقق من تشغيل الكود في Proteus

يمكنك الآن محاولة عرض الخط في مكان آخر على الشاشة. لنكتب الكود في main()

str_lcd( "مرحبا بالعالم!");

setpos(2,1);

str_lcd( "السلسلة 2");

بينما(1)

دعونا نجمع الكود ونرى النتيجة

كل شيء يعمل! عظيم!

حسنًا، بالطبع، ما زلنا بحاجة إلى معرفة كيفية عمل الكود على شاشة حية باستخدام وحدة التحكم المباشرة. للقيام بذلك سوف نقوم وميض وحدة التحكم

نقوم بصياغة الوظائف في وحدة منفصلة

لقد وصلنا إلى مثل هذه الحالة مع الكود حيث أصبح ملفنا الرئيسي والوحيد الذي يحتوي على الكود ممتلئًا جدًا بحيث أصبح من الصعب الآن العثور على أي شيء فيه على الإطلاق. كيف يمكننا محاربة هذا؟ سنقوم بمكافحة هذا من خلال تنسيق رمز الوظيفة لجهاز واحد أو ناقل واحد أو بعض التقنيات في وحدة منفصلة. تتكون الوحدة المختصة عادةً من ملف رأس وملف تنفيذ الوظيفة. لذلك دعونا نفعل ذلك لشاشة LCD الخاصة بنا. كما أن هذا الأمر برمته ضروري حتى إذا كتبنا مشروعًا جديدًا، فسنقوم ببساطة بتوصيل هذه الملفات به إذا كنا بحاجة إلى استخدام شاشة LCD. ستكون هذه ما يسمى بمكتبة العرض. بالطبع، تتم كتابة المكتبات عادةً وتجميعها في ملف lib منفصل، ولكن في هذه الحالة لا يوجد عادةً كود مصدر ولا يمكن تعديل بيانات المكتبة. وستكون مكتبتنا قابلة للإصلاح تمامًا وستكون مفيدة جدًا لنا في المستقبل.

لكن قبل إنشاء هذه المكتبة، سنقوم بإنشاء ملف رأس رئيسي ونطلق عليه اسم main.h لكي نضع جميع المكتبات المضمنة والمتغيرات العامة المتنوعة وبدائل الماكرو في هذا الملف

للقيام بذلك، انقر بزر الماوس الأيمن على مشروعنا في شجرة المشروع اختبار09وحدد القائمة الفرعية في قائمة السياق يضيفوفيه نختار العنصر بالفعل عنصر جديد

وفي مربع الحوار الذي سيفتح، حدد نوع الملف الذي سنقوم بإنشائه، " تضمين الملف"وفي الجزء السفلي من اسم الملف نقوم بتغيير IncFile1 إلى رئيسي، ثم اضغط على الزر يضيف.

وبناء على ذلك، سوف نقوم بإنشاء ملف main.c بالمحتوى التالي

#ifndefMAIN_H_

#يُعرِّفMAIN_H_

#إنهاء إذا/* MAIN_H_ */

هذا جيد جدا. على سبيل المثال. في Keil، عندما نقوم ببرمجة وحدات التحكم STM، يتعين علينا كتابتها جميعًا يدويًا. هنا ينص هذا التوجيه على أنه إذا تم بالفعل تضمين الملف في التعليمات البرمجية القابلة للتنفيذ، فلا يقوم المعالج المسبق بتضمينه مرة أخرى.

في هذا الملف سوف نقوم بوضع اتصالات كافة ملفات رأس المكتبة وجميع بدائل الماكرو، وفي ملف Test09.c بالطبع سوف نقوم بحذف كل هذا

#ifndefMAIN_H_

#يُعرِّفMAIN_H_

#يُعرِّفF_CPU8000000 أول

#يشمل

#يشمل

#يشمل

#يشمل

#يشمل

//—————————————-

#يُعرِّفe1بورتد|=0b00001000// اضبط السطر E على 1

#يُعرِّفe0بورتد&=0b11110111// اضبط السطر E على 0

#يُعرِّفrs1بورتد|=0b00000100// اضبط خط RS على 1 (البيانات)

#يُعرِّفrs0بورتد&=0b11111011// اضبط خط RS على 0 (أمر)

//—————————————-

#إنهاء إذا/* MAIN_H_ */

ولكن لا يكفي تضمين ملف الرأس هذا في Solution Explorer؛ بل يجب أيضًا تضمينه في الملف اختبار09.جتضمينها في البداية في الكود

#يشمل"الرئيسية.ح"

//—————————————-

لنقم بتجميع المشروع والتحقق من وظائفه مرة أخرى.

لنبدأ الآن في إنشاء مكتبة العرض الخاصة بنا.

للقيام بذلك، سنقوم بإنشاء ملف رأس بنفس طريقة إنشاء ملف main.h شاشات الكريستال السائل. ح

#يشمل

#يشمل"ال سي دي. ح"

والعكس بالعكس إلى الملف شاشات الكريستال السائل. حسوف نقوم بإدراج الملف main.h

#ifndefشاشات الكريستال السائل_H_

#يُعرِّفشاشات الكريستال السائل_H_

#يشمل"الرئيسية.ح"

ليست هناك حاجة للقلق بشأن احتمال حدوث نوع ما من التكرارات المتقاطعة - فالتوجيهات ستمنع حدوث ذلك.

سنقوم أيضًا بنقل جميع بدائل الماكرو من ملف main.h إلى ملف LCD وh وحذفها في main.h

#يشمل"الرئيسية.ح"

//—————————————-

فارغLCD_ini( فارغ);

فارغsetpos( غير موقعةشارس, غير موقعةذ);

فارغstr_lcd( شارstr1);

فارغcom.sendchar( غير موقعةشارج);

//—————————————-

ومن أجل الحصول على جميع وظائف العمل مع الشاشة من ملف Test09.c، سنقوم الآن بإنشاء ملف آخر - شاشات الكريستال السائل. ج. وسوف يحتوي على رمز لتنفيذ جميع الوظائف

يتم إنشاء الملف بنفس الطريقة تمامًا، فقط بدلاً من "تضمين ملف" نختار نوع الملف "ملف C".

تم إنشاء ملف LCD.c. لن يكون فيه أي توجيهات بعد الآن، الشيء الوحيد سيكون تعليق المؤلف، والذي سنحذفه حتى لا نتدخل.

في هذا الملف سوف نقوم أيضًا بتضمين ملف الرأس LCD.h

#يشمل"ال سي دي. ح"

//—————————————-

سنقوم الآن بنقل جميع الوظائف المخصصة للعمل مع الشاشة من ملف Test09.c إلى هذا الملف. لن يكون هناك سوى وظيفتين متبقيتين فيه - port_iniو رئيسي().

وبالتالي، فإننا سوف نقوم بتفريغ ملف التطبيق الرئيسي بجدية، مما يجعله أكثر قابلية للقراءة.

لكن هذا لا يكفي بالنسبة لنا. لن تكون أي وظيفة "مرئية" الآن في ملف Test09.c. لذلك، يجب علينا أن نعلن عن الوظائف التي سنستخدمها في ملفات أخرى، أو، كما يقول الناس، إنشاء نماذج أولية عليها. يتم ذلك عادة في ملف الرأس. ولذلك، سوف نقوم بإنشاء نماذج أولية في ملف الرأس LCD.h. النموذج الأولي سهل الصنع للغاية. يتم كتابة رأس الدالة مع كافة الوسائط (كل شيء باستثناء النص الأساسي) أو نسخه عادةً، ويتم وضع فاصلة منقوطة في النهاية. سنحتاج إلى وظائف لتهيئة الشاشة وتحديد موضعها وعرض خط على الشاشة. لن نقوم بإخراج الرموز بشكل منفصل في الوقت الحالي، لذلك لا نقوم بإنشاء نموذج أولي للوظيفة المقابلة. وهنا النماذج لدينا

#يشمل"الرئيسية.ح"

//—————————————-

فارغLCD_ini( فارغ);

فارغsetpos( غير موقعةشارس, غير موقعةذ);

فارغstr_lcd( شارstr1);

//—————————————-

#يُعرِّفe1بورتد|=0b00001000// اضبط السطر E على 1

لنقم الآن بجمع الملف وتشغيله في Proteus والتحقق من وظائفه. دعونا نتحقق من ذلك أيضًا عمليًا. إذا كان كل شيء يعمل، فقد فعلنا كل شيء بشكل صحيح. مشروع الدرس بأكمله مرفق أدناه وهو متاح عبر رابط "كود المصدر".

لذلك تعلمنا الكثير في درس اليوم. لقد تعلمنا كيفية العمل مع عرض الأحرف وتوصيله بوحدة تحكم AVR. أيضًا، كجزء من هذا الدرس، تعلمنا كيفية كتابة التعليمات البرمجية بشكل صحيح واستخدام البرمجة المعيارية.

مشاهدات المشاركة: 11,438

سأخبرك في هذه المقالة بكيفية استخدام مكتبة شائعة إلى حد ما للإدارة شاشات الكريستال السائلالعرض القائم على وحدة التحكم HD44780وعرض المعلومات عنها. تتكون المكتبة من ملفين LCD_lib.h وlcd_lib.c للاستخدام مع شاشة متصلة عبر ناقل بيانات رباعي البتات. يحتوي ملف الرأس على إعدادات توصيل الشاشة بوحدة التحكم، والتي يمكن تغييرها حسب تقديرك، بالإضافة إلى المتغيرات والوظائف.

فيما يلي الوظائف الأساسية للتحكم وعرض المعلومات على شاشة LCD.

lcd_com– إرسال أمر إلى شاشة LCD

مثال:
شاشات الكريستال السائل_كوم(0x01); // مسح العرض
شاشات الكريستال السائل_كوم(0x38); // واجهة 8 بت 2 سطر

شاشات الكريستال السائل_dat- إخراج حرف واحد إلى الموضع الحالي

مثال:
LCD_dat("U"); // إخراج الحرف "U"
LCD_dat(0xB0); // إخراج الرمز "U" (وفقًا لجدول رموز العرض)

lcd_init– تهيئة شاشات الكريستال السائل

فيما يلي مثال لتسلسل تهيئة شاشة LCD المستخدمة على نطاق واسع: 0x38، 0xOC، 0x06.
0x38 يضبط الوضع لعرض سطرين بمصفوفة 5 × 8 بكسل والعمل مع ناقل بيانات 8 بت؛
يتيح 0xOC عرض وحدة LCD على الشاشة، دون عرض المؤشرات؛
يضبط 0x06 الوضع لتحريك المؤشر تلقائيًا من اليسار إلى اليمين بعد عرض كل حرف.

lcd_clr– تنظيف شاشات الكريستال السائل

lcd_home- ينقل المؤشر إلى البداية

lcd_string– إخراج سلسلة من الطول المحدد إلى الموضع الحالي

مثال: LCD_string("TEST",4); // إخراج السلسلة TEST المكونة من 4 أحرف

lcd_gotoxy- تحريك المؤشر إلى الموضع المحدد

مثال: LCD_gotoxy(12, 1); // المؤشر في الموضع الثالث عشر من السطر الثاني

Copy_string_to_lcd– إخراج سلسلة من ذاكرة الفلاش إلى موضع العرض المحدد

مثال: Copy_string_to_lcd("TEST"،4,0); // قم بإخراج السلسلة TEST إلى الرقم الخامس من السطر الأول

lcd_definechar- يكتب صورة شخصية مخصصة على ذاكرة العرض

لعرض الرمز الخاص بك على شاشة العرض، تحتاج إلى معرفة رمز الرمز، وكتابة هذا الرمز في ذاكرة برنامج المتحكم الدقيق (PROGMEM)، ثم وضعه في خلية ذاكرة LCD مجانية (CGRAM) وعرضه على الشاشة باستخدام وظيفة شاشات الكريستال السائل_دات ().

تتوفر 8 أحرف مُعاد تعريفها للبرمجة في الوضع بمصفوفة 5x7 من النقاط و4 أحرف بمصفوفة 5x10 (في الوضع 5x10، تتم معالجة الأحرف المعاد تعريفها بواسطة رموز DDRRAM واحدًا تلو الآخر: 0x00، 0x02، 0x04، 0x06). لتشفير المصفوفة، يتم استخدام البايتات "المكدسة" أفقيًا، حيث تحمل البتات الخمس الأقل أهمية معلومات حول النمط (مع 1 (واحد) مما يعني أنه سيتم تشغيل المقطع)، والبت الرابع من كل 8 ( أو 11 في 5 × الوضع 10) تحدد بايتات المصفوفة العمود الأيسر للرمز، و0 - العمود الأيمن. لا يتم استخدام البتات الثلاثة الأكثر أهمية، ولا تشكل البايتات الخمس الأكثر أهمية منطقة مصفوفة الأحرف الكاملة (16 بايت) في وضع 5x10 (لاحظ أن مصفوفة الأحرف القابلة للبرمجة تسمح باستخدام ارتفاع الصف الكامل (8 أسطر لوضع 5x7 و11 سطرًا لوضع 5x10)، أي أنه يمكنك وضع نقاط في منطقة المؤشر الذي تحته خط).

يعد إنشاء رمز بتنسيق ثنائي أكثر ملاءمة، على سبيل المثال، لنقم بإنشاء رمز مستطيل، وسيكون الرمز كما يلي:

Const uint8_t pryamougolnik PROGMEM= ( 0b11111, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b11111, 0b0 );

lcd_shift_right- تحريك الصورة بالعدد المحدد من الأحرف إلى اليمين

LCD_shift_Left- تحريك الصورة بعدد محدد من الأحرف إلى اليسار

lc_cursor_on- تشغيل تسطير المؤشر

شاشة LCD_cursor_blink– تشغيل المؤشر الوامض

LCD_cursor_off- يطفئ المؤشر

شاشات الكريستال السائل_فارغة– يقوم بإيقاف تشغيل الصورة، ولكن لا يقوم بمسحها

شاشات الكريستال السائل_مرئية- يتضمن صورة

LCD_cursor_left- تحريك المؤشر بعدد الأحرف المحدد إلى اليسار

LCD_cursor_right– تحريك المؤشر بعدد محدد من الأحرف إلى اليمين

شاشات الكريستال السائل_التقدم_بار- يسمح لك بعرض مقياس ديناميكي، وسنتحدث عن هذه الوظيفة بمزيد من التفصيل باستخدام مثال عملي.

شاشات الكريستال السائل_num_to_str- يسمح لك بعرض متغير يصل إلى 4 أرقام

مثال: void lcd_num_to_str(ADC, 4); // إخراج متغير ADC 4 بت

لنقم بإنشاء مشروع "الفولتميتر التناظري" حيث سيتم عرض معلومات حول الجهد المقاس على الشاشة في شكل مقياس ديناميكي أفقي. يتم توفير الجهد المقاس إلى مدخل ADC0، بحد أقصى 5 فولت. دون استخدام المقسم. في هذا المشروع نستخدم وحدة التحكم الدقيقة atmega8، والتي يتم تسجيلها من مذبذب داخلي بتردد 8 ميجاهرتز. نقوم بتوصيل الشاشة عبر ناقل ذو أربعة بتات وفقًا للإعدادات من ملف LCD_lib.h. عند إنشاء مشروع في AVRSTUDIO، نقوم بنسخ ملفين من المكتبة إلى مجلد المشروع الخاص بنا، ونضيف هذه الملفات (lcd_lib.c وlcd_lib.h) إلى شجرة المشروع.

الوظيفة مسؤولة عن عرض المقياس الديناميكي LCD_progress_bar (تقدم uint8_t، uint8_t أقصى تقدم، طول uint8_t)اعتمادًا على حالة متغيرات هذه الوظيفة، يغير المقياس مستواه، مستوى التقدم من 0 إلى 255، الحد الأقصى للمستوى - يقتصر المستوى الأقصى على رقم من 0 إلى 255، الطول - طول المقياس من 0 إلى 16 خلية (حسب نوع العرض). نظرًا لأن قيمة ADC عند أقصى جهد دخل هي 1024، فإننا نقسم هذه القيمة على 4 ونخصصها للمتغير "u"، ونستخدم المتغير "u" في دالة إخراج المقياس الديناميكي تقدم().

أنشر النص الكامل للبرنامج أدناه:

//******استخدام المكتبات للعمل مع شاشة LCD HD44780***** #include #يشمل #يشمل #include "lcd_lib.h" const uint8_t simbol_1 PROGMEM= (
0b00000,0b10001,0b01010,0b00100,0b01010,0b10001,0b00000,0b00000
};
const uint8_t simbol_2 PROGMEM= (
0b00100,0b00100,0b00100,0b11111,0b00100,0b00100,0b00100,0b00000
); شار غير موقعة؛ //*************************************************** ******** تقدم باطل (باطل) // وظيفة إخراج المقياس (lcd_gotoxy(0, 0);lcd_string("0......05......1",16);lcd_gotoxy (0, 1); lcd_progress_bar(u, 255, 16) //*********************************); ************************* int main(void) ( /***إعداد ADC***/ ADCSRA |= (1<< ADEN) //Включение АЦП |(1 << ADPS1)|(1 << ADPS0); // предделитель преобразователя на 8 ADMUX |= (0 << REFS1)|(0 << REFS0) // внешний ИОН |(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); // вход PC0 _delay_ms(100); lcd_init();// инициализация LCD lcd_clr();// очистить LCD _delay_ms(10); lcd_definechar(simbol_1, 6); // определяем собств. символ 1 lcd_definechar(simbol_2, 7); // определяем собств. символ 2 for(char a=0; a<10; a++) // цикл приветствия { lcd_gotoxy(0, 0); lcd_dat(6); _delay_ms(100); lcd_gotoxy(0, 0); lcd_dat(7); _delay_ms(100); lcd_gotoxy(3, 0); lcd_string("AЅa»oґoіГ№",10); // Аналоговый lcd_gotoxy(3, 1); lcd_string("іo»Дїјeїp",9); // вольтметр } _delay_ms(1000); lcd_clr();// очистить LCD while(1) { progress(); ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования u = ADC/4; } }

دعونا نفكر في التفاعل بين المستخدم وجهاز يعتمد على وحدة التحكم الدقيقة. في كثير من الأحيان يحتاج المستخدم إلى إدخال المعلومات بطريقة ما وقراءتها من شيء ما. تعتبر لوحة المفاتيح والشاشة () مناسبة جدًا لهذه الأغراض، ضع في اعتبارك التفاعل بين المستخدم وجهاز يعتمد على وحدة التحكم الدقيقة. في كثير من الأحيان يحتاج المستخدم إلى إدخال المعلومات بطريقة ما وقراءتها من شيء ما. لوحة المفاتيح والشاشة () مناسبة جدًا لهذه الأغراض. في هذه المذكرة، سوف نلقي نظرة فاحصة على عرض المعلومات على رمز شاشات الكريستال السائلمع توليف الإشارة.

غالبا ما تستخدم هذه المؤشرات عند تصميم الأجهزة الرقمية، لذلك عليك أن تعرف كيفية التعامل معها.
دعونا نفكر في البنية الداخلية النموذجية لتوليف الإشارات شاشات الكريستال السائل:

الهيكل الداخلي لـ HD44780

تعتمد شاشة LCD على مصفوفة من البلورات السائلة، من خلال تطبيق الجهد الكهربي على العنصر الذي يمكننا "إضاءة" نقطة منه على الشاشة. في حالتنا، تتكون المصفوفة من مساحات مألوفة (غالبًا 8 × 5 بكسل)، مجمعة في عدة صفوف. تتم إدارة كل هذا من خلال المدمج في وحدة تحكم HD44780. تحتوي وحدة التحكم على خلايا ذاكرة أحادية البايت ( ذاكرة الوصول العشوائي DDR)، والتي يتم عرض محتوياتها فعليًا على الشاشة وفقًا للجدول المسجل فيه CGRAM. عادةً ما يكون عدد خلايا الذاكرة أكبر من عدد الخلايا المألوفة شاشات الكريستال السائل، لذلك عليك إلقاء نظرة على عناوين الأماكن المألوفة في ورقة البيانات. أي أننا نحتاج فقط إلى كتابة رمز الحرف المطلوب في الموضع المطلوب، وكل شيء آخر HD44780سوف يفعل ذلك بنفسه.

لتحديد موضع، يوجد مؤشر افتراضي (رقم خلية الذاكرة الحالية، AC)، والذي يمكن التحكم فيه باستخدام الأوامر؛ ويمكن جعل المؤشر مرئيًا. بشكل افتراضي، عند كتابة حرف في خلية، يتحرك المؤشر للأمام بمقدار موضع واحد. رموز الحروف ل شاشات الكريستال السائليمكن رؤية دعم الأبجدية السيريلية في الجدول:

ستكون الرباعية العالية للكود مساوية لصف الرمز المحدد، وستكون الرباعية المنخفضة مساوية للخط. يمكنك إنشاء جدول الرموز الخاص بك عن طريق كتابته CGRAM. يتطلب كل حرف 5 بايت، حيث تكون تلك الوحدات مسؤولة عن وحدات البكسل "المضاءة". على سبيل المثال، يتم ترميز الرقم "8" كـ 0x6c,0x92.0x92.0x92.0x6c.
وترد رموز الأوامر في الجدول.

جدول الأحرف HD44780


معاني العلم:


ويبقى السؤال مفتوحا: “كيف نكتب كود الرمز المطلوب في المكان المطلوب؟” للقيام بذلك، دعونا ننظر إلى ما هي الاستنتاجات المسؤولة عن. شاشات الكريستال السائل. الاستنتاجات DB0-DB7مسؤولون عن البيانات الواردة / الصادرة. يتيح المستوى العالي عند طرف RS للمؤشر معرفة أن الإشارة عند الأطراف DB0-DB7هي البيانات، والمنخفض هو الأمر. خاتمة ث/رمسؤول عن اتجاه البيانات سواء كانت البيانات مكتوبة على الذاكرة أو تقرأ منها (عادة القراءة من شاشات الكريستال السائللم يتم استخدامه، يمكننا تطبيق مستوى منخفض عليه بأمان). نبض الإخراج ه(بمدة لا تقل عن 500 نانوثانية) يتم استخدامها كإشارة لكتابة/قراءة البيانات من المسامير DB0-DB7, ر.س.و ث/ر.

خاتمة V0تستخدم لضبط تباين الصورة، الدبابيس A، K - لتشغيل الإضاءة الخلفية (إذا كان الطراز الخاص بك مزودًا بها شاشات الكريستال السائل). الدبوسان المتبقيان هما مصدر الطاقة الفعلي شاشات الكريستال السائل. وهذا هو، للسيطرة شاشات الكريستال السائلستكون هناك حاجة إلى 8+1+1=10 دبابيس. ولكن يمكنك العمل في وضع الواجهة 4 بت. في هذه الحالة، سيتم إرسال رباعي الأوامر/البيانات العليا على الأطراف DB4-DB7 أولاً، ثم الطرف المنخفض. الاستنتاجات DB0-DB3لا تستخدم. في المجموع، هناك حاجة إلى 6 دبابيس متحكم للتحكم.
الآن دعونا نلقي نظرة على مثال حي. دعونا نكتب برنامجا لإخراج النص "موقع إلكتروني"إلى ما لدي في المخزون WH1602A(سطرين من 16 حرفًا).

بالنسبة لشاشات LCD الأخرى، يجب عليك التحقق من تطابق الخلايا ذاكرة الوصول العشوائي DDRالمعارف. مخطط الاتصال شاشات الكريستال السائلإلى وحدة التحكم يبدو مثل هذا.

مخطط اتصال لمتحكم AVR


المقاوم ر3- 17 أوم يحد من التيار من خلال الإضاءة الخلفية، والتيار المتردد VR1يضبط التباين (إذا كان كل شيء متصلاً ومبرمجًا بشكل صحيح، ولكن المؤشر صامت، قم بتشغيل VR1 حتى تصبح الصورة مرئية). أيضًا، لا ينبغي بأي حال من الأحوال الخلط بين القطبية. شاشات الكريستال السائل، قم بتشغيله فوق 5.5 فولت، من تجربتي أستطيع أن أقول إنهم يحترقون على الفور. الغرض من جميع الأجزاء الأخرى هو نفسه كما في
الآن دعنا ننتقل إلى كتابة البرنامج. للتحكم في المؤشر، سنكتب برنامجًا به العديد من الوظائف الرئيسية للعمل معه شاشات الكريستال السائل: LCD_dat(unsigned char x) - لكتابة البيانات x،lcd_com(unsigned char x) - لكتابة الأمر x،lcd_init(void) - للتهيئة الأولية للمؤشر:

    #يشمل //مكتبة الإدخال/الإخراج

  1. #define RS 2 //RS=PD2 - إشارة تحكم LCD

    #define E 3 //E=PD3 - إشارة تحكم LCD

  2. #define TIME 10 // ثابت تأخير الوقت لشاشات الكريستال السائل

    // تردد تسجيل الوقت MK - 4 ميجا هرتز

  3. // برنامج توليد التأخير

    توقف مؤقت باطل (غير موقع int a)

    (غير موقعة أنا؛

  4. لـ (i= a; i> 0 ; i-- ) ;

  5. // برنامج لنقل الأوامر إلى شاشة LCD

    باطلة LCD_com (شاشة LCD غير موقعة)

    (حرف مؤقت غير موقع؛

  6. درجة الحرارة = (شاشات الكريستال السائل & ~(1<< RS) ) | (1 << E) ; // RS=0 أمر

    PORTD=درجة الحرارة; // إخراج أعلى رباعيات الأمر، إشارات RS، E إلى portD

    أسم("نوب");

    بورت = درجة الحرارة & ~(1<< E) ; // إشارة تسجيل الأمر

  7. درجة الحرارة = ((LCD* 16 ) & ~(1<< RS) ) | (1 << E) ; // RS=0 أمر

    PORTD=درجة الحرارة; // إخراج رباعيات الترتيب المنخفض لإشارات الأمر RS و E إلى portD

    أسم("نوب"); // تأخير بسيط لدورة MK واحدة لتحقيق الاستقرار

    بورت = درجة الحرارة & ~(1<< E) ; // إشارة تسجيل الأمر

  8. وقفة (10 * الوقت)؛ // توقف مؤقتًا لتنفيذ الأمر

  9. // برنامج لكتابة البيانات على شاشة LCD

    باطلة LCD_dat (شاشة LCD غير موقعة)

    (حرف مؤقت غير موقع؛

  10. درجة الحرارة = (شاشات الكريستال السائل | (1<< RS) ) | (1 << E) ; // RS=1 هي البيانات

    PORTD=درجة الحرارة; // قم بإخراج إشارات رباعية البيانات وRS وE الأكثر أهمية إلى المنفذD

    أسم("نوب"); // تأخير بسيط لدورة MK واحدة لتحقيق الاستقرار

    بورت = درجة الحرارة & ~(1<< E) ; // إشارة تسجيل البيانات

  11. درجة الحرارة= ((شاشات الكريستال السائل* 16) | (1<< RS) ) | (1 << E) ; // RS=1 هي البيانات

    PORTD=درجة الحرارة; // إخراج إشارات tetrad و RS و E للبيانات ذات الترتيب المنخفض إلى portD

    أسم("نوب"); // تأخير بسيط لدورة MK واحدة لتحقيق الاستقرار

    بورت = درجة الحرارة & ~(1<< E) ; // إشارة تسجيل البيانات

  12. وقفة الوقت) ؛ // توقف مؤقتًا لإخراج البيانات

  13. // برنامج تهيئة شاشات الكريستال السائل

    باطلة LCD_init (باطلة)

    شاشات الكريستال السائل_كوم (0x2c) ؛ // واجهة ذات 4 أسلاك، حجم أحرف 5 × 8

    وقفة (100 * الوقت)؛

    وقفة (100 * الوقت)؛

    وقفة (100 * الوقت)؛

  14. //البرنامج الرئيسي

    إنت الرئيسي (باطل)

    DDRD= 0xfc ; // تهيئة المنفذ د

    بورتد= 0x00 ;

  15. وقفة (1000)؛

    شاشات الكريستال السائل_ينيت () ؛ // تهيئة شاشة LCD

  16. LCD_dat("ث"); // الإخراج "www.site"

    LCD_dat("ث");

    LCD_dat("ث");

    LCD_dat(".");

    LCD_dat("أ");

    LCD_dat("v");

    LCD_dat("ص");

    LCD_dat("l");

    LCD_dat("أ");

    LCD_dat("ب");

    LCD_dat(".");

    LCD_dat("ج");

    LCD_dat("س");

    LCD_dat("م");

  17. LCD_dat("أنا"); //اكتب "الأمر سهل للغاية"

    LCD_dat("t");

    LCD_dat(""");

    LCD_dat("s");

    LCD_dat(" ");

    LCD_dat("s");

    LCD_dat("س");

    LCD_dat(" ");

    LCD_dat("e");

    LCD_dat("أ");

    LCD_dat("s");

    LCD_dat("y");

  18. بينما(1) // دورة لا نهاية لها

  19. العودة 1 ؛

البرنامج بسيط للغاية، ولن يكون من الصعب على أي شخص لديه القليل من المعرفة أن يفهمه. جل أفر. لللاتينية والأرقام أسكيتتطابق الرموز مع تلك المبرمجة في منشئ الأحرف شاشات الكريستال السائل، ولذلك يجوز استعماله شاشات الكريستال السائل_دات('أ'). يمكنك إنشاء مكتبتك الخاصة للعمل مع شاشات LCD عن طريق فصل الوظائف LCD_dat(unsigned char x)، وlcd_com(unsigned char x)، وlcd_init(void) في وحدة منفصلة شاشات الكريستال السائل.حوتوصيله حسب الحاجة.

توفر هذه الفكرة الكثير من الوقت؛ ما عليك سوى كتابة الوظائف الضرورية مرة واحدة، ثم استخدامها طوال الوقت. يمكنك أيضًا ملاحظة أنه من غير المناسب إخراج عبارة طويلة حرفًا واحدًا في كل مرة؛ للقيام بذلك، يمكنك دفع سلسلة الإخراج الخاصة بنا إلى مصفوفة من الأحرف غير الموقعة وإخراجها باستخدام حلقة:

    إنت الرئيسي (باطل)

    (بيانات الأحرف غير الموقعة [ 14 ] = ( "w" , "w" , "w" , "." , "a" , "v" , "r" , "l" , "a" , "b" , " ." , "ج" , "س" , "م" ) ;

    حرف غير موقعة أنا؛

    DDRD= 0xfc ; // تهيئة المنفذ د

    بورتد= 0x00 ;

  1. وقفة (1000)؛ // تأخير حتى يكون لدى شاشة LCD الوقت الكافي للتشغيل

    شاشات الكريستال السائل_ينيت () ؛ // تهيئة شاشة LCD

  2. ل (ط = 0 ؛ ط< 14 ; i++ ) // إخراج حرف الإدخال بحرف

    LCD_dat(بيانات[i]) ؛

فقط لا تنس أن ترقيم المصفوفة في لغة C يبدأ من الصفر. يمكن استخدام البرنامج الحالي مع وحدة التحكم دون إجراء تغييرات كبيرة ATtiny2313، توصيل شاشات الكريستال السائلل بورتب، مثل بورتدفي ATtiny2313لديه 7 دبابيس فقط، وليس 8، مثل ATmega8.

أوصي أيضًا بالاتصال شاشات الكريستال السائلباستخدام اتصالات قابلة للفصل. إنه مناسب جدًا عند تصحيح أخطاء أحد البرامج عندما تحتاج إلى عرض بعض البيانات المتوسطة. لقد قمت بتوصيل موصل واحد وكان هذا كل شيء. واستمرارًا لهذه المذكرة، سأفكر في المستقبل القريب في عرض معلومات القراءة عليها شاشات الكريستال السائل.
يوما سعيدا للجميع؛)

هناك عيب صغير في هذا المثال

هناك عيب بسيط في هذا المثال، ربما لهذا السبب لا يصلح المثال للكثيرين!

بشكل عام، المثال مقتضب وبسيط، لذا فإن عيبًا صغيرًا لا يلفت الأنظار (بالنسبة لأولئك الذين هم على دراية باللغة "C")، وأكثر من ذلك بالنسبة لأولئك الذين يتعرفون للتو على AVR و"C" "اللغة، ربما هم في حيرة من أمرهم بشأن كيفية حدوث ذلك.... يكتبون، افعلوا ذلك بهذه الطريقة وسيكون الأمر كما في الصورة....ولكن هذا ليس هو الحال...

بشكل عام، المشكلة برمتها تكمن في دورات التأخير، بحيث تواكب الشاشة وحدة التحكم، أي في الوظيفة -

// برنامج توليد التأخير

توقف مؤقت باطل (غير موقع int a)

(غير موقعة أنا؛

لـ (i=a;i>0;i--);

يبدو كل شيء صحيحًا للوهلة الأولى، لكن المترجمين لوحدات التحكم الدقيقة يسعون جاهدين لتحسين الكود لتحقيق أقصى قدر من الضغط لصورة ذاكرة الفلاش الناتجة للبرامج... وعدم رؤية أي معنى في حلقة فارغة، وبالتالي، في أسفل السلسلة بعد it: جميع الاستدعاءات وإعلانات الثوابت وكل ما يتعلق بهذه الوظيفة لا معنى لها في رأيه... فهي ببساطة تزيلها من الكود أثناء التجميع...

على الأقل هذا صحيح بالنسبة لـ atmel studio 6.1، ويمكنك التحقق من ذلك من خلال النظر إلى مجلد المشروع، حيث يوجد ملف *.lss يحتوي على رمز التجميع لهذا البرنامج، الذي تم إنشاؤه عند بناء المشروع. لا يوجد تلميح حول تنفيذ وظيفة الإيقاف المؤقت void ...

ونتيجة لذلك، عند وميض البرنامج الثابت لوحدة التحكم، تنتهي الشاشة بقمامة عشوائية أو فراغ... عند الضغط على إعادة تعيين عدة مرات، قد تختفي القمامة وتعاود الظهور... ومن الواضح أن المعالج والشاشة خارج الخدمة مزامنة

ولكن إذا قمت بإجراء تصحيح صغير

توقف مؤقت باطل (غير موقع int a)

(غير موقعة أنا؛

ل(i=a;i>0;i--)
أسم("نوب");

ثم يكون هذا منطقيًا بالنسبة للمترجم، ويتم تأكيد ذلك أيضًا من خلال المظهر الواضح لتنفيذ الوظيفة في كود التجميع

0000006ج
:
6ج:9ج 01 موفو r18, r24
6e: 03 c0 rjmp .+6 ; 0x76
70:00 00 لا
72: 21 50 فرعي r18, 0x01 ; 1
74:31 09 اس بي سي r19, r1
76: 21 15 ق.ر18، ص1
78:31 05 سي بي سي r19, r1
7 أ: d1 f7 brne .-12 ؛ 0x70

وعلى الأرجح سيعمل كل شيء.... على الأقل بالنسبة لي على atmega16 (مزامنة RC الداخلية بسرعة 1 ميجا هرتز) واستخدام atmel studio 6.1 كان الأمر كذلك تمامًا... ربما في الترددات الأخرى، سيتعين عليك اللعب بالثابت #define TIME 10 و/أو القيم التي تم تمريرها إلى الدالة voidوقفة

هنا-> إيقاف مؤقت (القيمة) ... أو إيقاف مؤقت (القيمة * الوقت) ....

حظا سعيدا في تعلم كيفية تشغيل AVR!

انظر، تخيل أن شاشة LCD -

انظر، تخيل أن شاشة LCD عبارة عن آلة كاتبة، والورق الموجود في الآلة الكاتبة هو ذاكرة LCD، والعربة هي مؤشر المؤشر. بالإضافة إلى ذلك، لا تعرض شاشة LCD محتويات الذاكرة بالكامل، بل جزءًا منها فقط. يبدو وكأنه نوع من النافذة التي قمنا بإعدادها على ورقتنا مع النص.

هنا يحدد I/D كيفية الطباعة، من اليمين إلى اليسار أو من اليسار إلى اليمين.
يحدد S ما إذا كنا سنحرك نافذة الشاشة أثناء الكتابة أم لا.
S/C - يقوم ببساطة بتحريك نافذة الشاشة المرئية أو عربة الآلة الكاتبة.
R/L - يحدد المكان (يسارًا أو يمينًا) الذي سنحرك فيه الشاشة أو الدورات التدريبية باستخدام علامة S/C.

أعتقد أن هناك شيئا مفقودا!

لقد قمت بنسخ برنامجك وproteus ولن أبدأ في Mega8. الشاشة صامتة، بدأت في البحث في أوراق البيانات وهذا ما وجدته:
ما هو مفقود هو تهيئة الثلاثة الأولى!

0011 - انتظر 5 مللي ثانية
0011 - انتظر 100 ثانية
0011 - انتظر 2 مللي ثانية
0010 - انتظر 41 ثانية
0000 - -و-
0010 - -و-
1000
0000
1000
0000
0001
0000
0100

صححني إذا كنت مخطئا!

لا يعمل!

لقد حاولت تغيير ترددات الساعة والتأخير أثناء التهيئة وإخراج الرموز (الأوامر)، دون جدوى حتى الآن. فيما يتعلق بالصمامات، إذا كنت تقصد تكوين أطراف المنفذ D باستخدام DDRB، فإن PORTD يسجل كمخرجات سجل منخفضة. المستوى، ثم فعلت ذلك.
نظرًا لعدم وجود أي شيء آخر للقيام به، قمت بتجميع برنامج بسيط لإخراج الرموز باستخدام أدوات CodeVisionAVR، ووضعه في PROTEUS - إنه يعمل!...ولكن مع شاشة LCD حقيقية فإنه يرفض..

لا أنا أتحدث عن ذلك

لا، أنا أتحدث عن محاولة وضع ضوء وامض على المنفذ D، على سبيل المثال، أو مجرد إضاءة المنفذ بأكمله مرة واحدة. عندما اشتريت وحدة تحكم دقيقة فقط، لم أتمكن من القيام بذلك. لقد بحثت في المنتديات واتضح أن الصمامات مبرمجة بطريقة ما هناك وأن المنفذ D وجميع وحدات البت الثمانية الخاصة به لم يتم تشغيلها. تحقق من هذه النقطة، أو الأفضل من ذلك، حاول نقل شاشة LCD إلى منفذ آخر، على سبيل المثال إلى B. حقيقة أن البرنامج يعمل في Proteus ولكن ليس مع المنفذ الحقيقي هو الفرق في معلمات شاشة LCD المسدودة في Proteus و واحد حقيقي.

لا يعمل!

لقد قمت بتجميع كل شيء وتوصيله وفقًا للرسم التخطيطي، واستخدم MK فقط ATmega16 وLCD WH1602M، وبالتالي قام بتجميع البرامج الثابتة الخاصة به في WinAVR. ومع ذلك، رفضت شاشة LCD إخراج أي شيء، وقمت أيضًا بجمعها في Proteus (على ATmega 8 وLM016L)، ويتم إخراج البيانات من MK ولكن لا يوجد شيء مرئي على شاشة LCD. ماذا ممكن ان تكون المشكلة؟ (إذا كان هذا مهمًا، استخدم مذبذب RC الداخلي للساعة عند 1 ميجاهرتز)

1. بالنسبة لـ Atmega16 الذي تحتاجه

1. بالنسبة إلى Atmega16، يجب عليك أولاً تشغيل الصمامات حتى يعمل المنفذ D.
2. حاول تغيير تردد الساعة إلى 4 ميجا هرتز و 8 ميجا هرتز. المشكلة برمتها في شاشة LCD هي أنه لا يتم الحفاظ على جميع فترات التوقف المؤقت أثناء التهيئة أو عند إصدار أمر. ووحدة تحكم LCD حساسة جدًا لهذا الأمر.

عندي سؤال:
لقد قمت بتجميع دائرة الكرونومتر على Mega 8 بعرافة جاهزة - يتم عرض القراءات على WH0802،
المؤشر هو عدد مكون من ثلاثة أرقام يتم عرضها على الشاشة بأكملها، الرقم الواحد يتكون من 4 أحرف. شاشة رسومية زائفة. كيف يمكن كتابة البرامج الثابتة؟؟
يرفض المؤلف بشكل قاطع تقديم الكود المصدري ولا يعلق على العمل، ربما لأسباب تتعلق بـ "الملكية الفكرية".
في وقت فراغي، أريد أن أحاول كتابة البرامج الثابتة الخاصة بي للأغراض التعليمية.

جئت عبر هذا

لقد واجهت هذا الوضع.
هناك نوعان من شاشات الكريستال السائل 16x2:
1-MTC-S16204XFGHSAY
2 - WH1602A-YGH-CTK

أستخدم الأول في مشروع باستخدام نظام تحديد المواقع العالمي (GPS).
قررت استخدام الخيار الثاني في مشروع باستخدام لوحة المفاتيح. ولكن لسبب ما لا تعمل شاشات الكريستال السائل.
يتم ضبط التباين وتظهر المربعات. هذا كل شئ.
ربما يكون هناك ترتيب تهيئة مختلف.
ساعدني على الفهم
وهنا أوراق البيانات
filebox.od.ua/?file=24a31fc50d62bfcd658bdadac84088ab

الشاشات لا تختلف.

الشاشات لا تختلف. pinout هو نفسه. تختلف المواعيد قليلاً. حاول زيادة التأخير عند إرسال الأوامر إلى شاشة LCD أو خفض تردد وحدة التحكم الدقيقة.

تحتوي جميع شاشات LCD الموجودة على HD44780 على نظام أوامر متطابق. ما هي الواجهة التي تستخدمها، 4 بت أو 8 بت؟ حاول أيضًا زيادة التأخير بين تشغيل شاشة LCD وتهيئتها إلى حوالي 0.1 ثانية. هل قطبية مصدر الطاقة لشاشات الكريستال السائل غير مختلطة، هل تحتاج إلى القليل من الاحتراق؟ أنا بحماقة بطريقة ما أحرقته، ثم حاولت توصيله. كما تم عرض المربعات السوداء، وعرض البيانات في كل مرة، أي. عملت غير مستقرة للغاية.

أستخدم برامج من المقالات

أستخدم برامج من مقالات حول نظام تحديد المواقع العالمي (GPS).
واجهة 4 بت

لقد قمت بتجربة البرنامج من هنا
chipenable.ru/index.php/programming-c/75-chasy-na-mikrokontrollere.html

انها عملت

ما الذي يجب عليك تغييره في برنامجك؟

انتبه إلى التأخير

انتبه إلى التأخير بعد إصدار أوامر التهيئة والتكوين، فقد يكون هذا هو الحال. لقد واجهت أيضًا حالة مماثلة، لكن وحدات التحكم كانت متماثلة، وكان البرنامج يعمل على وحدة واحدة فقط.

النظير HD44780

أواجه مشكلة - لا يمكنني العثور على شاشة WH1602A LCD بسعر معقول. على سبيل المثال
في chipdip تتوفر هذه chipdip.ru/product/wh1602a-ygh-ct-k.aspx
700 خشب. ما هو YGH في الاسم "WH1602A-YGH-CT(K)، LCD 16x2، الإنجليزية-الروسية"
ما هي نظائرها من شاشات الكريستال السائل على أساس HD44780 هناك؟ لقد وجدت صفحة micronika.ru/order.phtml?vid=64 - هناك الاسم FDCC1602A-FSBFBW-51SR يحتوي على 1602A،
لقد لاحظت للتو. ربما FDCC1602A-FSBFBW-51S ستعمل دون تغيير الكثير في التعليمات البرمجية؟
ما هي المشاكل التي قد تنشأ عند الاستخدام
ليس HD44780 الفعلي من شركة هيتاشي، ولكن نظائرها؟
ملحوظة: لن تكون فكرة سيئة أن تقرأ عن استخدام شاشات LCD مختلفة، نظائرها لـ HD44780، عن شاشات MELT
شاشات الكريستال السائل سيئة

العمل مع شاشة مقاس 16x2 على وحدة التحكم HD44780 في Bascom-AVR


شاشات LCD على وحدة التحكم HD44780 (بالإضافة إلى KS0066 المتوافقة) شائعة جدًا نظرًا لطريقة العمل البسيطة معها، فضلاً عن سعرها المنخفض. اعتمادا على تصميم الشاشة، فإنها تسمح لك بعرض من 8 إلى 40 حرفا في كل سطر؛ يمكن أن يكون هناك سطر واحد أو سطرين أو أربعة. الأكثر شيوعًا هي 8*2 (ثمانية أحرف*سطرين)، 16*2 و20*4.

على سبيل المثال، دعونا نلقي نظرة على دبوس المؤشر 16*2 (وهو مشابه لجميع شاشات العرض على وحدة التحكم HD44780)

تحتوي كل شاشة على وحدة التحكم HD44780 على 14 سنًا للاتصال + سنين للإضاءة الخلفية (إن وجدت):

  1. الأرض، جي إن دي
  2. جهد الإمداد، Vcc (+5 فولت)
  3. تعديل التباين، Vo
  4. سجل حدد، R/S
  5. القراءة/الكتابة، R/W
  6. قراءة/كتابة تمكين الإشارة، E
  7. بت 0، D0
  8. البت 1، د1
  9. البت 2، د2
  10. البت 3، د3
  11. البت 4، د4
  12. البت 5، د5
  13. البت 6، د6
  14. البت 7، د7
  15. مصدر طاقة الإضاءة الخلفية لشاشات الإضاءة الخلفية، LED+
  16. مصدر الإضاءة الخلفية لشاشات العرض ذات الإضاءة الخلفية، LED -


يتم تحميل البيانات إلى الشاشة عبر ناقل البيانات (D0-D7)، بينما تدعم وحدة التحكم اتصالات 8 و4 بت. يوفر اتصال 4 بت أرجل وحدة التحكم الدقيقة وغالبًا ما يكون كافيًا للعديد من المهام (مع اتصال 8 بت يمكنك تحميل البيانات إلى وحدة تحكم العرض بشكل أسرع، لكننا لا نحتاج إلى هذا في الوقت الحالي، لذلك لن نأخذه في الاعتبار ). بالنسبة لاتصال 4 بت، يتم استخدام آخر 4 بتات من الناقل (D4-D7).

على سبيل المثال، سوف نستخدم شاشة 20x4 متصلة بوحدة التحكم الدقيقة ATmega8 عبر واجهة 4 بت وفقًا للرسم البياني أدناه



تتطلب الشاشة 5 فولت من أجل الطاقة، ويقوم المقسم الموجود على المقاوم R1 بضبط تباين الأحرف المعروضة، ويتم توصيل طرف R/W بالأرض (أي يتم تحديد التسجيل الدائم على الشاشة). يمكنك توصيل المسامير المتبقية بأي أرجل حرة لوحدة التحكم الدقيقة. سيبدو تكوين الأرجل لتوصيل شاشة وحدة التحكم الدقيقة ATmega8 كما يلي:

$regfile = "m8def.dat"
$ كريستال = 1000000 "تردد التشغيل 1 ميجا هرتز

التكوين شاشات الكريستال السائل= 20 * 4


التكوين Lcdpin = دبوس، Db4 = PortB. 3، Db5 = بورتب. 2، Db6 = بورتب. 1، Db7 = بورتب. 0، ه = بورتب. 4، روبية = بورتب.5

سي إل إس - تنظيف الشاشة

شاشات الكريستال السائل - عرض البيانات ( مثال: شاشات الكريستال السائل "مرحبا بالعالم"سوف يعرض النقش مرحبا بالعالم )

الآن لنكتب هذا البرنامج الصغير الذي سيعرض النقش على الشاشة:

$regfile = "m8def.dat" "نوع المتحكم الدقيق المحدد
$ كريستال = 1000000 "تردد التشغيل 1 ميجا هرتز

التكوين شاشات الكريستال السائل= 20 * 4 "نحن نشير إلى نوع العرض الذي لدينا
"وتكوين الأرجل للاتصال
التكوين

المؤشر عن
Cls "دعونا نمسح الشاشة

شاشات الكريستال السائل "شاشة ال سي دي 20*4 اتش دي 44780"
حدد 2 , 8 "حرك المؤشر إلى السطر الثاني، الألفة الثامنة
شاشات الكريستال السائل "موقع" "عرض النص

نهاية

ونتيجة لذلك، نحصل على ما يلي على الشاشة:

يحتوي Bascom-AVR أيضًا على العديد من الأوامر الإضافية للعمل مع شاشات العرض:

بيت- يقوم أيضًا بإرجاع المؤشر إلى السطر العلوي، ولكن على عكس أمر UPPERLINE، يمكن أن يأخذ هذا الأمر قيمًا إضافية: إذا وضعت حرفًا بعده ل, تأو Fثم ينتقل المؤشر إلى بداية السطر الذي يبدأ اسمه بالحرف المقابل (مثال: لتحريك المؤشر إلى بداية السطر الثالث، تحتاج إلى كتابة الأمر بيت ت )

رمز المثال لعرض المعلومات باستخدام هذه الأوامر:

$regfile = "m8def.dat" "نوع المتحكم الدقيق المحدد
$ كريستال = 1000000 "تردد التشغيل 1 ميجا هرتز

التكوين شاشات الكريستال السائل= 20 * 4 "نحن نشير إلى نوع العرض الذي لدينا
"وتكوين الأرجل للاتصال
التكوين Lcdpin = دبوس، Db4 = Portb. 3، Db5 = بورتب. 2، Db6 = بورتب. 1، Db7 = بورتب. 0، ه = بورتب. 4، روبية = بورتب. 5

المؤشر عن"قم بإيقاف تشغيل عرض المؤشر
Cls "دعونا نمسح الشاشة

شاشات الكريستال السائل "*** HD44780 LCD ***" "اطبع النص في السطر الأول
الخط السفلي "انتقل إلى السطر الثاني
شاشات الكريستال السائل "السطر رقم 2" "نعرض النص
الخط الثالث "انتقل إلى السطر الثالث
شاشات الكريستال السائل "آببككدييففججفييجج" "نطبع على السطر الثالث
الخط الرابع "انتقل إلى السطر الرابع
شاشات الكريستال السائل "1234567890" "الطباعة على السطر الرابع

نهاية "نهاية البرنامج


ومثال لكيفية استخدام تحويل النص:

$regfile = "m8def.dat" "نوع المتحكم الدقيق المحدد
$ كريستال = 1000000 "تردد التشغيل 1 ميجا هرتز

خافت أ مثلبايت"متغير لتنظيم الحلقة

التكوين شاشات الكريستال السائل= 20 * 4 "نحن نشير إلى نوع العرض الذي لدينا
"وتكوين الأرجل للاتصال
التكوين Lcdpin = دبوس، Db4 = Portb. 3، Db5 = بورتب. 2، Db6 = بورتب. 1، Db7 = بورتب. 0، ه = بورتب. 4، روبية = بورتب. 5

المؤشر عن"قم بإيقاف تشغيل عرض المؤشر
Cls "دعونا نمسح الشاشة

حدد 1 , 11 "ضع المؤشر على السطر الأول، الألفة العاشرة
شاشات الكريستال السائل سيعرض "Bascom-AVR" "النص

"التحول في الحلقة اليسرى
ل أ = 1 ل 10 "نكرر هذه الدورة حتى يصل المتغير A إلى القيمة 10
Shiftlcdغادر"حرك النص إلى اليسار
الانتظار 300 "تأخير 300 مللي ثانية
التالي أ
"التحول إلى الحلقة اليمنى
ل أ = 1 ل 10 "نكرر الحلقة حتى يصل المتغير A إلى القيمة 10
Shiftlcdيمين"الآن دعنا ننقل النص إلى اليمين
الانتظار 300 "تأخير 300 مللي ثانية
التالي أ "زيادة قيمة المتغير A بمقدار 1

"استمر في تنفيذ البرنامج
انتظر 1 "تأخير 1 ثانية

بيت F "ضع المؤشر على السطر السفلي

شاشات الكريستال السائل "برنامج النهاية" "وعرض النقش

نهاية "نهاية البرنامج

ونظائرها، على سبيل المثال، مثل S6A0069، KS0066، الخ. تعتمد مؤشرات LCD هذه على النص ويمكنها عرض رموز نصية ورسومية زائفة. حجمها المألوف هو 5x8 بكسل، وتأتي مؤشرات LCD بأحجام مختلفة وبدقة مختلفة، على سبيل المثال: 8 أحرف في سطرين - 8x2، 16x2، 20x2، 40x2، 16x4، 20x4، إلخ.

في هذا الدرس سوف نلقي نظرة على توصيل مؤشر LCD ذو 4 بتات بمتحكم AVR الدقيق وكتابة برنامج بتنسيق .

تحتوي مؤشرات LCD هذه على الاستنتاجات التالية:
VSS – Gnd (نقص الطاقة)
VDD – Vcc (مزود الطاقة 5 فولت)
VO – ضبط تباين مصفوفة LCD
RS - خط التحكم RS
RW (قراءة/كتابة) – خط التحكم RW
E (تمكين) - خط التحكم E
خط البيانات D0 – D0 (غير مستخدم في وضع 4 بت)
D1 - خط البيانات D1 (غير مستخدم في وضع 4 بت)
D2 – D2 خط البيانات (غير مستخدم في وضع 4 بت)
D3 – D3 خط البيانات (غير مستخدم في وضع 4 بت)
D4 – خط البيانات D4
D5 – خط البيانات D5
D6 – خط البيانات D6
D7 – D7 خط البيانات
أ – عرض الأنود LED الإضاءة الخلفية
K – عرض كاثود LED ذو الإضاءة الخلفية

انتباه! تحتوي مؤشرات LCD المختلفة على مواقع الدبوس الخاصة بها؛ ويمكنك معرفة مواقع الدبوس الدقيقة في الوثائق الفنية (ورقة البيانات) الخاصة بمؤشر LCD الخاص بك.

يتحكم طرف مؤشر LCD VO في تباين مصفوفة LCD اعتمادًا على جهد الإمداد المزود لهذا الدبوس. إذا لم تكن هناك حاجة لقراءة المعلومات من الشاشة، فإن طرف RW متصل بمصدر الطاقة السالب.

مثال على اتصال 4 بت لمؤشر LCD بمتحكم Attiny2313:

يقوم المقاوم الفرعي RV1 بضبط سطوع مؤشر LCD.
في BASCOM-AVR، قبل تشغيل مؤشر LCD، يجب عليك الإشارة إلى منافذ العرض المتصلة بأي منافذ للمتحكم الدقيق، ولهذا يوجد أمر Config Lcdpin، مثال لاستخدام هذا الأمر: Config Lcdpin = Pin, Db4 = Portb .4، Db5 = Portb.5، Db6 = Portb.6، Db7 = Portb.7، E = Portb.3، Rs = Portb.2 وأيضًا تحديد دقة مؤشر LCD باستخدام أمر Config Lcd، على سبيل المثال: Config Lcd = 16 * 2 وقم بتهيئة مؤشر LCD باستخدام أمر Initlcd، وبعد ذلك سيكون مؤشر LCD جاهزًا للاستخدام.

فيما يلي قائمة بالأوامر للعمل مع مؤشر LCD في BASCOM-AVR:
التكوينال سي ديبين– ضبط تكوين الدبوس لمؤشر LCD ووحدة التحكم الدقيقة
التكوين شاشات الكريستال السائل– ضبط دقة مؤشر LCD
Initlcd– تهيئة مؤشر LCD
شاشات الكريستال السائل– عرض النص على مؤشر LCD، مثال: Lcd “Hello”
Cls- تنظيف مؤشر LCD
حددذ،س– ضع المؤشر على الموضع x,y
الخط السفلي- حرك المؤشر إلى السطر السفلي
الخط العلوي- حرك المؤشر إلى السطر العلوي
Shiftlcd لليمين– انقل صورة مؤشر LCD إلى المكان الصحيح
Shiftlcd اليسار– حرك صورة مؤشر LCD إلى اليسار مكانًا واحدًا
المؤشر معطل- تعطيل المؤشر
المؤشر قيد التشغيل- تمكين المؤشر
المؤشر على وميض- تمكين المؤشر الخفقان
المؤشر على Noblink- تعطيل المؤشر الخفقان

انتباه! عند استخدام مؤشر LCD بدقة 8x2 في BASCOM-AVR، قم بتكوينه على أنه 16x2، نظرًا لأن BASCOM-AVR لا يحتوي على تكوين لمؤشر LCD بدقة 8x2.

برنامج مثال في BASCOM-AVR للمخطط أعلاه:

$regfile = "attiny2313.dat" $crystal = 8000000 تكوين Lcdpin = Pin، Db4 = Portb.4، Db5 = Portb.5، Db6 = Portb.6، Db7 = Portb.7، E = Portb.3، Rs = Portb .2 تكوين Lcd = 16 * 2 Initlcd Cls تحديد موقع 1، 1 Lcd "Hello،" Lowerline Lcd "world!" نهاية

وإليك كيفية عمل كل شيء مع مؤشر LCD 8x2:

بت الصمامات للبرامج الثابتة:

يمكنك تنزيل ملفات الدرس (المشروع في، المصدر، البرامج الثابتة) أدناه