Bibliotecă pentru lucrul cu ecrane LCD. Lucrul cu caractere LCD bazat pe controlerul HD44780

Adesea, un utilizator trebuie să primească unele informații vizuale de la un dispozitiv electronic. Dacă informațiile pot fi prezentate sub formă simbolică, atunci una dintre opțiunile de afișare este utilizarea indicatorilor cu cristale lichide simbolice (LCD sau LCD cu denumire străină). Astăzi vom vorbi despre indicatorii simbolici implementați pe baza controlorilor Hitachi HD44780, Samsung KS 0066 si asemanatoare.

Ca exemplu, voi lua în considerare LCD-ul Winstar Wh1602D-TMI-CT#, disponibil pentru realizarea experimentelor. Am menționat deja acest LCD într-un articol, ale cărui dezvoltări grafice le voi folosi astăzi.

Detaliat fișa cu date La LCD WINSTAR WH1602D-TMI-CT:

Categorie: Documente
Data: 22.03.2015

Un circuit LCD simplificat poate fi reprezentat după cum urmează:

Baza indicatorului este o matrice cu cristale lichide, prin aplicarea tensiunii elementului căreia, putem observa un punct pe ecran. În ecranele LCD cu caractere, această matrice constă dintr-un anumit număr de locuri familiare, care sunt grupate în rânduri și coloane. Dimensiunea locului familiar în pixeli este adesea de 5x8 pixeli. Marcarea indicatorului meu conține numerele 1602 și asta înseamnă că indicatorul meu poate afișa 2 rânduri a câte 16 caractere fiecare. Codificarea include, de asemenea: codul producătorului și tipul de indicator, prezența luminii de fundal, culoarea, tabelul de coduri și așa mai departe.

Sistem de desemnare a indicatorului WINSTAR

Afișați/ascundeți legenda

1. Cod producător: WINSTAR DISPLAY CO,LTD

2. Tipul indicatorului:

  • H- simbolic (sintetizarea semnelor)
  • C- culoare grafică cu matrice pasivă CSTN (ColorSTN)
  • X- grafic cu matrice TAB (Lipire automată cu bandă– cristalul este montat pe o bandă de substrat de poliamidă cu trei straturi)
  • O- grafic cu matrice COG (Cip Pe Sticlă- cristal pe sticlă)

3. Rezoluție orizontală:

  • numărul de caractere pe linie pentru indicatorii tipului de caractere
  • numărul de puncte orizontale pentru indicatorii de tip grafic

4. Rezoluție verticală:

  • numărul de linii pentru indicatorii de tip de caracter
  • numărul de puncte verticale pentru indicatorii de tip grafic

5. Cod model

  • Codifică dimensiunile geometrice utilizate de controler

6. Tip de iluminare de fundal:

  • N- fără lumină de fundal
  • B- electroluminiscent, culoare strălucitoare - albastru
  • D- electroluminiscent, culoare strălucitoare - verde
  • W- electroluminiscent, culoare strălucitoare - alb
  • Y— LED, culoare strălucitoare — galben-verde
  • A— LED, culoare strălucitoare — chihlimbar
  • R— LED, culoare strălucitoare — roșu
  • G— LED, culoare strălucitoare — verde
  • T— LED, culoare strălucitoare — alb
  • P- LED, culoare strălucitoare - albastru
  • F— lampă cu catod rece (CCFL), culoarea luminii — alb

7. Tehnologia de fabricație LCD

  • B- TN gri, pozitiv
  • N— TN, negativ
  • G- STN gri, pozitiv
  • Y— STN galben-verde, pozitiv
  • M— STN albastru, negativ
  • F— FSTN pozitiv
  • T- FSTN negativ
  • H- HTN gri, pozitiv
  • eu— HTN negru, negativ
  • TN (Twisted Nematic - Structura cristalină este de tip spirală
  • STN (Super Twisted Nematic) - matrice formată din elemente LCD cu transparență variabilă
  • FSTN (Film Compensat STN) — STN-matrice cu compensare film. Tehnologia permite un unghi de vizualizare crescut
  • HTN (Nematic răsucit homeotrop) - afișajele se bazează pe o răsucire moleculară mai puternică (de obicei 110°) în comparație cu nematica răsucită TN convențională (90°). Oferă un unghi larg de vizualizare și un contrast îmbunătățit. Caracteristicile sunt superioare tehnologiei STN. Tensiunea de funcționare scăzută (2,5V și cel mai mic cost dintre nematici fac ca utilizarea lor să fie avantajoasă în dispozitivele portabile autonome).

8. Polarizator, unghi de vizualizare, interval de temperatură de funcționare

  • A— RF, 6:00, N.T.
  • D- RF, ora 12:00, N.T.
  • G- RF, 6:00, W.T.
  • J— RF, 12:00, W.T.
  • B— TF, 6:00, N.T.
  • E— TF, ora 12:00, N.T.
  • H— TF, 6:00, W.T.
  • K— TF, 12:00, W.T.
  • C— TM, 6:00, N.T.
  • F— TM, 12:00, N.T.
  • eu— TM, 6:00, W.T.
  • L- TM, 12:00, W.T.
  • RF (LCD reflectorizant) - Indicator LCD care funcționează numai pe reflectarea luminii. Imaginea este vizibilă numai atunci când există suficientă lumină ambientală.
  • TF - (LCD transflexiv) - un afișaj cu cristale lichide care reflectă atât lumina, cât și o emite (luminează de la sine).
  • TM (transmisiv LCD) - lumina intră prin LCD din partea cu iluminare de fundal. Are o calitate înaltă a imaginii în interior și, de obicei, foarte slabă (ecran negru) în lumina soarelui.
  • N.T.— domeniul normal de temperatură 0...+50ºC W.T.— interval extins de temperatură -20...+70ºC

9. Opțiuni suplimentare

Primele două personaje sunt generatorul de caractere:

  • CT./C.P.— latină/chirilic
  • E.P./ET/E.E./RO/E.C./ES— latină/europeană
  • J.P./JT/JS/JN- Latină/Japoneză
  • HP/H.S.— ebraică

3-4 caractere:

  • T- compensarea temperaturii
  • E sau EZ— marginea BL (LED-urile de iluminare din spate sunt situate în jurul perimetrului). Este posibil să lipsească și simbolul.
  • K sau LIVRE— eco BL (LED-urile sunt amplasate uniform în spatele ecranului)
  • V- sursa de tensiune negativa incorporata
  • N- fără sursă de tensiune negativă încorporată

10. Informații suplimentare:

# - compatibilitate cu standardul RoHS

Notă(producător de cip de control):

  • xS - Samsung
  • xP - Sunplus
  • xT - Sitronix
  • xE - Epson
  • xU - UMC

Folosind acest sistem de notație, am aflat că am în mâini un indicator de sinteză a semnelor Winstar, afișând caractere pe 16 coloane și 2 rânduri, folosind un controler KS 0066 sau echivalentul acestuia, cu iluminare LED albă în jurul perimetrului, cu negativ albastru transmisivă-matrice, unghi de vizualizare „la ora 6”, interval de temperatură de funcționare -20...+70ºC cu un generator de caractere, inclusiv chirilic și compatibil cu standardul RoHS(nu conține componente dăunătoare, ceea ce aparent înseamnă că lipirea fără plumb a fost folosită în timpul asamblarii).

Indicatori bazați pe controler HD44780, KS066U

Funcționarea indicatorului este controlată de un controler încorporat. Controlerul este de obicei Hitachi HD44780, Samsung KS0066U sau numeroșii lor analogi și clone. Indicatorii produși de compania rusă MELT folosesc un controler PCF8576.

Controlerul are celule de memorie pe un singur octet ( DDRAM), al cărui conținut este efectiv afișat pe ecran conform tabelului înregistrat în CGRAM. De obicei, există mai multe celule de memorie decât simbolurile de pe LCD, așa că trebuie să luați în considerare adresarea simbolurilor fișa cu date. Trebuie să scriem codul simbolului necesar în poziția necesară, iar controlerul va face singur restul.

Pentru a selecta o poziție, există un cursor virtual controlat de comenzi (numărul celulei de memorie curente, AC). Se poate face vizibil. În mod implicit, când scrieți un caracter într-o celulă, cursorul se deplasează înainte cu o poziție.

Tabelul de coduri de indicator constă de obicei din trei părți:

  • 0×00-0×07 - generator de caractere descărcabil, personaje create de tine
  • 0×20-0xFF - coduri ASCII, set de caractere standard și alfabet englezesc
  • 0xA0-0xFF - simboluri ale alfabetelor naționale și altele, cu omiterea caracterelor care se potrivesc cu cele englezești.

Afișați/ascundeți tabelul de coduri, cu alfabet chirilic

Exemplu: codul hexazecimal 0x4A se potrivește cu litera J, cod 0xB6 - litera și.

Cei mai semnificativi patru biți determină coloana caracterului selectat din tabel, cei mai puțin semnificativi determină rândul. Vă puteți crea propriul tabel de simboluri scriindu-l CGRAM. Fiecare caracter necesită 5 octeți (un octet pe coloană). Cei din fiecare octet definesc pixelii semnificativi. De exemplu, pentru a codifica numerele pixel cu pixel 8 veți avea nevoie de următoarea secvență: 0x6c, 0×92.0×92.0×92.0x6c.

Convertor chirilic

Pentru a converti textul care conține caractere chirilice în coduri corespunzătoare tabelului de mai sus, introduceți textul necesar în câmpul de text. Rezultatul obținut mai jos poate fi copiat și utilizat în programele dumneavoastră pentru a afișa acest text pe LCD.

Text original:

Text codificat:

Tabelul de coduri de comandă:

D7 D6 D5 D4 D3 D2 D1 D0 Scop
0 0 0 0 0 0 0 1 Curățarea ecranului, A.C.=0, adresare A.C. pe DDRAM
0 0 0 0 0 0 1 A.C.=0, adresându-se către DDRAM, turele sunt șterse, începutul liniei este adresat la început DDRAM
0 0 0 0 0 1 I/DSSelectează direcția de deplasare a cursorului sau a ecranului
0 0 0 0 1 DCBSelectați modul de afișare
0 0 0 1 S/CR/LComanda cursor/deplasare ecran
0 0 1 D.L.NFDefinirea parametrilor de scanare și a lățimii magistralei de date
0 1 AC5AC4AC3AC2AC1AC0Atribuire la contor A.C. adrese din regiune CGRAM
1 AC6AC5AC4AC3AC2AC1AC0Atribuire la contor A.C. adrese din regiune DDRAM

Tabel cu valorile steagului:

Steag Sens
I/DModul offset contor adrese AC, 0 - scădere, 1 - creștere
SIndicatorul modului de schimbare a conținutului ecranului. 0 - ecranul nu este deplasat, 1 - după scrierea următorului cod pe DDRAM, ecranul este deplasat în direcția determinată de steag-ul I/D: 0 - la dreapta, 1 - la stânga. Shift nu modifică conținutul DDRAM. Sunt modificate doar indicatoarele interne către locația începutului vizibil al unei linii în DDRAM
S/CComanda Flag care, împreună cu steag-ul R/L, realizează operația de deplasare a conținutului ecranului (la fel ca în cazul precedent, fără modificări în DDRAM) sau a cursorului. Definește obiectul de deplasare: 0 — cursorul este deplasat, 1 — ecranul este deplasat
R/LComanda flag care, împreună cu steag-ul S/C, realizează operația de deplasare a ecranului sau a cursorului. Specifică direcția de schimbare: 0 — stânga, 1 — dreapta
D/LFlag care definește lățimea magistralei de date: 0 - 4 biți, 1 - 8 biți
NModul de scanare a imaginii pe LCD: 0 - o linie, 1 - două linii
FDimensiunea matricei de caractere: 0 - 5×8 puncte, 1 - 5×10 puncte
DPrezența imaginii: 0 - dezactivat, 1 - activat
CCursor de subliniere: 0 - dezactivat, 1 - activat
BCursorul sub forma unui loc familiar pâlpâit: 0 - oprit, 1 - pornit

Alocarea pinului controlerului:

  • DB0-DB7— responsabil pentru datele de intrare/ieșire
  • R.S.— un nivel ridicat înseamnă că semnalul la ieșirile DB0-DB7 este date, un nivel scăzut înseamnă o comandă
  • W/R— determină direcția datelor (citire/scriere). Deoarece operațiunea de citire a datelor din indicator este de obicei nerevendicată, puteți seta în mod constant această intrare la un nivel scăzut
  • E— un impuls cu o durată de cel puțin 500 ms pe acest pin determină semnalul pentru citirea/scrierea datelor de la pinii DB0-DB7, RS și W/R
  • V 0— folosit pentru a seta contrastul imaginii
  • A, K- alimentare cu iluminare din spate (anod și catod), dacă este disponibilă
  • V CCȘi GND- alimentare pentru indicator LCD

Pentru a controla indicatorul LCD, sunt necesari 6 sau 10 pini, în funcție de modul de schimb de date pe 4 sau 8 biți. Pentru a reduce numărul necesar de pini pentru microcontroler, puteți opera în modul pe 4 biți. În acest caz, la concluzii DB4-DB7 indicator, cei mai semnificativi patru biți de date/comandă vor fi transmisi mai întâi, apoi cei mai puțin semnificativi patru biți. concluzii DB0-DB3 va rămâne nefolosit.

Un controler controlează un număr limitat de caractere. Pe placa indicatoare pot exista 1, 2, 4, 8 controlere și, eventual, mai multe.

Documentația controlerului:

Controlor Samsung KS0066U

Controlor Hitachi HD44780

Categorie: Documente
Data: 21.03.2015

versiune tradusă în rusă:

Categorie: Documente
Data: 21.03.2015

Indicatoarele de la diferiți producători sunt adesea compatibile și interschimbabile, dar pot diferi ca dimensiuni, montaj, contacte etc. Prin urmare, atunci când alegeți o nouă dezvoltare și căutați un înlocuitor, vă rugăm să consultați cataloagele producătorilor:

Tabel de compatibilitate pentru indicatoarele LCD cu caractere de la diferiți producători:

Afișați/ascundeți tabelul

Tip Winstar TOPI Viziunea datelor Bolymin asemănător soarelui Microtips Wintek Imperiu
8×2WH0802AMT-8S2ADV-0802BC0802ASC0802AMTC-0802XWM-C0802MAC082A
10×1MT-10S1
12×2WH1202ABC1202A
16×1WH1601ADV-16100BC1601A1SC1601AMTC-16100XWM-C1601MAC161A
WH1601BBC1601BSC1601B
WH1601LMT-16S1ADV-16100BC1601D1SC1601DMTC-16101XWM-C1601QAC161B
DV-16120AC161J
16×2WH1602LMT-16S2RDV-16210BC1602ESC1602EMTC-16201XWM-C1602QAC162E
SC1602N
WH1602DMT-16S2JDV-16230BC1602B1SC1602BMTC-16202XWM-C1602NAC162A
DV-16235MTC-16203X
WH1602CMT-16S2DDV-16236BC1602DSC1602D
WH1602AMT-16S2HDV-16244BC1602HSC1602CMTC-16204XWM-C1602K
WH1602BDV-16252BC1602ASC1602AMTC-16205BWM-C1602M
WH1602MDV-16257BC1602FSC81602F
DV-16275
DV-16276
16×4WH1604AMT-16S4ADV-16400BC1604A1SC1604AMTC-16400XWM-C1604MAC164A
WH1604B
20×1DV-20100
MT-20S1L
20×2WH2002AMT-20S2ADV-20200BC2002ASC2002AMTC-20200XWM-C2002MAC202A
WH2002M
WH2002LMT-20S2MDV-20210BC2002BSC2002CMTC-20201XWM-C2002PAC202B
DV-20211AC202D
DV-20220
DV-20206-1
20×4WH2004AMT-20S4ADV-20400BC2004ASC2004AMTC-20400XWM-C2004PAC204A
SC2004G
SC2004C
WH2004LDV-20410BC2004BMTC-20401XWM-C2004RAC204B
24×1MT-24S1L
24×2WH2402AMT-24S2ADV-24200BC2402ASC2402AMTC-24200XWM-C2402PAC242A
MT-24S2L
40×2WH4002ADV-40200BC4002ASC4002AMTC-40200XWM-C4002PAC402A
40×4WH4004ADV40400BC4004ASC4004AMTC-40400XWM-C4004MAC404A
SC4004C

Putere, reglare contrast și iluminare de fundal

Trebuie să fiți atenți la polaritatea conexiunii de alimentare la indicatorul LCD și, de asemenea, să vă asigurați că tensiunea de alimentare este în intervalul +4,5...5,5 V. Neatenția la aceste puncte poate duce la defectarea indicatorului!

Indicatoarele LCD vă permit să reglați contrastul folosind un divizor de tensiune. Înainte de a trimite date către indicator, trebuie să vă asigurați că tensiunea de control al contrastului este în domeniul de funcționare. Valorile rezistoarelor diferă între diferiții producători de indicatoare LCD. Unele modele de indicatori au locuri pe placă pentru instalarea unui astfel de divizor și este suficient să lipiți acolo valorile necesare rezistenței. Contrastul indicatorului depinde de unghiul de vizualizare. Dacă indicatorul este „la ora douăsprezece”, atunci trebuie să vă uitați la un astfel de indicator în așa fel încât să fie sub nivelul ochilor, dacă „ora zero”, atunci este destinat observării la nivelul ochilor ( perpendicular pe planul ecranului). Dacă indicatorul este „la ora șase”, atunci ar trebui să fie utilizat atunci când se observă deasupra nivelului ochilor. Acest punct trebuie luat în considerare la cumpărare.

Putere de iluminare de fundal

Dacă indicatorul are lumină de fundal, pinii pentru acesta sunt de obicei amplasați separat. Este necesar să-l conectați la sursa de alimentare, setând curentul nominal folosind un rezistor extern R (vezi. fișa cu date). Pentru indicatorul meu, tensiunea nominală la anod ar trebui să fie de 3,5 V și curentul de 40 mA. Pe baza acestui fapt, valoarea rezistenței de limitare a curentului este:

Unii producători au un loc pe placa indicatoare pentru instalarea unui astfel de rezistor, trebuie să lipiți valoarea corespunzătoare, să închideți jumperul și lumina de fundal va primi energie de la aceeași linie ca și indicatorul.

Cum apreciați această publicație?

Și analogii săi, de exemplu, cum ar fi S6A0069, KS0066 etc. Acești indicatori LCD sunt bazați pe text și pot afișa simboluri text și pseudo-grafice. Dimensiunea lor de familiaritate este de 5x8 pixeli, indicatoarele LCD vin în diferite dimensiuni și cu rezoluții diferite, de exemplu: 8 caractere pe 2 linii - 8x2, 16x2, 20x2, 40x2, 16x4, 20x4 etc.

În această lecție ne vom uita la conectarea pe 4 biți a unui indicator LCD la un microcontroler AVR și scrierea unui program în fișierul .

Acești indicatori LCD au următoarele concluzii:
VSS – Gnd (putere minus)
VDD – Vcc (sursa de alimentare 5v)
VO – Setarea contrastului matricei LCD
Linie de control RS – RS
RW (Read/Write) – linie de control RW
E (Activare) – linia de control E
Linie de date D0 – D0 (Nu este utilizată în modul pe 4 biți)
Linie de date D1 – D1 (Nu este utilizată în modul pe 4 biți)
Linie de date D2 – D2 (Nu este utilizată în modul pe 4 biți)
Linie de date D3 – D3 (Nu este utilizată în modul pe 4 biți)
D4 – Linia de date D4
D5 – Linia de date D5
D6 – Linia de date D6
Linie de date D7 – D7
A – Anod LED cu iluminare de fundal a afișajului
K – Afișaj catod LED iluminat din spate

Atenţie! Diferiți indicatori LCD au propriile locații ale pinului, puteți afla locațiile exacte ale pinului în documentația tehnică (Fișa de date) pentru indicatorul LCD.

Pinul indicator LCD VO controlează contrastul matricei LCD în funcție de tensiunea de alimentare furnizată acestui pin. Dacă nu este nevoie să citiți informații de pe afișaj, pinul RW este conectat la negativul sursei de alimentare.

Exemplu de conexiune pe 4 biți a unui indicator LCD la un microcontroler Attiny2313:

Rezistorul substring RV1 reglează luminozitatea indicatorului LCD.
În BASCOM-AVR, înainte de a opera indicatorul LCD, trebuie să indicați ce pini de afișaj sunt conectați la ce porturi ale microcontrolerului, pentru aceasta există comanda Config Lcdpin, un exemplu de utilizare a acestei comenzi: Config Lcdpin = Pin, Db4 = Portb .4, Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.3, Rs = Portb.2 și, de asemenea, specificați rezoluția indicatorului LCD cu comanda Config Lcd, exemplu: Config Lcd = 16 * 2 și inițializați indicatorul LCD cu comanda Initlcd, după care indicatorul LCD va fi gata de utilizare.

Iată o listă de comenzi pentru lucrul cu indicatorul LCD în BASCOM-AVR:
ConfigLcdpin– Setarea configurației pin a indicatorului LCD și a microcontrolerului
Config Lcd– Setarea rezoluției indicatorului LCD
Initlcd– Inițializarea indicatorului LCD
Lcd– Afișarea textului pe indicatorul LCD, exemplu: LCD „Bună ziua”
Cls– Curăţarea indicatorului LCD
Localizay,X– Plasați cursorul în pozițiile x, y
Linia de jos– Mutați cursorul pe linia de jos
Linia superioară– Mutați cursorul pe linia de sus
Shiftlcd dreapta– Mutați imaginea indicatorului LCD în locul potrivit
Shiftlcd Stânga– Mutați imaginea indicatorului LCD în partea stângă
Cursorul dezactivat- Dezactivați cursorul
Cursor activat– Activați cursorul
Cursorul Pornit Clipește– Activați pâlpâirea cursorului
Cursorul pe Noblink– Dezactivați pâlpâirea cursorului

Atenţie! Când utilizați un indicator LCD cu rezoluție 8x2 în BASCOM-AVR, configurați-l ca 16x2, deoarece BASCOM-AVR nu are o configurație pentru un indicator LCD cu rezoluție 8x2.

Exemplu de program în BASCOM-AVR pentru schema de mai sus:

$regfile = "attiny2313.dat" $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb .2 Config Lcd = 16 * 2 Initlcd Cls Locate 1 , 1 Lcd "Bună", Lowerline Lcd "lume!" Sfârşit

Iată cum funcționează totul cu un indicator LCD 8x2:

Biți de siguranță pentru firmware:

Puteți descărca fișierele pentru lecție (proiect în , sursă, firmware) de mai jos

  • Modulul FC-113 se bazează pe cipul PCF8574T, care este un registru de deplasare de 8 biți - un „expander” de intrare-ieșire pentru magistrala serială I2C. În figură, microcircuitul este desemnat DD1.
  • R1 este un rezistor de tăiere pentru reglarea contrastului afișajului LCD.
  • Jumperul J1 este folosit pentru a porni iluminarea de fundal a afișajului.
  • Pinii 1...16 sunt utilizați pentru a conecta modulul la pinii afișajului LCD.
  • Padurile de contact A1...A3 sunt necesare pentru a schimba adresa I2C a dispozitivului. Prin lipirea jumperilor corespunzătoare, puteți schimba adresa dispozitivului. Tabelul arată corespondența adreselor și a jumperilor: „0” corespunde unui circuit deschis, „1” unui jumper instalat. În mod implicit, toate cele 3 jumperi sunt deschise și adresa dispozitivului 0x27.

2 Schema de conectare pentru afișajul LCD la Arduino prin protocolul I2C

Modulul este conectat la Arduino într-un mod standard pentru magistrala I2C: pinul SDA al modulului este conectat la portul analogic A4, pinul SCL este conectat la portul analogic A5 al Arduino. Modulul este alimentat de la +5 V de la Arduino. Modulul în sine este conectat prin pinii 1…16 la pinii corespunzători 1…16 de pe afișajul LCD.


3 Biblioteca pentru munca prin protocolul I2C

Acum avem nevoie de o bibliotecă pentru a lucra cu LCD prin interfața I2C. Puteți folosi, de exemplu, acesta (link în linia „Descărcați codul de exemplu și biblioteca”).

Arhiva descărcată LiquidCrystal_I2Cv1-1.rar dezarhivați într-un folder \biblioteci\, care se află în directorul IDE Arduino.

Biblioteca acceptă un set de funcții standard pentru ecranele LCD:

FuncţieScop
Cristal lichid() creează o variabilă de tip LiquidCrystal și acceptă parametrii de conectare a afișajului (numerele de pin);
ÎNCEPE() inițializarea afișajului LCD, setarea parametrilor (număr de linii și caractere);
clar() ștergerea ecranului și readucerea cursorului la poziția de pornire;
Acasă() readuceți cursorul în poziția de pornire;
setCursor() setarea cursorului într-o poziție dată;
scrie() afișează simbolul pe ecranul LCD;
imprimare() afișează text pe ecranul LCD;
cursor() afișează cursorul, adică sublinierea sub locul următorului caracter;
noCursor() ascunde cursorul;
clipi() cursorul clipește;
nu Blink() Anulează clipirea;
noDisplay() oprirea afișajului în timp ce salvează toate informațiile afișate;
afişa() pornirea afișajului în timp ce salvează toate informațiile afișate;
scrollDisplayLeft() derulați conținutul afișajului 1 poziție spre stânga;
scrollDisplayRight() derulați conținutul afișajului 1 poziție spre dreapta;
autoscroll() activați derularea automată;
noAutoscroll() dezactivați derularea automată;
de la stânga la dreapta() setează direcția textului de la stânga la dreapta;
de la dreapta la stanga() direcția textului de la dreapta la stânga;
createChar() creează un caracter personalizat pentru ecranul LCD.

4 Schiță pentru afișarea textului la ecranul LCD prin magistrala I2C

Să deschidem proba: Exemple de fișiere LiquidCrystal_I2C CustomCharsși o vom relua puțin. Vom afișa un mesaj la sfârșitul căruia va apărea un simbol intermitent. Comentariile la cod comentează toate nuanțele schiței.

#include // include biblioteca Wire #include // conectează biblioteca LCD #define printByte(args) write(args); // uint8_t heart = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // mască de biți a simbolului „inima” LiquidCrystal_I2C lcd(0x27, 16, 2); // Setați adresa 0x27 pentru afișajul LCD 16x2 void setup() ( lcd.init(); // inițializarea afișajului LCD lcd.backlight(); // pornește iluminarea de fundal a afișajului lcd.createChar(3, heart); // creează un simbol „inimă” în celula de memorie 3 lcd.home(); // plasează cursorul în colțul din stânga sus, în poziția (0,0) lcd.!"); // imprimă o linie de text lcd.setCursor(0, 1); // mută cursorul pe linia 2, caracter 1 lcd.print( " i "); // imprimă mesajul pe linia 2 lcd.printByte(3) // imprimă simbolul „inima” situat în celula a 3-a lcd.print(" Arduino "); } void loop() (// clipește ultimul caracter lcd.setCursor(13, 1); // muta cursorul pe linia 2, caracterul 1 lcd.print("\t"); întârziere (500); lcd.setCursor(13, 1); // muta cursorul pe linia 2, caracterul 1 lcd.print(" "); întârziere (500); }

Apropo, caracterele scrise de comanda lcd.createChar();, rămân în memoria afișajului chiar și după oprirea alimentării, deoarece scris pe afișarea ROM 1602.

5 Creează-ți propriile simboluri pentru display LCD

Să aruncăm o privire mai atentă la problema creării propriilor simboluri pentru ecranele LCD. Fiecare caracter de pe ecran este format din 35 de puncte: 5 lățime și 7 înalte (+1 linie de rezervă pentru subliniere). În rândul 6 din schița de mai sus definim o matrice de 7 numere: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Să convertim numerele hexazecimale în binare: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Aceste numere nu sunt altceva decât măști de biți pentru fiecare dintre cele 7 linii ale simbolului, unde „0” indică un punct luminos și „1” un punct întunecat. De exemplu, un simbol de inimă specificat ca o mască de biți va apărea pe ecran, așa cum se arată în figură.

6 Control ecran LCD prin magistrala I2C

Să încărcăm schița pe Arduino. Pe ecran va apărea inscripția pe care am specificat-o cu un cursor care clipește la sfârșit.


7 Ce se află în spate Autobuz I2C

Ca bonus, să ne uităm la diagrama de timp pentru afișarea caracterelor latine „A”, „B” și „C” pe afișajul LCD. Aceste caractere sunt stocate în ROM-ul afișajului și sunt afișate pe ecran pur și simplu prin transmiterea adreselor lor pe afișaj. Diagrama este preluată de la pinii RS, RW, E, D4, D5, D6 și D7 ai afișajului, adică. deja după convertorul FC-113 „I2C paralel bus”. Putem spune că ne scufundăm puțin mai adânc în hardware.


Diagrama de timp a ieșirii caracterelor latine „A”, „B” și „C” pe afișajul LCD 1602

Diagrama arată că caracterele care se află în ROM-ul de afișare (vezi p. 11 a fișei de date, linkul de mai jos) sunt transmise în două nibbles, primul dintre care determină numărul coloanei tabelului, iar al doilea - numărul rândului. În acest caz, datele sunt „blocate” la marginea semnalului pe linie E(Activare) și linia R.S.(Selectare înregistrare) este într-o stare logică, ceea ce înseamnă că datele sunt transferate. O stare scăzută pe linia RS înseamnă că sunt trimise instrucțiuni, ceea ce vedem înainte ca fiecare caracter să fie transmis. În acest caz, se transmite codul de instrucțiuni pentru întoarcerea căruciorului în poziția (0, 0) a afișajului LCD, care poate fi aflat și studiind descrierea tehnică a afișajului.

Și încă un exemplu. Această diagramă de timp arată ieșirea simbolului inimii pe afișajul LCD.


Din nou, primele două impulsuri Permite respectați instrucțiunile Acasă()(0000 0010 2) - readuceți căruciorul în poziția (0; 0), iar al doilea - ieșire pe afișajul LCD stocat în celula de memorie 3 10 (0000 0011 2) simbolul „Inimă” (instrucțiune lcd.createChar(3, inima); schiță).

În acest articol vă voi spune cum să utilizați o bibliotecă destul de comună pentru a o gestiona LCD afișaj bazat pe controler HD44780și afișați informații despre acesta. Biblioteca constă din două fișiere lcd_lib.h și lcd_lib.c pentru utilizare cu un afișaj conectat printr-o magistrală de date pe patru biți. Fișierul antet specifică setările pentru conectarea afișajului la controler, care pot fi modificate la discreția dvs., precum și variabilele și funcțiile.

Mai jos sunt funcțiile de bază de control și afișare a informațiilor pe LCD.

lcd_com– trimiterea unei comenzi pe LCD

Exemplu:
lcd_com(0x01); // șterge afișajul
lcd_com(0x38); // interfață 8 biți 2 linii

lcd_dat– scoateți un caracter în poziția curentă

Exemplu:
lcd_dat("U"); // scoate caracterul „U”
lcd_dat(0xB0); // scoate simbolul „U” (În conformitate cu tabelul cu simboluri afișate)

lcd_init– Inițializare LCD

Iată un exemplu de secvență de inițializare LCD utilizată pe scară largă: 0x38, 0xOC, 0x06.
0x38 setează modul de afișare a 2 linii cu o matrice de 5 x 8 pixeli și de lucru cu o magistrală de date de 8 biți;
0xOC permite afișarea modulului LCD pe ecran, fără a afișa cursoare;
0x06 setează modul pentru a muta automat cursorul de la stânga la dreapta după ce fiecare caracter este afișat.

lcd_clr– Curățare LCD

lcd_home– mută cursorul la început

lcd_string– scoateți un șir cu lungimea specificată în poziția curentă

Exemplu: lcd_string("TEST",4); // scoateți șirul TEST de 4 caractere

lcd_gotoxy– mută cursorul în poziția specificată

Exemplu: lcd_gotoxy(12, 1); // cursorul în poziţia a treisprezecea cifră a celei de-a doua rânduri

copy_string_to_lcd– scoateți un șir din memoria flash într-o poziție de afișare specificată

Exemplu: copy_string_to_lcd("TEST",4,0); // scoateți șirul TEST la a cincea cifră a primei linii

lcd_definechar– scrie o imagine de caracter personalizată în memoria afișajului

Pentru a vă afișa propriul simbol pe ecran, trebuie să cunoașteți codul simbolului, să scrieți acest cod în memoria programului microcontrolerului (PROGMEM), apoi să îl plasați într-o celulă de memorie LCD liberă (CGRAM) și să îl afișați pe ecran folosind funcţie lcd_dat().

8 caractere redefinite sunt disponibile pentru programare în modul cu o matrice 5x7 de puncte și 4 cu o matrice 5x10 (în modul 5x10, caracterele redefinite sunt adresate prin coduri DDRAM pe rând: 0x00, 0x02, 0x04, 0x06). Pentru a codifica matricea, se folosesc octeți „stivuiți” orizontal, dintre care cei cinci biți mai puțin semnificativi poartă informații despre model (cu 1 (unul) înseamnă că segmentul va fi pornit), al 4-lea bit din fiecare dintre cei 8 ( sau 11 în modul 5 x 10) octeți ai matricei determină coloana din stânga a simbolului, iar 0 - cea din dreapta. Cei mai semnificativi trei biți nu sunt utilizați și nici cei mai semnificativi cinci octeți care constituie zona completă a matricei de caractere (16 octeți) în modul 5x10 (rețineți că matricea de caractere programabilă permite utilizarea înălțimii întregii rânduri (8 linii pentru modul 5x7). și 11 linii pentru modul 5x10), adică puteți plasa puncte în zona cursorului de subliniere).

Este mai convenabil să creați un simbol în format binar, de exemplu, să creăm un simbol dreptunghi, codul va fi astfel:

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

lcd_shift_right– mută imaginea cu numărul specificat de caractere la dreapta

lcd_shift_Left– mută imaginea cu numărul specificat de caractere spre stânga

lcd_cursor_on– activează sublinierea cursorului

lcd_cursor_blink– pornește cursorul care clipește

lcd_cursor_off– dezactivează cursorul

lcd_blank– oprește imaginea, dar nu o șterge

lcd_visible– include o imagine

lcd_cursor_left– mută cursorul cu numărul specificat de caractere la stânga

lcd_cursor_right– mută cursorul cu numărul specificat de caractere la dreapta

lcd_progress_bar- vă permite să afișați o scară dinamică, vom vorbi despre această funcție mai detaliat folosind un exemplu practic;

lcd_num_to_str- vă permite să afișați o variabilă de până la 4 cifre

Exemplu: void lcd_num_to_str(ADC, 4); // Ieșire variabilă ADC pe 4 biți

Să facem un proiect „Voltmetru analogic” în care informațiile despre tensiunea măsurată vor fi afișate pe ecran sub forma unei scale dinamice orizontale. Tensiunea măsurată este furnizată la intrarea ADC0, maxim 5V. fără a folosi un separator. Pentru acest proiect folosim microcontrolerul atmega8, care este tactat de la un oscilator intern cu o frecvență de 8 MHz. Conectăm afișajul printr-o magistrală pe patru biți în conformitate cu setările din fișierul lcd_lib.h. Când creăm un proiect în AVRSTUDIO, copiem 2 fișiere de bibliotecă în folderul nostru de proiect și adăugăm aceste fișiere (lcd_lib.c și lcd_lib.h) în arborele proiectului.

Funcția este responsabilă pentru afișarea scalei dinamice lcd_progress_bar(uint8_t progres, uint8_t maxprogress, uint8_t lungime), în funcție de starea variabilelor acestei funcții, scara își schimbă nivelul, progres - nivel de la 0 la 255, maxprogress - nivelul maxim este limitat la un număr de la 0 la 255, lungimea - lungimea scalei de la 0 la 255. 16 celule (în funcție de tipul de afișare). Deoarece la tensiunea maximă de intrare valoarea ADC este 1024, împărțim această valoare la 4 și o atribuim variabilei „u” și folosim variabila „u” în funcția de ieșire pe scară dinamică. progres().

Postez mai jos textul integral al programului:

//******Utilizarea bibliotecilor pentru lucrul cu LCD HD44780***** #include #include #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
); nesemnat char u; //************************************************ ******** void progres(void) // funcția de ieșire la scară ( lcd_gotoxy(0, 0); lcd_string("0......05......1",16); lcd_gotoxy (0, 1); lcd_progress_bar(u, 255, 16) //********************************); ************************* int main(void) ( /***Configurare 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; } }

Pentru a lucra cu afișaje grafice cu caractere, vă sugerăm să utilizați biblioteca LiquidCrystal, care este inclusă în setul standard Arduino IDE și este proiectată să funcționeze printr-o interfață paralelă de 8 biți (4 biți). Dacă afișajul este conectat la Arduino prin magistrala I2, atunci trebuie să instalați biblioteca LiquidCrystal_I2C (cele mai multe dintre funcții repetă funcțiile primei biblioteci).

Afișaje acceptate:

Afişa Conectare și inițializare
LCD1602 - afișaj de caractere (16x02 caractere),


#include
[ , 8 , 9 , 10 , 11 ]);
void setup())( lcd.begin(16, 2);}

// Explicație:

void setup())( OBJECT.begin(NUM_COLUMN, NUMBER_ROWS); )


OBIECTUL LiquidCrystal(RS, E, D0, D1, D2, D3, D4, D5, D6, D7);


cu interfață I2C (albastru)

#include
#include
LiquidCrystal_I2C lcd(0x27 sau 0x3F, 16 , 2);
void setup())( lcd.init(); }

// Explicație:



LCD1602 I2C - afișaj de caractere (16x02 caractere),
cu interfață I2C (verde)

#include
#include
LiquidCrystal_I2C lcd(0x27 sau 0x3F, 16 , 2);
void setup())( lcd.init(); }

// Explicație:
OBIECTUL LiquidCrystal_I2C (ADRESA_I2C, COLUMNE_COLOANĂ, ROW_COUNTY);
// I2C_ADDRESS poate fi fie 0x27, fie 0x3F

LCD2004 - afișaj de caractere (20x04 caractere),
cu interfata paralela (albastru)

#include
LCD cristal lichid(2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]);
void setup())( lcd.begin(20, 4);}

// Explicație:
OBIECTUL de cristal lichid(RS, E, D4, D5, D6, D7);
void setup())( OBJECT.begin(COLUMNS, ROWS); )

// Dacă sunt folosite 8 fire magistrală de date, atunci indicați-le pe toate
OBIECTUL LiquidCrystal(RS, E, D0, D1, D2, D3, D4, D5, D6, D7);

LCD2004 I2C - afișaj de caractere (20x04 caractere),
cu interfață I2C (albastru)
#include
#include
LiquidCrystal_I2C lcd(0x27 sau 0x3F, 20 , 4);
void setup())( lcd.init(); }

// Explicație:
OBIECTUL LiquidCrystal_I2C (ADRESA_I2C, COLUMNE_COLOANĂ, ROW_COUNTY);
// I2C_ADDRESS poate fi fie 0x27, fie 0x3F

Exemplu #1

Afișăm inscripția pe afișajul LCD1602 conectat prin magistrala I2C. Pentru a lucra cu afișajul LCD2004, trebuie să schimbați linia 3 la LiquidCrystal_I2C lcd(0x27,20,4);

#include // Conectați biblioteca pentru a lucra cu un afișaj LCD prin magistrala I2C LiquidCrystal_I2C lcd(0x27,16,2); // Declarați obiectul bibliotecă, specificând parametrii de afișare (adresa I2C = 0x27, număr de coloane = 16, număr de rânduri = 2) // Dacă inscripția nu apare, înlocuiți adresa 0x27 cu 0x3F void setup())( / / lcd.init(); // Inițiază lucrul cu afișajul LCD lcd.backlight(); // Pornește iluminarea ecranului LCD lcd.setCursor(0, 0); , 0 row) lcd.print("LCD" // Imprimă textul "LCD", pornind de la poziţia setată a cursorului lcd.setCursor(0, 1) // Setează cursorul pe poziţia (0 coloană, 1 rând); ) lcd.print("www.iarduino.ru"); Afișăm textul "www.iarduino.ru", începând de la poziția setată a cursorului) // // void loop()() // Codul din bucla funcția este executată continuu. Dar, deoarece afișăm text static, trebuie să-l afișăm o singură dată la pornire, fără a folosi codul buclă

#2 Exemplu

Afișăm inscripția pe afișajul LCD1602 conectat printr-o magistrală paralelă pe 4 biți. Pentru a lucra cu afișajul LCD2004, trebuie să schimbați linia 5 în lcd.begin(20, 4);

#include // Conectați biblioteca LiquidCrystal pentru a lucra cu afișajul LCD LiquidCrystal lcd(2,3,4,5,6,7); // Declarați un obiect de bibliotecă, indicând pinii afișajului (RS, E, D4, D5, D6, D7) // Dacă sunt utilizate 8 fire magistrală de date, atunci specificați (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Inițiați lucrul cu afișajul LCD, indicând numărul (coloane, rânduri) lcd.setCursor(0, 0); // Setați cursorul pe poziția (coloana 0, rând 0) lcd.print("LCD2004" // Imprimați textul "LDC1602", începând de la poziția setată a cursorului lcd.setCursor(0, 1); Setați cursorul pe poziție (0 coloană, 1 rând) ) lcd.print("www.iarduino.ru" // Imprimați textul "www.iarduino.ru", începând de la poziția setată a cursorului ) // //; void loop()() // Codul din interiorul funcției de buclă este executat continuu. Dar, deoarece afișăm text static, trebuie să-l afișăm o singură dată la pornire, fără a folosi codul buclă

#3 Exemplu

Afișăm inscripția „Limba rusă” pe afișajul LCD1602 conectat prin magistrala I2C:

#include // Conectați biblioteca pentru a lucra cu magistrala I2C #include // Conectați biblioteca pentru a lucra cu un afișaj LCD prin magistrala I2C LiquidCrystal_I2C lcd(0x27,16,2); // Declarați un obiect de bibliotecă, specificând parametrii de afișare (adresă I2C = 0x27, număr de coloane = 16, număr de rânduri = 2) // simbol uint8_t = ( // Declarați o matrice de 6 simboluri native (limbi), fiecare simbol este format de 8 octeți ( 0, 0,18,20,24,20,18, 0 ), // la ( 0, 0,17,19,21,25,17, 0 ), // și (10, 4 , 17,19,21,25,17, 0 ), // al-lea ( 0, 0,15,17,15, 5, 9, 0 ), // i ( 0, 0,14,17, 6,17 , 14, 0), //z (0, 0,17,17,29,19,29, 0)); // s // void setup())( // lcd.init(); // Inițiați lucrul cu afișajul LCD lcd.backlight(); // Porniți iluminarea de fundal a afișajului LCD lcd.createChar(1, simbol ); // Încărcați 1 simbol "k" în RAM lcd.createChar(2, simbol // Încărcați al 2-lea simbol "i" în RAM lcd.createChar(3, simbol); simbolul „th” în RAM lcd.createChar (4, simbol // Încărcați al 4-lea simbol „i” în RAM lcd.createChar(5, simbol) // Încărcați al 5-lea simbol „z”; display RAM lcd.createChar(6, simbolul "s" în display RAM lcd.setCursor(0, 0) // Setați cursorul în poziție (0 coloană, 0 rând) lcd.print("Pycc\1\); 2\3 \4\5\6\1" ); // Afișează textul „Pyccy language”, unde „Pycc” este scris în latină și „kyy language” - în caractere din RAM-ul afișajului ) // Dacă trebuie să scoateți un caracter din RAM-ul afișajului, apoi scrieți \ și numărul caracterului // void loop( )() // Codul din interiorul funcției de buclă este executat continuu. Dar, deoarece afișăm text static, trebuie să-l afișăm o singură dată la pornire, fără a folosi codul buclă

Funcții comune bibliotecilor LiquidCrystal și LiquidCrystal_I2C:

  • ÎNCEPE( cols, rânduri, ); – Inițializează afișarea cu numărul de coloane, rânduri și dimensiunea caracterelor.
  • clar();– Ștergerea afișajului cu cursorul în poziția 0,0 (Durează mult timp!).
  • Acasă();– Setarea cursorului pe poziția 0,0 (Ia mult timp!).
  • afişa();– Porniți rapid afișajul (fără a modifica datele din RAM).
  • noDisplay();– Opriți rapid afișajul (fără a modifica datele din RAM).
  • clipi ();– Activați cursorul care clipește (cu o frecvență de aproximativ 1 Hz).
  • noBlink();– Opriți cursorul intermitent.
  • cursor();– Activați sublinierea cursorului.
  • noCursor();– Dezactivează sublinierea cursorului.
  • scrollDisplayLeft();– Derulează afișajul spre stânga. Schimbă coordonatele afișajului cu o coloană la stânga (fără a schimba memoria RAM).
  • scrollDisplayRight();– Derulează ecranul spre dreapta. Schimbă coordonatele afișajului cu o coloană la dreapta (fără a schimba memoria RAM).
  • de la stânga la dreapta();– Specifică schimbarea în continuare a poziției cursorului, după afișarea următorului caracter, cu o coloană la dreapta.
  • de la dreapta la stanga();– Specifică schimbarea în continuare a poziției cursorului, după afișarea următorului caracter, cu o coloană la stânga.
  • noAutoscroll();– Specifică faptul că textul va fi aliniat la stânga poziției cursorului în viitor (ca de obicei).
  • autoscroll();– Indică faptul că textul va fi aliniat la dreapta de la poziția cursorului în viitor.
  • createChar( num, array ); – Scrieți un caracter personalizat pe afișajul CGRAM sub numărul specificat.
  • setCursor( col, rând ); – Plasați cursorul în poziția indicată de numărul coloanei și al liniei.
  • imprimare( text ); – Afișați text, simboluri sau numere pe ecranul de afișare. Sintaxa este similară cu funcția de clasă Serial cu același nume.

Funcții implementate numai în biblioteca LiquidCrystal_I2C:

  • init();– Inițializarea afișajului. Trebuie să fie prima comandă de bibliotecă LiquidCrystal_I2C după crearea obiectului. De fapt, această funcție se află și în biblioteca LiquidCrystal, dar în acea bibliotecă este apelată automat (implicit) atunci când este creat un obiect.
  • iluminare de fundal();– Porniți iluminarea de fundal a afișajului.
  • nuBacklight();– Oprește iluminarea de fundal a afișajului.
  • setBacklight( steag ); – Controlul luminii de fundal (adevărat - pornire / fals - oprire), utilizat în locul funcțiilor noBacklight și backlight.

Conexiune:

// Pentru magistrala I2C:
#include
#include
LiquidCrystal_I2C lcd( abordare , col , rând );
void setup())(
lcd.init();
}

Parametru:
  • abordare: Afișează adresa pe magistrala I2C - 0x27 sau 0x3F
  • col:
  • rând:
// Pentru o magistrală paralelă cu 4 fire:
#include
Cristal lichid lcd( R.S. , E , D4 , D5 , D6 , D7 );
void setup())(
lcd.begin( col , rând );
}
Parametru:
  • RS: Nr. pinului Arduino la care este conectat pinul RS
  • E: Numărul pinului Arduino la care este conectat pinul E
  • D0...D3: Numărul de pini Arduino la care sunt conectați pinii D0-D3
  • D4...D7: Numărul de pini Arduino la care sunt conectați pinii D4-D7
  • col: numărul de coloane implementate în afișaj
  • rând: numărul de linii implementate pe afișaj
// Pentru o magistrală paralelă cu 8 fire:
#include
Cristal lichid lcd( R.S. , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 );
void setup())(
lcd.begin( col , rând );
}
ÎNCEPE( col , rând , );
Inițializează afișajul cu dimensiunile și caracterele ecranului.
Parametru:
  • col: numărul de coloane implementate în afișaj
  • rând: numărul de linii implementate pe afișaj
  • mărimea: dimensiunea caracterului, indicată printr-o constantă:
    LCD_5x8DOTS (implicit) sau LCD_5x10DOTS
/* Pentru magistrala I2C: */ #include // Conectați biblioteca pentru a lucra cu magistrala I2C #include // Conectați biblioteca pentru a lucra cu un afișaj LCD prin magistrala I2C LiquidCrystal_I2C lcd(0x3F,20,4); // Declarați un obiect de bibliotecă, indicând parametrii de afișare (adresa I2C = 0x3F, număr de coloane = 20, număr de rânduri = 4) // void setup())( // lcd.init(); // Inițiază lucrul cu display LCD lcd.backlight (); // Porniți iluminarea de fundal a afișajului LCD... // Informații de ieșire care ar trebui să fie afișate la pornire) // // void loop()() // ... // Informații de ieșire care ar trebui să se schimbe în funcție de algoritmul codului dvs.) // /* Pentru o magistrală paralelă cu 4 fire: */ #include // Conectați biblioteca LiquidCrystal pentru a lucra cu afișajul LCD LiquidCrystal lcd(2,3,4,5,6,7); // Declarați un obiect de bibliotecă, indicând pinii afișajului (RS, E, D4, D5, D6, D7) // Dacă sunt utilizate 8 fire magistrală de date, atunci specificați (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Inițiați lucrul cu afișajul LCD, indicând numărul (coloane, rânduri) ... // Informații de ieșire care ar trebui fie afișat la pornire) / // void loop()() // ... // Informații de ieșire care ar trebui să se modifice în funcție de algoritmul codului dvs.) //

Funcții de control a afișajului:

afişa();
Pornește afișajul după ce a fost oprit de funcția noDisplay.
Notă: Funcția rulează rapid și nu schimbă RAM-ul afișajului.
noDisplay();
Oprește afișajul.
Datele de pe afișaj nu vor fi afișate până când nu este apelată funcția de afișare, dar nu vor fi șterse din memoria RAM, iar după ce funcția de afișare este apelată, acestea vor fi afișate din nou.
Notă: Funcția rulează rapid și nu schimbă RAM-ul afișajului.
scrollDisplayLeft();
Mută ​​coordonatele afișajului cu o coloană la stânga.



scrollDisplayRight();
Mută ​​coordonatele afișajului cu o coloană la dreapta.
Apelarea constantă a acestei funcții va crea un efect de linie târâtoare.
Coordonatele sunt deplasate atât pentru informațiile disponibile pe afișaj, cât și pentru cele care vor fi afișate ulterior.
Notă: Funcția funcționează fără modificarea memoriei RAM de afișare.
Dacă apelați funcția de 40 de ori la rând, coordonatele se vor întoarce la punctul inițial
clar();
Șterge afișajul setând cursorul în poziția 0,0.
Informațiile de pe afișaj vor fi șterse definitiv.
Notă: durează mult.
iluminare de fundal();
Porniți iluminarea de fundal a afișajului.
nuBacklight();
Opriți iluminarea de fundal a afișajului.
Notă: Funcția este implementată numai în biblioteca LiquidCrystal_I2C.
setBacklight( steag );
Controlul luminii de fundal (în loc de funcțiile noBacklight și backlight).
Parametru:
  • steag: true - pornește și false - stinge lumina de fundal.
Notă: Funcția este implementată numai în biblioteca LiquidCrystal_I2C.
/* Afișează un mesaj pentru a monitoriza funcțiile de control al afișajului: */ lcd.cursor(0,0); // Setați cursorul în colțul superior al afișajului (0 coloană, 0 rând) lcd.print("iarduino.ru"); // Afișează textul „iarduino.ru” (prima literă „i” va fi în poziția „0.0”, iar ultimul „u” în poziția „10.0”, cursorul invizibil în poziția „11.0”) // lcd.noDisplay (); // Opriți afișajul (inscripția va dispărea de pe afișaj) lcd.display(); // Porniți afișajul (inscripția va apărea pe afișaj în același loc) lcd.scrollDisplayLeft(); // Deplasați coordonatele coloanelor la stânga (afișajul va afișa „arduino.ru” fără prima literă „i”, care va depăși afișajul, dar va rămâne în RAM-ul său) lcd.scrollDisplayRight(); // Schimbați coordonatele coloanei la dreapta (afișajul va afișa „iarduino.ru” în același loc în care a fost afișat inițial) lcd.clear(); // Curățați afișajul (inscripția va dispărea definitiv de pe afișaj) lcd.noBacklight(); // Opriți iluminarea de fundal a afișajului lcd.backlight(); // Porniți iluminarea de fundal a afișajului lcd.setBacklight(0); // Opriți iluminarea de fundal a afișajului lcd.setBacklight(1); // Porniți iluminarea de fundal a afișajului

Funcții de control al cursorului:

setCursor( col , rând );
Plasează cursorul în poziția specificată.
Parametru:
  • col: numărul coloanei (începând de la 0).
  • rând: numărul rândului (începând de la 0)
Acasă();
Setarea cursorului pe poziția 0,0. Funcționează ca funcția setCursor(0,0);
Notă: durează mult.
clipi ();
Activați cursorul intermitent.
Notă: Cursorul ocupă întreg câmpul de caractere și clipește la o frecvență de aproximativ 1 Hz, în poziția în care a fost setat anterior.
noBlink();
Opriți cursorul care clipește.
Notă: Cursorul devine invizibil, dar poziția sa este menținută.
cursor();
Activați sublinierea cursorului.
Notă: Cursorul ia forma unui caracter de subliniere și este situat în poziția în care a fost plasat anterior.
noCursor();
Dezactivați sublinierea cursorului.
Notă: Cursorul devine invizibil, dar poziția sa este menținută.
lcd.setCursor(0, 1); // Setați cursorul la primul caracter al celei de-a doua rânduri (numerotarea rândurilor și coloanelor începe de la 0) lcd.home(); // Setați cursorul la primul caracter al primei linii (ca atunci când apelați lcd.setCursor(0,0);) lcd.blink(); // Faceți cursorul vizibil (un dreptunghi va clipi în locul cursorului) lcd.noBlink(); // Faceți cursorul invizibil (eliminați dreptunghiul care clipește) lcd.cursor(); // Faceți cursorul vizibil (în locul cursorului va apărea un caracter de subliniere) lcd.noCursor(); // Faceți cursorul invizibil (eliminați caracterul de subliniere) // Dacă cursorul lovește un loc unde există un caracter, atunci acest caracter nu dispare

Funcții care indică direcția și alinierea:

de la stânga la dreapta();
Specifică că după fiecare caracter nou, poziția cursorului trebuie să se miște cu o coloană la dreapta.
Notă: Dacă afișați textul „abc”, afișajul va afișa „abc”, iar textul va fi în dreapta poziției inițiale a cursorului.
(Ca de obicei)
de la dreapta la stanga();
Specifică că după fiecare caracter nou, poziția cursorului trebuie să se miște cu o coloană la stânga.
Notă: Dacă afișați textul „abc”, afișajul va afișa „cba” și textul va fi la stânga poziției inițiale a cursorului.
(Scriind de la dreapta la stânga)
noAutoscroll();
Indică faptul că, în viitor, textul ar trebui să fie aliniat la stânga poziției inițiale a cursorului.
Notă: dacă plasați cursorul în poziția 10.0 și afișați text, atunci primul caracter al textului afișat va fi în această poziție.
(Ca de obicei)
autoscroll();
Indică faptul că, în viitor, textul ar trebui să fie aliniat la dreapta poziției inițiale a cursorului.
Notă: dacă plasați cursorul în poziția 10.0 și afișați text, cursorul se va afla în această poziție.
(Coordonatele afișajului vor fi deplasate la stânga, ca și cum ați apela funcția scrollDisplayLeft de câte ori există litere în textul de ieșire)
lcd.leftToRight(); // Instruiți cursorul să se deplaseze la dreapta (Ca de obicei în scrisul european) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pe display vom vedea: „ABC” (După „A” cursorul s-a mutat la dreapta și a fost afișat „B”, apoi cursorul s-a mutat la dreapta și a fost afișat „C”) lcd.rightToLeft(); // Spune cursorului să se deplaseze la stânga (ca în scrierea de la dreapta la stânga) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pe display vom vedea: „CBA” (După „A” cursorul s-a mutat la stânga și a fost afișat „B”, apoi cursorul s-a mutat la stânga și a fost afișat „C”) lcd.noAutoscroll(); // Setați alinierea la stânga (Ca de obicei) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pe display vom vedea: "ABC" (Ca de obicei) lcd.autoscroll(); // Setați alinierea la dreapta (coordonatele de afișare vor fi deplasate la stânga cu numărul de caractere afișat) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pe display vom vedea: "ABC" (Coordonatele afișajului vor fi deplasate cu 3 caractere la stânga, deoarece după fiecare caracter se apelează funcția scrollDisplayLeft)

Funcții de introducere a textului și a simbolurilor:

createChar(num,array);
Scrie un caracter personalizat în CGRAM-ul afișajului sub numărul specificat.
Dacă doriți să afișați text (folosind funcția de imprimare) care ar trebui să conțină caracterul pe care l-ați setat, specificați o bară oblică și numărul sub care a fost scris acest caracter: print("C\1MBO\2").
Parametru:
  • num: numărul sub care va fi scris simbolul.
  • matrice: o matrice reprezentând caracterul de scris.
Notă: Matricea este formată din mai mulți octeți, al căror număr este egal cu numărul de linii din simbol. Fiecare bit de octet setat corespunde unui pixel de caracter setat (afisat).
print(text);
Afișați text, simboluri sau numere pe ecranul de afișare.
Parametru:
  • text: caracter, număr sau șir care urmează să fie afișat.
Notă: Sintaxa este similară cu funcția de clasă Serial cu același nume.
#include // Conectați biblioteca pentru a lucra cu magistrala I2C #include // Conectați biblioteca pentru a lucra cu un afișaj LCD prin magistrala I2C LiquidCrystal_I2C lcd(0x27,16,2); // Declarați un obiect de bibliotecă, indicând parametrii de afișare (adresa I2C = 0x27, număr de coloane = 16, număr de rânduri = 2) // uint8_t symbol_d = (0b00000, // 1 linie a simbolului „d” 0b00000, / / Al doilea rând al simbolului „d” „ 0b00110, // Al treilea rând al caracterului „d” 0b01010, // Al patrulea rând al caracterului „d” 0b01010, // Al cincilea rând al caracterului „d” 0b01010, // a 6-a linie a caracterului „d” 0b11111, // a 7-a linie a caracterului „d” „ 0b10001); // A 8-a linie a simbolului "d" Întreaga matrice poate fi scrisă într-o singură linie: uint8_t symbol_d=(0,0,6,10,10,10,31,17); // uint8_t symbol_i = (0b00000, // prima linie a simbolului „și” 0b00000, // a doua linie a simbolului „și” 0b10001, // a treia linie a simbolului „și” 0b10011, // a patra linie a simbolului „și” simbolul „și” 0b10101, // a 5-a linie a simbolului „și” 0b11001, // a șasea linie a simbolului „și” 0b10001, // a șaptea linie a simbolului „și” 0b00000); // A 8-a linie a simbolului "și" Întreaga matrice poate fi scrisă într-o singură linie: uint8_t symbol_i=(0,0,17,19,21,25,17,0); void setup())( // lcd.init(); // Inițiați lucrul cu afișajul LCD lcd.backlight(); // Porniți iluminarea de fundal a afișajului LCD lcd.createChar(1,symbol_d); // Încărcați primul simbol în memoria de afișare lcd .createChar(2,symbol_i // Încărcați al doilea simbol în memoria de afișare lcd.clear( // Ștergeți ecranul lcd.setCursor(0,0);); cursorul în colțul de sus lcd.print("Pa\ 1\2o" // Afișează textul "Radio" în timp ce scrieți caracterele "P", "a", "o" în latină, ) // caracterele „d”, „i” din memoria afișajului, indicând numerele lor // void loop())( // lcd.setCursor(0,1); lcd.print(" "); // șterge întreaga linie de jos lcd.setCursor(0,1); lcd.print("arduino"); // afiseaza textul "i" "arduino". ru" în întârzierea liniei de jos (2000); // așteptați 2 secunde lcd.setCursor( 0,1); lcd.print (" "); // ștergeți întreaga linie de jos lcd.setCursor(0,1); lcd .print(12.345); // printeaza numarul 12.34 (se afiseaza 2 zecimale) delay(2000) ; // asteapta 2 secunde lcd.setCursor(0,1); // șterge întreaga linie de jos lcd.setCursor(0,1); lcd.print(12, HEX); // afișează numărul 12 ca număr hexazecimal delay(2000); // așteptați 2 secunde lcd.setCursor(0,1); lcd.print(" "); // șterge întreaga linie de jos lcd.setCursor(0,1); lcd.print(1); // afișează numărul 1 delay(2000); // așteptați 2 secunde)