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/D | S | Selectează direcția de deplasare a cursorului sau a ecranului |
0 | 0 | 0 | 0 | 1 | D | C | B | Selectați modul de afișare |
0 | 0 | 0 | 1 | S/C | R/L | — | — | Comanda cursor/deplasare ecran |
0 | 0 | 1 | D.L. | N | F | — | — | Definirea parametrilor de scanare și a lățimii magistralei de date |
0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | Atribuire la contor A.C. adrese din regiune CGRAM |
1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | Atribuire la contor A.C. adrese din regiune DDRAM |
Tabel cu valorile steagului:
Steag | Sens |
I/D | Modul offset contor adrese AC, 0 - scădere, 1 - creștere |
S | Indicatorul 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/C | Comanda 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/L | Comanda 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/L | Flag care definește lățimea magistralei de date: 0 - 4 biți, 1 - 8 biți |
N | Modul de scanare a imaginii pe LCD: 0 - o linie, 1 - două linii |
F | Dimensiunea matricei de caractere: 0 - 5×8 puncte, 1 - 5×10 puncte |
D | Prezența imaginii: 0 - dezactivat, 1 - activat |
C | Cursor de subliniere: 0 - dezactivat, 1 - activat |
B | Cursorul 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×2 | WH0802A | MT-8S2A | DV-0802 | BC0802A | SC0802A | MTC-0802X | WM-C0802M | AC082A |
10×1 | — | MT-10S1 | — | — | — | — | — | — |
12×2 | WH1202A | — | — | BC1202A | — | — | — | — |
16×1 | WH1601A | — | DV-16100 | BC1601A1 | SC1601A | MTC-16100X | WM-C1601M | AC161A |
WH1601B | — | — | BC1601B | SC1601B | — | — | — | |
WH1601L | MT-16S1A | DV-16100 | BC1601D1 | SC1601D | MTC-16101X | WM-C1601Q | AC161B | |
— | — | DV-16120 | — | — | — | — | AC161J | |
16×2 | WH1602L | MT-16S2R | DV-16210 | BC1602E | SC1602E | MTC-16201X | WM-C1602Q | AC162E |
— | — | — | — | SC1602N | — | — | — | |
WH1602D | MT-16S2J | DV-16230 | BC1602B1 | SC1602B | MTC-16202X | WM-C1602N | AC162A | |
— | — | DV-16235 | — | — | MTC-16203X | — | — | |
WH1602C | MT-16S2D | DV-16236 | BC1602D | SC1602D | — | — | — | |
WH1602A | MT-16S2H | DV-16244 | BC1602H | SC1602C | MTC-16204X | WM-C1602K | — | |
WH1602B | — | DV-16252 | BC1602A | SC1602A | MTC-16205B | WM-C1602M | — | |
WH1602M | — | DV-16257 | BC1602F | SC81602F | — | — | — | |
— | — | DV-16275 | — | — | — | — | — | |
— | — | DV-16276 | — | — | — | — | — | |
16×4 | WH1604A | MT-16S4A | DV-16400 | BC1604A1 | SC1604A | MTC-16400X | WM-C1604M | AC164A |
WH1604B | — | — | — | — | — | — | — | |
20×1 | — | — | DV-20100 | — | — | — | — | — |
— | MT-20S1L | — | — | — | — | — | — | |
20×2 | WH2002A | MT-20S2A | DV-20200 | BC2002A | SC2002A | MTC-20200X | WM-C2002M | AC202A |
WH2002M | — | — | — | — | — | — | — | |
WH2002L | MT-20S2M | DV-20210 | BC2002B | SC2002C | MTC-20201X | WM-C2002P | AC202B | |
— | — | DV-20211 | — | — | — | — | AC202D | |
— | — | DV-20220 | — | — | — | — | — | |
— | — | DV-20206-1 | — | — | — | — | — | |
20×4 | WH2004A | MT-20S4A | DV-20400 | BC2004A | SC2004A | MTC-20400X | WM-C2004P | AC204A |
— | — | — | — | SC2004G | — | — | — | |
— | — | — | — | SC2004C | — | — | — | |
WH2004L | — | DV-20410 | BC2004B | — | MTC-20401X | WM-C2004R | AC204B | |
24×1 | — | MT-24S1L | — | — | — | — | — | — |
24×2 | WH2402A | MT-24S2A | DV-24200 | BC2402A | SC2402A | MTC-24200X | WM-C2402P | AC242A |
— | MT-24S2L | — | — | — | — | — | — | |
40×2 | WH4002A | — | DV-40200 | BC4002A | SC4002A | MTC-40200X | WM-C4002P | AC402A |
40×4 | WH4004A | — | DV40400 | BC4004A | SC4004A | MTC-40400X | WM-C4004M | AC404A |
— | — | — | — | 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ţie | Scop |
---|---|
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
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
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:
|
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: |
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: // Dacă sunt folosite 8 fire magistrală de date, atunci indicați-le pe toate |
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: |
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
#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
#3 Exemplu
Afișăm inscripția „Limba rusă” pe afișajul LCD1602 conectat prin magistrala I2C:
#include
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: |
Parametru:
|
// 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:
|
// 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:
|
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:
|
Funcții de control al cursorului:
setCursor( col ,
rând );
Plasează cursorul în poziția specificată. |
Parametru:
|
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ă. |
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) |
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:
|
print(text); Afișați text, simboluri sau numere pe ecranul de afișare. |
Parametru:
|