LCD displeyning pin chiqishi. Ulanish va WH1602 displey bilan ishlash. i2c LCD displey bilan ishlash uchun kutubxonalar

Elektronikaga bo'lgan ishtiyoqim davomida men bir nechta ishlab chiqaruvchilarning LCD displeylaridan foydalanish imkoniyatiga ega bo'ldim - DataVision, WINSTAR, Uniworld Technology Corp. Ular boshqaruvchi turi, pinlar soni va chiziqlar uzunligida farq qilar edi, lekin ularning barchasi bir xil ulanish sxemasiga, buyruq tizimiga ega edi va mikrokontrollerdan bir xil dastur tomonidan xizmat ko'rsatildi. Shuning uchun, garchi biz hozir displey haqida gapiramiz WINSTAR-dan WH0802A, quyida aytilganlarning barchasi boshqa kompaniyalarning belgilar LCD displeylariga tegishli.

Shunday qilib, biz WH0802A-YGH-CT displeyini mikrokontrollerga ulaymiz

WH0802A o'rnatilgan KS0066 boshqaruv kontrolleriga ega 8 ta belgidan iborat ikki qatorli belgilar displeyi.
Keling, displey pinlarining maqsadini ko'rib chiqaylik.

Ba'zi displeylarda ikkita qo'shimcha pin mavjud - orqa yorug'lik pinlari + LED va -LED. Bundan tashqari, agar xulosalar mavjud bo'lsa, bu orqa yorug'lik borligini anglatmaydi. Shuningdek, aksincha. Displeyimda orqa yorug'lik bor, lekin boshqaruv pinlari yo'q.

Odatiy bo'lib, WH0802A-YGH-CT displeyining orqa yorug'ligi o'chirilgan. Uni yoqish uchun siz bir nechta oddiy manipulyatsiyalarni bajarishingiz kerak, xususan, ikkita o'tish moslamasini o'rnatish va oqim cheklovchi rezistorni lehimlash (mos ravishda RK, JF va RA fotosuratlariga qarang).

Ulanish diagrammasini ko'rsatish

Bu belgilar LCD displeylarini ulash uchun odatiy diagramma. Biz displeyning orqa yorug'ligini boshqarish sxemasidan foydalanmaymiz, lekin men uni har ehtimolga qarshi chizdim.

Boshlash kodi

O'chirish uchun quvvatni qo'llaganingizdan so'ng, kontrast regulyatorini (rezistor R1) burishingiz kerak. Agar ekranda yuqori chiziq paydo bo'lsa, demak u tirik va kod yozishni boshlash vaqti keldi. Dastlabki bosqichda biz 8 bitli avtobusdan foydalanamiz. Birinchi natijalarni olish uchun biz ikkita funktsiyani yozishimiz kerak - ma'lumotlarni yozish funktsiyasi va buyruqni yozish funktsiyasi. Ular faqat bir satrda farqlanadi - ma'lumotlar yozilganda RS signali 1 bo'lishi kerak, buyruq yozilsa, RS 0 bo'lishi kerak. Biz hozircha o'qish funksiyalaridan foydalanmaymiz, shuning uchun R/W signali doimo 0 bo'ladi. .

8-bitli avtobus uchun yozish sikli quyidagicha ko'rinadi:
1. RS ni o'rnating (0 - buyruq, 1 - ma'lumotlar)
2. DB7…DB0 shinasiga ma'lumotlar bayti qiymatini chiqaring
3. E=1 ni o‘rnating
4. Dasturiy ta'minotni kechiktirish 1
5. E=0 ni o‘rnating
6. Dasturiy ta'minotni kechiktirish 2

LCD belgilar displey boshqaruvchisi cheksiz tez emas, shuning uchun ba'zi operatsiyalar orasida dasturiy ta'minot kechikishlari ishlatiladi. Birinchisi, strobe signalini bir muddat ushlab turish uchun kerak, ikkinchisi, boshqaruvchi ma'lumotlarni yozish yoki buyruqni bajarish uchun vaqtga ega bo'lishi uchun. Kechikish qiymatlari har doim displey boshqaruvchisining tavsifida berilgan va siz har doim kamida ularning minimal qiymatini saqlab qo'yishingiz kerak, aks holda kontrollerning ishlashida nosozliklar muqarrar.

Umuman olganda, displey boshqaruvchisi band bayrog'iga ega - BF. Agar bayroq 1 bo'lsa, boshqaruvchi band, 0 bo'lsa, u bepul. Dasturiy ta'minotning ikkinchi kechikishi o'rniga siz band bayroqni o'qishingiz va displey boshqaruvchisi bo'shligini tekshirishingiz mumkin. Ammo biz tezda birinchi natijalarga erishmoqchi bo'lganimiz sababli, band bayroq bilan keyinroq shug'ullanamiz.

//belgili LCD displeyni AVR ga ulang
#o'z ichiga oladi
#o'z ichiga oladi

//LCD ma'lumotlar shinasi ulangan port
#PORT_DATA PORTD ni aniqlang
#PIN_DATA PINDni aniqlang
#DDRX_DATA DDRDni aniqlang

//boshqaruv pinlari ulangan port
#PORT_SIG PORTB ni aniqlang
#PIN_SIG PINBni aniqlang
#DDRX_SIG DDRBni aniqlang

//mikrokontroller pin raqamlari
// LCD boshqaruv pinlari ulangan
#RS 5 ni aniqlang
#RW 6 ni aniqlang
#define EN 7

//bitlar bilan ishlash uchun makroslar
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))

#F_CPU 8000000 ni aniqlang
#bizni_kechiktiring(bizni) __kechikishlar((F_CPU / 1000000) * (biz));
#define_delay_ms(ms) __kechikishlar((F_CPU / 1000) * (ms));

//buyruqni yozish funksiyasi
bekor LcdWriteCom( imzosiz belgi ma'lumotlar)
{
ClearBit (PORT_SIG, RS); // RS ni 0 ga o'rnating
PORT_DATA = ma'lumotlar; // ma'lumotlarni avtobusga chiqarish
SetBit(PORT_SIG, EN); // E ni 1 ga qo'ying
_kechikish_biz(2);
ClearBit(PORT_SIG, EN); // E ni 0 ga qo'ying
_kechikish_biz(40);

//ma'lumotlarni yozib olish funktsiyasi

bekor LcdWriteData( imzosiz belgi ma'lumotlar)
{
SetBit(PORT_SIG, RS); //RS ni 1 ga qo'ying
PORT_DATA = ma'lumotlar; // avtobusga ma'lumotlarni chiqarish
SetBit(PORT_SIG, EN); // E ni 1 ga qo'ying
_kechikish_biz(2);

ClearBit(PORT_SIG, EN); // E ni 0 ga qo'ying

Delay_us(40);
}

int asosiy( bekor )
{
esa (1);
qaytish 0;
}

Bu erda hech qanday murakkab qismlar yo'q, hamma narsa aniq bo'lishi kerak. Davom etishga ruxsat.

Har qanday LCD displey foydalanishdan oldin ishga tushirilishi kerak. Boshlash jarayoni odatda displey boshqaruvchisi uchun ma'lumotlar varaqida tasvirlangan. Ammo u erda hech qanday ma'lumot bo'lmasa ham, ketma-ketlik katta ehtimol bilan shunday bo'ladi.

1. Ovqatga xizmat qiling

2. >40 ms kuting

3. Function set buyrug'ini bering

D.L.– avtobus kengligini sozlash biti
0 – 4 bitli shina, 1 – 8 bitli shina

N– displey qatorlari sonini belgilash uchun bit
0 - bir qatorli rejim, 1 - ikki qatorli rejim

F– shriftni sozlash biti
0 – format 5*8, 1 – format 5*11

* - bu bitlarda nima bo'lishi muhim emas

4. Displeyni yoqish/o‘chirish buyrug‘ini bering

D– displeyni yoqish/o‘chirish biti
0 – displey o‘chirilgan, 1 – displey yoqilgan

C– kursorni yoqish/o‘chirish biti
0 – kursor o‘chirilgan, 1 – kursor yoqilgan

B– miltillashni yoqish biti
0 – miltillovchi kursor yoqilgan, 1 – miltillovchi kursor o‘chirilgan

5. Displeyni tozalash buyrug'ini bering


6. > 1,5 ms kuting

7. Entry Mode Set buyrug'ini bering

I/D– DDRAM manzilini oshirish/kamaytirish tartibi (RAM ma’lumotlarini ko‘rsatish)
0 – kursor chapga siljiydi, manzil 1 ga kamayadi, 1 – kursor o‘ngga siljiydi, manzil 1 ga ortadi

SH– butun displeyning siljish tartibi
0 – siljish yo‘q, 1 – siljish I/D signaliga ko‘ra sodir bo‘ladi – agar bitta bo‘lsa 0 – displey o‘ngga, 1 – displey chapga siljiydi

Bizning misolimiz uchun, ishga tushirish funksiyasi shunday ko'rinadi

Biz qanday qilishni bilib oldik: mikrokontrollerni boshqarish va mikrokontroller yordamida biror narsani boshqarish. Endi qurilmamizni yanada qulayroq qilish uchun biz unga displeyni ulaymiz.

Darhol band qilishimga ruxsat bering: displey ramziy. Bu uning ichida, uning xotirasida, u allaqachon alifboga ega ekanligini anglatadi. Bizga kerak bo'lgan yagona narsa chiziqni chop etish buyrug'ini berishdir.

Displeylar har xil: ekran yorug'ligining turli xil ranglari, har xil qatorlar soni, har bir satrda turli xil belgilar soni. Shuning uchun, bu erda biz WH0802A-YGK-CT displeyi, 8 belgidan iborat 2 qator, sariq LED yoritgichini ko'rib chiqamiz.

Keling, CodeVision-da loyiha yarataylik. LCD yorlig'ida biz displeyimiz ulanadigan portni ko'rsatamiz (PORTD). Char/Line qatorida biz LCD displeyimizning belgilar sonini ko'rsatamiz (8).

Biz loyihani yaratamiz va saqlaymiz. Biz kodni quyidagi shaklga keltiramiz:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #o'z ichiga oladi #asm .equ __lcd_port= 0x12 ; PORTD #endasm #include void main(void) ( PORTD= 0x00 ; DDRD = 0x00 ; lcd_init (8 ) ; while (1 ) ( ) ; )

#o'z ichiga oladi #asm .equ __lcd_port=0x12 ;PORTD #endasm #include void main(void) (PORTD=0x00; DDRD=0x00; lcd_init(8); while (1) ( ); )

Keling, dastur kodimizni biroz o'zgartiramiz:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #o'z ichiga oladi #asm .equ __lcd_port= 0x12 #endasm #include void main(void) ( PORTD= 0x00 ; DDRD= 0x00 ; lcd_init(8 ) ; lcd_gotoxy(0 , 0 ) ; lcd_putsf("lesson3" ) ; #pragma rl+ lcd_gotoxl(s_son)(sf) ); #pragma rl- while (1 ) ( );

#o'z ichiga oladi #asm .equ __lcd_port=0x12 #endasm #include void main(void) (PORTD=0x00; DDRD=0x00; lcd_init(8); lcd_gotoxy(0,0); lcd_putsf("dars3"); #pragma rl+ lcd_gotoxy(0,1); lcd_putsf("Lesson3); #pragma rl- while (1) ( )

Keling, ISIS Proteus-da simulyatsiya uchun olingan kodni ishga tushiramiz. Ko'rib turganingizdek, birinchi qator to'g'ri ko'rsatilgan, ammo ikkinchi qator yomon. Gap shundaki, Proteus rus alifbosini tanimaydi va agar sizning displeyingiz uni qo'llab-quvvatlamasa, unda haqiqiy displeyda ham tushunarsiz belgilar bo'ladi.

Endi biz barchasini haqiqiy displeyda sinab ko'rishimiz kerak. Bu erda ba'zi nuances bor. Biz displeyda ma'lumotlar jadvalini ochamiz va ushbu jadvalni pinoutlar bilan ko'ramiz:

Ehtimol, bu erda hamma narsa aniq, lekin baribir:

1 - tuproq 0V.

2 - quvvat manbai +5V.

3 - Kontrastni nazorat qilish. O'zgaruvchan qarshilik orqali ulangan.

LED chiroqlari. Biz uni oddiy LED kabi ulaymiz.

A - oqim cheklovchi rezistor orqali "+" ga ulang, K - "tuproq" ga (GND) ulang.

Yana bir muhim jihat shundaki, mikrokontroller kvarts rezonatoridan soat bilan belgilanishi kerak, aks holda to'g'ri ishlash kafolatlanmaydi.

Mikrodastur qurilmasining ko'rinishi

Mikrodastur va proteus fayli mavjud

Arduino bilan ishlaganda, ba'zida displeyda ba'zi ma'lumotlarni ko'rsatish kerak bo'ladi, ammo bu maqsadda ma'lumotlarni shaxsiy kompyuterga o'tkazish, agar qurilma shaxsiy kompyuter bilan birgalikda ishlatilsa, mantiqiy bo'ladi. Ammo avtonom qurilmalar haqida nima deyish mumkin? Bu erda LCD displeylar yordamga keladi. Keling, HD44780 boshqaruvchisiga asoslangan LCD displeylarni ko'rib chiqaylik

Ushbu monoxrom displey ixtiyoriy orqa yorug'likka ega va 16 belgidan iborat 2 qatorni ko'rsatishi mumkin. Belgilar o'lchamlari 5x8 piksel. Kirill alifbosini qo'llab-quvvatlash mavjud.

Ushbu displeylarning afzalliklari nimada? HD44780 LCD displey standart bo'lib, ko'pincha kichik monoxrom LCD displeylar orasida qo'llaniladi, shuning uchun unga asoslangan displeylar bilan ishlash kutubxonasi professionallar tomonidan yozilgan. Arduino ishlab chiquvchilari o'zlarining platformalari uchun kutubxona yozdilar va u LiquidCrystal deb nomlanadi. Biz undan men tanlagan displey bilan ishlash uchun foydalanamiz.

LCD displeyni ulash uchun bizga quyidagi komponentlar kerak

  • Har qanday Arduino (bizning holimizda Arduino UNO)
  • HD44780 asosidagi LCD displey
  • Non taxtasi
  • Ulanish simlari
  • Potansiyometr (ixtiyoriy)

LCD ekranni ulash

LCD displeyni Arduino-ga ulash hatto bola uchun ham qiyin emas. Suratda ko'rsatilganidek, ekranni panelga ulang va Arduino-dan +5 V quvvat va yerni sindirish paneli quvvat relslariga ulang. (Biz quvvat va tuproqni ko'p marta ishlatganimiz sababli, uni relslarga ulash qulayroq va umuman, siz uni shu tarzda ulashga odatlanishingiz kerak)


Arduino-ning displey bilan to'liq ishlashi uchun biz 12 pinni ulaymiz:

  • 1 - Vss, tuproq ⇨ GND
  • 2 - Vdd, quvvat ⇨ +5 V
  • 3 - Vo, kontrastli kuchlanish nazorati ⇨ potansiyometr chiqishi
  • 4 - RS, ro'yxatdan o'ting ⇨ pin 12 Arduino-ni tanlang
  • 5 - R/W, o'qish/yozish ⇨ tuproq (yozish rejimi)
  • 6 - E, aka Enable, fall strobe ⇨ pin 11 Arduino
  • 7-10 - DB0-DB3, 8-bitli interfeysning past tartibli bitlari; ulanmagan
  • 11-14 - DB4-DB7, interfeysning yuqori bitlari ⇨ pinlar 5-2 Arduino
  • 15 - A, orqa yorug'lik uchun quvvat manbai ⇨ +5 V
  • 16 - K, orqa yorug'lik uchun zamin ⇨ GND

Ushbu displey, HD44780 kontrolleridagi boshqalar kabi, ikkita parallel interfeys variantini qo'llab-quvvatlaydi:

  • 8-bit, pinlar DB0-DB7, 1 bayt (8 bit) takt siklida uzatiladi
  • 4-bit, pinlar DB4-DB7, har bir soat siklida yarim bayt uzatiladi (4 bit)

8-bitli opsiyadan foydalanishning ma'nosi yo'q, chunki u ko'proq oyoqlarni talab qiladi va hali ham tezlikda o'sish yo'q: displeyning yangilanish tezligi sekundiga 10 martadan oshmaydi, shuning uchun biz hali ham ko'ra olmaymiz. tez-tez yangilanadigan ma'lumotlar. Shuning uchun biz DB0-DB3 pinlarini ulanmagan holda qoldiramiz.

Ekran ulangan va ma'lumotlarni qabul qilishga tayyor. Faqat Arduino uchun dastur yozish qoladi.

Dasturlash

Arduino-dan matn chiqarish uchun biz yuqorida aytib o'tgan suyuq kristalli kutubxonadan foydalanamiz.

Sensorni Arduino-da ishlatish uchun siz DHT11 kutubxonasini yuklab olishingiz va o'rnatishingiz kerak.


Kutubxonani bu yerdan yuklab olishingiz mumkin.


Kerakli kutubxonani yuklab olganimizdan so'ng, uni to'g'ri o'rnatishimiz kerak o'rnatish. Yuklab olingan fayllar quyidagi yo'lga ko'chirilishi kerak:

Disk C dastur fayllari Arduino kutubxonalari



Biz hamma narsani bajarganimizdan so'ng, biz eng muhim bosqichga, ya'ni dasturlashga o'tamiz.


/* LCD bilan ishlash uchun kutubxonani qo'shing */
#o'z ichiga oladi

/* LiquidCrystal sinf konstruktoridan foydalanib, LCD displey obyektini yarating
* 6 ta argument bilan. Argumentlar soni bo'yicha kutubxonaning o'zi aniqlaydi,
* 4 bitli interfeysdan foydalanishingiz kerak.
* Displey pinlari qaysi Arduino pinlariga ulanganligini ko'rsatamiz:
*RS, E, DB4, DB5, DB6, DB7
*/
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

O'rnatishni bekor qilish()
{
/* Displeyni ishga tushiring: 16 belgidan iborat 2 qator */
LCD. boshlash(16, 2);
/* iborani ko'rsatish */
LCD. print("HelpDuino'dan salom!");
}

void loop()
{
/* Kursorni 2-qatorning 1-ustuniga o'rnating. Raqamlash noldan boshlanadi
* Birinchi argument ustun raqamidir.
*/

LCD. setCursor(0, 1);
/* Arduino ishga tushirilgandan beri oʻtgan soniyalar sonini koʻrsating */
LCD. chop etish (millis()/1000);
}


Bu siz olishingiz kerak bo'lgan narsa, bu eng oddiy eskiz, u faqat 4 ta asosiy chiziqni o'z ichiga oladi, lekin siz buni aniqlab olishingiz va kerakli narsani yaratish uchun ushbu printsipdan foydalanishingiz mumkin!

Har bir radio havaskor, ma'lum miqdordagi oddiy uy qurilishi loyihalaridan so'ng, sensorlar va tugmalar yordamida ulug'vor narsalarni qurish maqsadiga keladi. Axir, ma'lumotlarni port monitorida emas, balki displeyda ko'rsatish ancha qiziqroq. Ammo keyin savol tug'iladi: qaysi displeyni tanlash kerak? Va umuman olganda, uni qanday ulash kerak, ulanish uchun nima kerak? Ushbu savollarga javoblar ushbu maqolada muhokama qilinadi.

LCD 1602

Ko'p displey variantlari orasida men HD4478 boshqaruvchisiga asoslangan LCD1602 displeyini alohida ta'kidlamoqchiman. Ushbu displey ikkita rangda mavjud: ko'k fonda oq harflar, sariq fonda qora harflar. LCD 1602-ni Arduino-ga ulash ham hech qanday muammo tug'dirmaydi, chunki o'rnatilgan kutubxona mavjud va qo'shimcha narsalarni yuklab olishning hojati yo'q. Displeylar nafaqat narxi, balki hajmi bo'yicha ham farqlanadi. Ko'pincha radio havaskorlari 16 x 2, ya'ni 16 belgidan iborat 2 qatordan foydalanadilar. Ammo 20 x 4 ham bor, bu erda 20 ta belgidan iborat 4 qator mavjud. O'lchovlar va rang lcd 1602 displeyini Ardunoga ulashda hech qanday rol o'ynamaydi, ular xuddi shu tarzda ulanadi. Ko'rish burchagi 35 daraja, displeyning javob vaqti 250 ms. -20 dan 70 darajagacha bo'lgan haroratlarda ishlashi mumkin. Ish paytida u ekran uchun 4 mA va orqa yorug'lik uchun 120 mA dan foydalanadi.

U qayerda ishlatiladi?

Ushbu displey nafaqat radio havaskorlari, balki yirik ishlab chiqaruvchilar orasida ham mashhur. Misol uchun, printerlar va qahva mashinalari ham LCD1602 dan foydalanadi. Bu uning arzonligi bilan bog'liq, bu displey Xitoy saytlarida 200-300 rublni tashkil qiladi. U erda sotib olishga arziydi, chunki bizning do'konlarimizda ushbu displey uchun belgilar juda yuqori.

Arduino-ga ulanish

LCD 1602-ni Arduino Nano va Uno-ga ulash hech qanday farq qilmaydi. Displey bilan ikkita rejimda ishlashingiz mumkin: 4 bit va 8. 8-bit bilan ishlashda ham past tartibli, ham yuqori tartibli bitlar, 4-bit bilan esa faqat past tartibli bitlar ishlatiladi. 8-bit bilan ishlashda alohida nuqta yo'q, chunki u ulanish uchun yana 4 ta kontaktni qo'shadi, bu tavsiya etilmaydi, chunki tezlik yuqori bo'lmaydi, displey yangilanishlari chegarasi soniyada 10 marta. Umuman olganda, lcd 1602-ni Arduino-ga ulash uchun juda ko'p simlar qo'llaniladi, bu ba'zi noqulayliklarni keltirib chiqaradi, ammo maxsus qalqonlar mavjud, ammo keyinroq bu haqda ko'proq ma'lumot beriladi. Suratda displeyning Arduino Uno-ga ulanishi ko'rsatilgan:

Kod namunasi:

#o'z ichiga oladi // Kerakli LiquidCrystal kutubxonasini qo'shing lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) bekor o'rnatish())( lcd.begin(16, 2); // Ekran o'lchamini o'rnating lcd.setCursor(0, 0); // Kursorni o'rnating boshiga 1 satr lcd.print("Salom, dunyo!"); // lcd.setCursor(0, 1) matnini chop eting // lcd.print("sayt")); ; // Matnni chop eting ) void loop ()( )

Kod nima qiladi? Birinchi qadam displey bilan ishlash uchun kutubxonani ulashdir. Yuqorida aytib o'tilganidek, ushbu kutubxona allaqachon Arduino IDE-ga kiritilgan va uni qo'shimcha ravishda yuklab olish va o'rnatish kerak emas. Keyinchalik, pinlarga ulangan kontaktlar aniqlanadi: mos ravishda RS, E, DB4, DB5, DB6, DB7. Keyin ekran o'lchami o'rnatiladi. Biz 16 ta belgi va 2 qatorli versiya bilan ishlayotganimiz uchun quyidagi qiymatlarni yozamiz. Biz kursorni birinchi qatorning boshiga qo'yamiz va birinchi matnimiz Salom dunyoni ko'rsatamiz. Keyin kursorni ikkinchi qatorga qo'ying va sayt nomini ko'rsating. Ana xolos! LCD 1602-ni Arduino Uno-ga ulash ko'rib chiqildi.

I2C nima va u nima uchun kerak?

Yuqorida aytib o'tilganidek, displeyni ulash juda ko'p kontaktlarni oladi. Misol uchun, bir nechta sensorlar va LCD displey bilan ishlashda 1602 pin etarli bo'lmasligi mumkin. Ko'pincha radio havaskorlari ko'p kontaktlarga ega bo'lmagan Uno yoki Nano versiyalaridan foydalanadilar. Keyin odamlar maxsus qalqonlar bilan chiqdilar. Masalan, I2C. Bu sizga displeyni faqat 4 ta pin bilan ulash imkonini beradi. Bu ikki barobar ko'p. I2C moduli alohida sotiladi, bu erda siz uni o'zingiz lehimlashingiz kerak va allaqachon LCD 1602 displeyiga lehimlangan.

I2C moduli yordamida ulanish

LCD 1602-ni Arduino Nano-ga I2C bilan ulash kam joy egallaydi, atigi 4 pin: tuproq, quvvat va 2 ma'lumot chiqishi. Biz quvvat va tuproqni mos ravishda Arduino-da 5V va GND ga ulaymiz. Qolgan ikkita kontaktni: SCL va SDA ni har qanday analog pinlarga ulaymiz. Suratda siz LCD 1602 ni I2C moduli bilan arduinoga ulash misolini ko'rishingiz mumkin:

Dastur kodi

Agar modulsiz displey bilan ishlash uchun faqat bitta kutubxonadan foydalanish kerak bo'lsa, modul bilan ishlash uchun ikkita kutubxona kerak bo'ladi. Ulardan biri allaqachon Arduino IDE - Wire-ga kiritilgan. Boshqa kutubxona, LiquidCrystal I2C, alohida yuklab olinishi va o'rnatilishi kerak. Kutubxonani Arduino-ga o'rnatish uchun yuklab olingan arxiv tarkibini asosiy kutubxonalar papkasiga yuklash kerak. I2C yordamida dastur kodi misoli:

#o'z ichiga oladi #o'z ichiga oladi LiquidCrystal_I2C lcd (0x27,16,2); // Displeyni bekor qilishni sozlash() ( lcd.init(); lcd.backlight(); // Displeyning orqa yorug‘ligini yoqish lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Kursorni ikkinchi qatorga va nol belgisiga o'rnating. lcd.setCursor(0, 1); // Arduino ishga tushirilgandan keyingi soniyalar sonini ko'rsatish lcd.print(millis()/1000); )

Ko'rib turganingizdek, kod deyarli bir xil.

O'z belgingizni qanday qo'shish kerak?

Ushbu displeylar bilan bog'liq muammo shundaki, kirill alifbosi va belgilar qo'llab-quvvatlanmaydi. Misol uchun, siz uni aks ettirishi uchun displeyga biron bir belgini yuklashingiz kerak. Buning uchun displey 7 tagacha o'z belgilaringizni yaratishga imkon beradi. Jadvalni tasavvur qiling:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Agar 0 bo'lsa - u erda hech narsa yo'q, agar 1 bo'lsa - bu bo'yalgan maydon. Yuqoridagi misolda siz "tabassumli tabassum" belgisining yaratilishini ko'rishingiz mumkin. Arduino-da misol dasturidan foydalanib, u quyidagicha ko'rinadi:

#o'z ichiga oladi #o'z ichiga oladi // Kerakli kutubxonani qo'shish // Tabassum belgisining bit niqobi bayt tabassum = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) bekor o'rnatish())( lcd.begin(16, 2); // Ekran o'lchamini o'rnating lcd.createChar(1, smile); // Belgilar raqamini yaratish 1 lcd.setCursor(0, 0); // Kursorni 1-qator boshiga o'rnating lcd.print("\1" // Smaykani chop etish (1-belgi) - "\1" ) void loop( ) ( )

Ko'rib turganingizdek, bitmask jadval bilan bir xil yaratilgan. Yaratilgandan so'ng, u displeyda o'zgaruvchi sifatida ko'rsatilishi mumkin. Xotirada faqat 7 ta belgini saqlashingiz mumkinligini unutmang. Aslida, bu etarli. Misol uchun, agar siz daraja belgisini ko'rsatishingiz kerak bo'lsa.

Displey ishlamasligi mumkin bo'lgan muammolar

Displey ishlamaydigan holatlar mavjud. Masalan, u yoqiladi, lekin belgilarni ko'rsatmaydi. Yoki u umuman yoqilmaydi. Birinchidan, pinlarni to'g'ri ulaganingizni tekshiring. Agar siz Arduino-ga I2C-siz LCD 1202 ulanishidan foydalangan bo'lsangiz, simlarga chigallashib qolish juda oson, bu esa displeyning to'g'ri ishlamasligiga olib kelishi mumkin. Bundan tashqari, displey kontrasti oshganligiga ishonch hosil qilishingiz kerak, chunki minimal kontrast bilan LCD 1602 yoqilgan yoki yoqilmaganligi ham ko'rinmaydi. Agar bu yordam bermasa, muammo kontaktlarning lehimlanishida bo'lishi mumkin, bu I2C modulidan foydalanganda. Displey ishlamasligining yana bir keng tarqalgan sababi I2C manzilining noto'g'ri sozlanishi. Haqiqat shundaki, ko'plab ishlab chiqaruvchilar bor va ular boshqa manzilni qo'yishlari mumkin, siz uni bu erda tuzatishingiz kerak:

LiquidCrystal_I2C lcd (0x27,16,2);

Qavslar ichida siz ikkita qiymatni ko'rishingiz mumkin, 0x27 va 16.2 (16.2 - displey o'lchami va 0x27 - I2C manzili). Ushbu qiymatlar o'rniga 0x37 yoki 0x3F ni o'rnatishga urinib ko'rishingiz mumkin. Xo'sh, yana bir sabab shunchaki noto'g'ri LCD 1602. Arduino uchun deyarli hamma narsa Xitoyda ishlab chiqarilganligini hisobga olsak, sotib olingan mahsulot nuqsonli emasligiga 100% ishonch hosil qila olmaysiz.

LCD 1602 ning afzalliklari va kamchiliklari

Keling, LCD 1602 displeyning ijobiy va salbiy tomonlarini ko'rib chiqaylik.

  • Narxi. Ushbu modulni Xitoy do'konlarida juda hamyonbop narxda sotib olish mumkin. Narxi 200-300 rubl. Ba'zan u hatto I2C moduli bilan birga sotiladi.
  • Ulanish oson. Ehtimol, bugungi kunda hech kim LCD 1602 ni I2C holda ulamaydi. Va ushbu modul bilan ulanish faqat 4 ta kontaktni oladi, simlarning "to'rlari" bo'lmaydi.
  • Dasturlash. Tayyor kutubxonalar tufayli ushbu modul bilan ishlash oson, barcha funktsiyalar allaqachon yozilgan. Va agar siz o'z belgingizni qo'shishingiz kerak bo'lsa, bu bir necha daqiqa davom etadi.
  • Minglab radio havaskorlar tomonidan foydalanish paytida hech qanday jiddiy kamchiliklar aniqlanmadi, faqat nuqsonli xaridlar holatlari mavjud, chunki displeylarning xitoycha versiyalari asosan ishlatiladi.

Ushbu maqola 1602-ni Arduino-ga ulashni ko'rib chiqdi, shuningdek, ushbu displey bilan ishlash uchun dasturlarga misollar keltirdi. Bu haqiqatan ham o'z toifasidagi eng yaxshilaridan biri bo'lib, uni minglab radio havaskorlari o'z loyihalari uchun tanlashlari bejiz emas!

Har bir elektron qurilma ekranga ega ekanligiga hamma uzoq vaqtdan beri o'rganib qolgan, uning yordamida u insonga har xil foydali ma'lumotlarni beradi. MP3 pleer ijro etilayotgan trekning nomini ko'rsatadi, kvadrokopter masofadan boshqarish pulti parvoz telemetriyasini ko'rsatadi, hatto kir yuvish mashinasi yuvishning oxirigacha bo'lgan vaqtni ko'rsatadi va smartfonda umuman shaxsiy kompyuterning butun ish stoli joylashgan! Katta ehtimol bilan keyingi qurilmangiz kichik displeydan ham foydalanishi mumkin :) Keling, oddiy elektron soat yasashga harakat qilaylik! Tablo sifatida esa biz oddiy va arzon belgili suyuq kristall displeydan foydalanamiz 1602. Mana, xuddi rasmdagidek: 16x2 ga qo'shimcha ravishda 20x4 belgili displey (har biri 20 belgidan iborat to'rt qator), shuningdek, grafik displey. 128x64 piksel o'lchamlari bilan juda mashhur hisoblanadi. Mana ular suratlarda:

1. LCD displey 1602 belgisini ulash

1602 displeyda 16 ta pin mavjud. Odatda ular chapdan o'ngga raqamlanadi, agar siz rasmdagi kabi qarasangiz. Ba'zan pinlar imzolanadi, masalan: DB0, DB1, EN va boshqalar. Va ba'zida ular shunchaki chiqish raqamini ko'rsatadilar. Har holda, pinlar ro'yxati har doim bir xil bo'ladi: 1 - "GND", tuproq (minus 2 - "Vcc", quvvat manbai + 3 - "VEE", 4 - "RS",; registrni tanlash "R/W", ma'lumotlarni uzatish yo'nalishi (yozish/o'qish), 7-14 - "DB0", "DB1", .., "DB7" - ma'lumotlar avtobusi; ); 16 - katodning orqa nuri (tuproq). VEE, RS liniyalari va to'rtta DB4, DB5, DB6, DB7 ma'lumotlar liniyalari kontrollerning raqamli chiqishlariga ulangan. Biz "R / W" chizig'ini kontrollerning "tuproq" ga ulaymiz (chunki biz faqat displey xotirasiga yozish funktsiyasiga muhtojmiz). Biz hozircha orqa yorug'likni ulamaymiz, o'ylaymanki, buni o'zingiz osongina aniqlashingiz mumkin :) Displeyni ulashning sxematik diagrammasi Arduino Uno
Tartib ko'rinishi
Har holda, belgi shaklida ham:
LCD displey 1602 1 2 4 6 11 12 13 14 15 16
Arduino Uno GND +5V 4 5 6 7 8 9 +5V GND

2. “Salom, dunyo!” dasturlash.

Har xil o'lchamdagi va turdagi LCD displeylar bilan ishlash uchun Arduino IDE muharriri maxsus kutubxonaga ega Suyuq kristall. Kutubxonani kiritish uchun dasturimizning birinchi qatoriga quyidagi ifodani yozamiz: #include Keyinchalik, displeyni ulash uchun qaysi Arduino pinlaridan foydalanganimizni ko'rsatishimiz kerak. Modulni ishga tushirishda biz ushbu ma'lumotni ko'rsatamiz: LiquidCrystal lcd (4, 5, 6, 7, 8, 9) Bu erda birinchi ikkita argument RS va EN pinlari, qolgan to'rttasi esa DB4-DB7 ma'lumotlar shinasidir; chiziqlar. Keyinchalik, "boshlash" buyrug'i yordamida displey hajmini belgilaymiz: lcd.begin(16, 2); Eslatib o‘tamiz, displeyimiz har biri 16 ta belgidan iborat bo‘lgan ikkita satrdan iborat. Va nihoyat, matnni chiqarish uchun bizga oddiy "chop etish" funksiyasi kerak. Ushbu funktsiyadan foydalangan holda ushbu mashhur iboraning chiqishi quyidagicha bo'ladi: lcd.print("Salom, dunyo!"); LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); lcd.print("Salom, dunyo!"); ) void loop())( ) Uni Arduino Uno-ga yuklang va displeyda nima sodir bo‘layotganini ko‘ring. Uchta asosiy holat bo'lishi mumkin 🙂 1) Displeyda “Salom, dunyo!” yozuvi paydo bo'ladi. Bu shuni anglatadiki, siz hamma narsani to'g'ri ulagansiz va kontrast qandaydir tarzda mo''jizaviy tarzda dastlab to'g'ri o'rnatilgan. Biz quvonamiz va keyingi bobga o'tamiz. 2) Displeyda bir qator qora to'rtburchaklar paydo bo'ladi - kontrastni sozlash kerak! Shuning uchun biz sxemaga tugmasi bo'lgan potansiyometrni qo'shdik. Displeyda aniq yozuv paydo bo'lguncha biz uni bir chetidan ikkinchisiga aylantiramiz. 3) Ikki qator qora to'rtburchaklar. Katta ehtimol bilan siz ulanishda xato qildingiz. Barcha simlarni uch marta tekshiring. Agar siz xato topmasangiz, mushukingizdan tekshirishni so'rang!

3. Soatni dasturlash

Endi displey to'g'ri ishlayapti, keling, oddiy qurilmamizni haqiqiy elektron soatga aylantirishga harakat qilaylik. Diqqat! Vaqtni ko'rsatish uchun bizga Time kutubxonasi kerak. Agar u hali o'rnatilmagan bo'lsa, arxivni havoladan yuklab olishingiz mumkin. Keling, uni bog'laymiz: #include Keyin biz "setTime" funksiyasidan foydalanib, joriy sana va vaqtni o'rnatamiz: setTime (23, 59, 59, 12, 31, 2015) bu erda hamma narsa aniq: soat, daqiqa, soniya, oy, kun, yil. Sanani ko'rsatish uchun biz bir qator funktsiyalardan foydalanamiz:
  • year() - bizga yilni qaytaradi;
  • month() - oy;
  • kun() - kun;
  • soat() - soat;
  • minute() - daqiqani qaytaradi;
  • second() - ikkinchi.
Endi bu haqiqatga e'tibor qaratsak. Agar biz odatiy sana yozuvidagi belgilar sonini hisoblasak: "12/31/2015 23:59:59", biz 19 ga ega bo'lamiz. Va bizda faqat 16 bor! Biroq, u bir qatorga to'g'ri kelmaydi. Muammoni boshqa foydali funktsiya - "setCursor" yordamida hal qilishingiz mumkin. Ushbu funktsiya kursorni kerakli joyga o'rnatadi. Masalan: lcd.setCursor(0,1); Kursorni ikkinchi qatorning boshiga qo'yadi. Kursor keyingi "chop etish" buyrug'i bilan matn chiqishi boshlanadigan belgining joylashuvidir. Keling, birinchi qatorda sanani, ikkinchisida vaqtni ko'rsatish uchun ushbu funktsiyadan foydalanamiz. Sana va vaqt ko'rsatilishi bilan hamma narsa aniq. Oddiy narsalar qoladi. Misol uchun, har bir displey to'ldirilgandan so'ng, biz uni "clear()" funktsiyasi bilan tozalaymiz: lcd.clear(); Bundan tashqari, biz uchun ma'lumotlarni soniyada bir martadan ko'proq ko'rsatish mantiqiy emas, shuning uchun biz ikki iteratsiya o'rtasida 1000 millisekundni pauza qilamiz. Shunday qilib, hamma narsani birlashtirib, biz quyidagi dasturni olamiz: #include #o'z ichiga oladi LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 07:00, o‘ninchi yanvar, 2015-yil) void loop())( lcd.clear( lcd.print("."); lcd.setCursor(hour()); (":"); lcd.print(":"); 🙂 Olingan bilimlarni mustahkamlash uchun men soatimizni to'liq budilnikga yangilashni maslahat beraman. Buning uchun bir nechta tugma va signal qoʻshish kifoya :)