Lucrul cu LCD simbolic bazat pe controlerul HD44780. STM32 și LCD. Lucrul cu o bibliotecă de afișare grafică pentru a lucra cu LCD

La cererea oamenilor muncii și promisiunile mele au decis să descriem lucrul cu semnalul LCD 16x2 în mediul CodeVisionAvR. Să începem cu descrierea LCD în sine. Afișajul LCD digital alpotovitic cu compania HD44780 încorporată HITACHI poate emite caractere într-una, două sau patru ori de 8, 16, 20 sau 40 de caractere fiecare. În acest articol voi considera LCD 16x2 (16 caractere, 2 linii) . Acest afișaj pentru conexiunea fizică la MK are 16 concluzii. (Localizarea concluziilor depinde de compania producătorului) . Să ne uităm la aceste concluzii. Fără causttava, mi-am un semn de topire. În principiu, este potrivit pentru orice LCD.
Ei bine, cred că nu este necesar să se explice de ce este necesar unul sau altul. Totul este scris acolo în limba rusă. Dar există niște mici, dar. 1) Afișajele LCD pot fi eliberate în două opțiuni cu 5 volți sau cu 3.3. 2) Un rezistor de limitare curentă nu este întotdeauna instalat în circuitul de alimentare. Uită-te cu atenție, poate sta doar jumper. (Am ars atât lumina de fundal pe două afișaje.) 3) Schema pentru rezistență pentru a regla contrastul.
Deci, acum cum este un miracol pentru a vă conecta la MK. Vom lucra cu ATMEGA8 și cu cuarț pe 4 MHz. Aici este actualul și schema.
După cum puteți vedea ceva complicat. Primele trei descărcări de porturi D. Serviți pentru a gestiona și ultimele patru pentru date. De asemenea, puteți lucra cu aceste afișări pe autobuzul pe 8 biți, dar cred că dau 4 picioare suplimentare este deșeurile. Prin urmare, vom lucra la un autobuz pe 4 biți. Programat cu schema, acum să facem parte din partea programului. Pentru a inițializa afișajul și a le transfera în modul 4-biți, trebuie să efectuați mai multe comenzi. Dar, înainte de asta, vreau să clarific modul în care funcționează biții de control. Bitul RS este responsabil pentru ceea ce va primi LCD-ul. În cazul în care un Rs. \u003d 0.Apoi trecem echipa și dacă 1 Acele date. Dacă bit. Rw \u003d 0.Apoi suntem înregistrați în LCD și dacă 1 , apoi citiți. Pic E. Doar poarta. Adică de îndată ce vrem să introducem comanda sau datele, atunci după ce ați pus toate biții de pe picioare pur și simplu expuneți 1 pic E.și apoi renunțați din nou 0 . 1 - Porniți puterea 2 - Rezistă la o pauză de cel puțin 20 ms 3 - o comandă pentru 4 biți. Anvelopele 4 - Rezistă o pauză de cel puțin 40 μs 5 - o echipă pentru 4 biți. Anvelope (Rs \u003d 0), (RW \u003d 0), (D7 \u003d 0), (D6 \u003d 0), (D5 \u003d 1), (D4 \u003d 1) 6 - Rezistă o pauză de cel puțin 40 μs 7 - o echipă pentru 4 biți. Anvelope (Rs \u003d 0), (RW \u003d 0), (D7 \u003d 0), (D6 \u003d 0), (D5 \u003d 1), (D4 \u003d 1) 8 - Pentru a rezista unei pauze de cel puțin 40 μs 9 - o echipă pentru 4 biți. Anvelope (Rs \u003d 0), (RW \u003d 0), (D7 \u003d 0), (D6 \u003d 0), (D5 \u003d 1), (D4 \u003d 0) 10 - Rezistență la pauza de cel puțin 40 μs 11 - Setați parametrii (Rs \u003d 0), (rw \u003d 0), (d7 \u003d 0), (d6 \u003d 0), (d5 \u003d 1), (D4 \u003d 0) (Rs \u003d 0), (RW \u003d 0), (D7 \u003d 1), (d6 \u003d 0), (d5 \u003d 0), (d4 \u003d 0) 12 - Opriți afișajul (Rs \u003d 0), (RW \u003d 0), (d7 \u003d 0), (d6 \u003d 0), (d5 \u003d 0) (D4 \u003d 0) (RS \u003d 0), (RW \u003d 0), (D7 \u003d 0), (d6 \u003d 0), (d5 \u003d 1), (D4 \u003d 0) 13 - Curățați ecranul (Rs \u003d 0), (RW \u003d 0), (d7 \u003d 0), (d6 \u003d 0), (d5 \u003d 0) (D4 \u003d 0) (RS \u003d 0), (RW \u003d 0), (D7 \u003d 0), (d6 \u003d 0), (d5 \u003d 0), (d4 \u003d 1) 14 - Modul de introducere a datelor (Rs \u003d 0), (RW \u003d 0), (d7 \u003d 0), (d6 \u003d 0), (d5 \u003d 0) (D4 \u003d 0) (RS \u003d 0), (RW \u003d 0), (D7 \u003d 0), (d6 \u003d 1), (d5 \u003d 1), (d4 \u003d 0) Despre modul în care. Acum, după această Abracadabra, afișajul nostru este gata să primească date. Ce urmeaza. Și apoi să luăm în considerare echipele LCD. Pentru transmiterea comenzii / datelor din LCD pe magistrala cu 4 biți, sunt necesare două porniri. Primim mai întâi 4 octeți mai vechi, iar al doilea transmitem byteții mai tineri. În plus, toate comenzile voi scrie în perechi. Echipa Curățarea indicatorului și setarea cursorului în colțul din stânga sus. Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 0, D7 \u003d 0 (E \u003d 1 apoi 0) Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 0, D7 \u003d 1 (E \u003d 1 apoi 0) Comanda comenzii în poziția stângă. (X-înseamnă indicarea valorii) Rs. \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 0, D7 \u003d 0 (E \u003d 1 apoi 0) Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 1, D7 \u003d x (e \u003d 1 apoi 0) Comanda stabilește direcția schimbării cursorului (ID \u003d 0/1 la stânga / dreapta). De asemenea, rezoluția schimbării afișajului (SH \u003d 1) la înregistrarea în DDRAM. Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 0, D7 \u003d 0 (E \u003d 1 apoi 0) Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 1, D6 \u003d ID, D7 \u003d sh (e \u003d 1 apoi 0) Comanda afișajului (D \u003d 1) și selectați cursorul (A, B). A \u003d 0, B \u003d 0 Nici un cursor, nimic nu clipește A \u003d 0, B \u003d 1 Cursorul nr, clipește întregul simbol A \u003d 1, B \u003d 0 Cursorul sub formă de subliniere nu clipește A \u003d 1, B \u003d 1 Cursorul sub formă de subliniere și clipește Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 0, D7 \u003d 0 (E \u003d 1 apoi 0) Rs \u003d 0, RW \u003d 0, D4 \u003d 1, D5 \u003d D, D6 \u003d A, D7 \u003d b (e \u003d 1 apoi 0) Afișaj / Cursor Shift Team (SC \u003d 0/1 Cursor / Afișaj RL \u003d 0/1 Stânga / dreapta). Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 0, D7 \u003d 1 (E \u003d 1 apoi 0) Rs \u003d 0, RW \u003d 0, D4 \u003d SC, D5 \u003d RL, D6 \u003d X, D7 \u003d x (e \u003d 1 apoi 0) Comandă de instalare a biților de anvelope (DL \u003d 0/1 4/8 biți), precum și pagina semnului R. Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 0, D6 \u003d 1, D7 \u003d DL (E \u003d 1 apoi 0) RS \u003d 0, RW \u003d 0, D4 \u003d 1, D5 \u003d 0, D6 \u003d P, D7 \u003d 0 (E \u003d 1 apoi 0) Comanda de conectare a următoarei operații cu instalarea cursorului și selectați CGram (caracterele inventate). Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 1, D6 \u003d ACG, D7 \u003d ACG (E \u003d 1 apoi 0) Rs \u003d 0, RW \u003d 0, D4 \u003d ACG, D5 \u003d ACG, D6 \u003d ACG, D7 \u003d ACG (E \u003d 1 apoi 0) Următoarea comandă de configurare a adresei de operare și selectarea zonei de memorie DDRAM (generator de semnături). Rs \u003d 0, RW \u003d 0, D4 \u003d 0, D5 \u003d 1, D6 \u003d Adăugați, D7 \u003d Adăugați (E \u003d 1 apoi 0) Rs \u003d 0, RW \u003d 0, D4 \u003d Adăugați, D5 \u003d Adăugați, D6 \u003d Adăugați, D7 \u003d adăugați (E \u003d 1 apoi 0) Comandă de înregistrare a datelor în zona curentă. Rs \u003d 1, rw \u003d 0, d4 \u003d date, d5 \u003d date, d6 \u003d date, d7 \u003d date (e \u003d 1 apoi 0) Rs \u003d 1, rw \u003d 0, d4 \u003d date, d5 \u003d date, d6 \u003d date, D7 \u003d Date (E \u003d 1 apoi 0) Comanda de citire a datelor din zona curentă. Rs \u003d 1, RW \u003d 1, D4 \u003d Date, D5 \u003d Date, D6 \u003d Date, D7 \u003d Date (E \u003d 1 apoi 0) Rs \u003d 1, RW \u003d 1, D4 \u003d Date, D5 \u003d Date, D6 \u003d Date, D7 \u003d Date (E \u003d 1 apoi 0) Asta e de fapt toate echipele. Există încă o echipă de citire a steagului de exagerare, dar nu o folosesc, ci doar să reziste între fiecare echipă cel puțin 40 μs. Asta e tot. Și acum, după ce ați citit acest tratat, beți o ceașcă de ceai sau cafea și uitați totul. Deoarece toată această musura ia funcțiile din biblioteca CodeVisionAvR. Creați un nou proiect așa cum a fost deja spus. Pentru cei care nu știu aici, restul intră în codul generatorului în fila LCD. și alegeți Portd.. Ce am făcut-o. Primul am spus programului că dorim să lucrăm cu afișajul LCD (selectând fila LCD.). Apoi am spus că le conectăm la port D.. Sub lista derulantă face posibilă selectarea numărului de caractere din șir. Deoarece valoarea implicită merită 16 Și dorim să lucrăm cu LCD 16x2, nu este necesar să schimbăm nimic. Mai jos pentru solicitările sunt pictate picioare portuare pentru conexiunea corectă a ecranului LCD la mk. Toate, salvați proiectul și uitați-vă la codul proaspăt generat. Primul lucru de a acorda atenție este o bucată de cod după Directiva Preprocessor #Include. Aici, pe aceasta: // funcțiile modulului LCD alfanumeric #Asm .equ __lcd_port \u003d 0x12; Portdd #Endasm #include > Să-i discernem linia. Primul comentariu de rând în care se spune că am conectat fișierul antet cu funcții pentru a lucra cu LCD-ul iconic. Deschidem unitatea pentru a introduce comenzi de asamblare. Următorul șir atribuie portul la care este conectat LCD-ul. Echipă .equ. În asamblare face același lucru #Include. În C. Dacă alegeți la întâmplare codul din generatorul de cod, acesta poate fi întotdeauna schimbat în acest rând. Numărul portului poate fi întotdeauna găsit în fișierul de inițializare MK. Întotdeauna se conectează în prima linie. În cazul nostru, mega8.h.. Următoarea linie închide unitatea codului de asamblare. Iar ultima linie doar conectează tot ce aveți nevoie pentru a lucra cu LCD. Acum, să mergem prin funcții de bază. Prima funcție care trebuie cauzată înainte de a începe LCD chinuit - acest lucru este, desigur, funcția de inițializare a afișajului. Arată așa: vid lcd_init (caractere nesemnate lcd_columns) Această funcție inițializează afișajul, iar parametrul transmis trebuie să fie numărul de caractere din rând. Vă spălăm programul în partea de jos și în fața ciclului principal, vedem două linii din următorul conținut: // inițializarea modulului LCD lcd_init (16); Aici sunt aceleași 16 linii care au fost selectate în lista programului de generare a codului și au împins argumentul la funcție. Și aici, dacă ați uitat cu o frică că aveți 8 sau 20 de caractere pe șir, apoi schimbați pur și simplu valoarea argumentului în această funcție. vOID LCD_Gotoxi (caractere nesemnate x, caractere nesemnate) Această caracteristică, judecând după numele său, traduce cursorul în poziția x Y.. Aici x. - Acesta este un fag. De la stânga la dreapta de la 0 la 15/19/39 (Depinde de numărul de litere din șir) . DAR y. - Acesta este un șir. De sus în jos de la 0 la 0/1/3 (Depinde de numărul de linii) . vid lcd_putchar (char c) Această caracteristică afișează un caracter în poziția curentă. Exemplu: lcd_putchar ("a") sau lcd_putchar (0x41) Că la ieșire va da același rezultat. Adică, parametrul poate fi atât un simbol, cât și codul său. Lcd_gotoxi (0,0); Lcd_putchar ("a"); Lcd_gotoxi (0,1); Lcd_putchar (0x41); Cred că comentariile de aici sunt prea, să ne uităm la rezultat.
Următoarea funcție. vid lcd_puts (char * str) Această caracteristică afișează un șir localizat în SRAM, pornind de la poziția curentă. Exemplu: Lcd_gotoxi (0,0); Lcd_ps ("șir"); V-om vedea:
Următoarea funcție. vid lcd_putsf (char * str) Această caracteristică afișează un șir situat în Flash pornind de la poziția curentă. Exemplu: Lcd_gotoxi (0,0); Lcd_putsf ("șir"); V-om vedea:
Ei bine, se închide toate aceste "funcții de radieră" vid lcd_clesr (gol) Apelarea acestei funcții veți șterge tot ceea ce este pe afișaj, iar cursorul se va ridica la poziția extremă stânga a șirului de sus. Deci, pentru a începe, puteți afișa cuvinte și numere pe afișajul LCD utilizând funcții gata făcute. Acum, să vorbim despre cum să ieșim valoarea variabilelor. În aceste scopuri, vom avea nevoie de o altă bibliotecă. Ei bine, cei care au programat pe PC trebuie să știe. Se numeste stdio.h. Ne ridicăm la vârful programului și după Directiva Preprocessor #Include. Dobil #Include. Ca rezultat, codul nostru va arunca o privire. // funcțiile modulului LCD alfanumeric #Asm .equ __lcd_port \u003d 0x12; Portdd #Endasm #include #Include. Acum hai să ne familiarizăm cu funcția care este angajată în formatarea textului. vOID PRINTF (Char Flash * Fmtstr [, Arg1, Arg2, ...]) Cum functioneaza. ÎN char flash * fmtstr Formatul valorii de ieșire este setat și în argumente arg1, arg2, ... Numele variabilei. Exemplu. Tempografie nesemnată \u003d 123; Printf ("temp \u003d% 05D \\ n", temp); Ce înseamnă această Abra-Kadabra. Prima linie creează o variabilă și atribuie valoarea acestuia. Aici totul este clar, dar ceea ce face cel de-al doilea. Toate in ordine. Mai întâi afișat temp \u003d., atunci 00123 . De ce excretați 00123 . Dar pentru că avem o condiție % 05D \\ n Care spune: 1) % - Vom forma valorile primului argument 2) 0 - Vom retrage semnele N, zgârieturi goale 3) 5 - Luăm 5 caractere dacă numărul este mai mic de 5 caractere, apoi umpleți pacienții cu zerouri. Aceasta indică elementul 2. Numărul va fi aliniat la marginea dreaptă. patru) d. - Derivăm un număr în format zecimal. cinci) \\ N. - Major după afișarea simbolului pentru a merge la un alt șir. Următoarea funcție. vid sprintf (char flash, char flash * fmtstr [, arg1, arg2, ...]) Această caracteristică este cea mai interesantă pentru noi. Formează șirul și îl scrie într-o matrice. După ce putem să ne afișăm cu îndrăzneală. Cum functioneaza. Tempografie nesemnată \u003d 123; Șir de caractere nesemnate; Sprintf (string, "temp \u003d% 05d \\ n", temp); Lcd_ps (șir); Așa arată în viață.
Așa că am învățat să ieșim textul formatat pe ecranul LCD. Apoi, treceți pe scurt prin tipurile de transformare. i. d. - să retragă o zecimală întreagă cu un semn u. - Pentru a ieși zecimal fără semn e. -d.d e-d E. - pentru ieșirea unei substanțe cu un punct plutitor de tip -d.d e-d f. - pentru ieșirea unei substanțe cu un punct plutitor de tip -D.d. x. - Pentru retragerea la domnilor, scrisori mici X. - pentru retragerea în a șasea din forma unor scrisori mari c. - Pentru a afișa în simbol dacă scrieți % -05D. apoi semn "-" Forțată să se alinieze pe marginea stângă, iar pacificatorii nu vor fi înfundați. Dacă încercați să imprimați un număr de puncte plutitoare, apoi foarte mult surprins. Numărul nu este tipărit. În ambuscadă)) problema se află în setările compilatorului. Pentru ca compilatorul să înceapă să înțeleagă formatul pluti Trebuie să o configurați puțin. Pentru acest lucru Project-\u003e Configurare. și mergeți la fila C compilator.. În provincia (S) Caracteristici de tipărire: Alege float, lățime, precizie. Asta e tot. Încercați, experimentați. Vor fi întrebări, scrieți pe forum. Noroc!

Cititorul blogului nostru Mikhail ( mishadesh.) A creat o bibliotecă excelentă pentru a lucra cu LCD. Și a sugerat scrierea unui articol pentru a-și demonstra capacitățile. De fapt, astăzi este vorba despre acest lucru și vom fi discutate că funcțiile sunt implementate, precum și la sfârșitul articolului va exista un exemplu de lucru cu afișajul.

Ca de obicei, voi începe cu discuția de fier ... și apoi nu există cu adevărat nimic de vorbit. Ca și în primul articol privind lucrul cu afișaje (), vom folosi consiliul de depanare Mini STM32.. De fapt, conectarea afișajului, comenzile principale pentru scrierea datelor, secvența instrucțiunilor pentru inițializare - toate acestea sunt:), deci, acum mergem direct la discuția bibliotecii pentru a lucra cu afișaje grafice.

Iată o listă completă a caracteristicilor cu explicații:

Următoarea funcție, după cum se vede din numele său, modifică orientarea ecranului. Mai două poziții de ecran, respectiv două valori posibile de parametri orientare:

  • Orientare_portante.
  • Orientare_album.

Funcția atrage un simbol pe afișajul grafic, plasându-l pe coordonatele transmise funcției, precum și prin setarea culorii sale. Screening-ul de simbol corespunde unui font definit în fișier. font.c. (Fișierul merge în bibliotecă).

De la funcția Lcd_drawchar () Următoarea funcție urmează:

Vid lcd_drawstring (char * s, uint16_t x, uint16_t y, uint16_t culoare, uint16_t backcolor, uint8_t istransparent);

Aici este clar și fără cuvinte inutile 😉 funcția imprimă pe LCD. Linia de text. Baza pentru această funcție este cea anterioară - Lcd_drawchar ().

În plus față de simboluri și text, desigur, este necesar să avem capacitatea de a desena primitive grafice de bază, cum ar fi o linie sau un cerc. Pentru aceasta, este implementat următoarele:

Vid lcd_drawline (int x1, int y1, int x2, int y2, uint16_t culoare); Vid lcd_drawrect (int x1, int y1, int x2, int y2, uint16_t culoare, uint8_t umplut); Vid lcd_drawellipse (uint16_t x1, uint16_t y1, uint16_t r, uint16_t culoare);

Pentru a desena o linie, trebuie să treceți în funcția de coordonate a punctului de plecare, coordonatele punctului final, precum și culoarea dorită. Pentru un dreptunghi - coordonatele colțului din stânga sus și coordonatele colțului din dreapta jos (!). Ultimul parametru umplut - Stabilește dacă forma este necesară pentru a efectua. Unitatea înseamnă Da, cifra va fi vopsită cu culoarea selectată, zero - numai conturul figurii va fi desenat. Acest lucru este de înțeles) doar un cerc rămăsese - o funcție Desenelipse (). Aici, în loc de coordonatele începutului și sfârșitul (colțurile superioare / inferioare), transmitem centrul cercului și al razei ca argumente.

Ei bine, în cele din urmă, o altă caracteristică:

VOID LCD_FillsCr (culoarea UINT16_T);

Funcția vă permite să turnați ecranul cu o culoare solidă.

Toate caracteristicile enumerate sunt implementate în fișier. Gui_drv.c..

În plus față de acestea, biblioteca include funcții pentru scrierea datelor în afișaj ( Lcd_driver.c.), precum și fonturile deja menționate ( font.c.). După cum puteți vedea, totul este clar sortat în diferite fișiere, deci, în principiu, totul este foarte clar, deci haideți să mergem la exemplul practic!

Să ne ocupăm! Du-te la fișier. main.c.... Nu voi da complet codul de funcții de inițializare periferică, toate acestea pot fi vizualizate direct în dosar sau în articolul precedent, referirea la care a fost la începutul acestui articol 😉 funcția principal ():

Intradiriph (); initfsmc (); initlcd (); întârziere (10.000); lcd_fillscr (0xffff); întârziere (100); lcd_setorient (orientare_album); întârziere (100); lcd_drawstring ( "Biblioteca pentru LGDP4532", 30, 30, 0x888F, 0x0000, 0); Lcd_drawrect (100, 100, 200, 200, 0x0000, 0); Lcd_drawrect (120, 120, 180, 180, 0xFF00, 1); Lcd_drawelpse (150, 150, 50, 0xf000); În timp ce (1) ())

Începem cu inițializarea, vopsea ecranul cu alb și instalați orientarea peisajului ecranului. Și acum mergeți să atrageți grafica)

Afișim șirul pe ecran, precum și două dreptunghiuri și cercuri. Rezultatul este evident:

Evident, totul funcționează bine

Deci, la asta astăzi, vă mulțumiți, mulțumită lui Mikhail pentru munca făcută și materialele prezentate. Iată contactele autorului Bibliotecii:

Skype - mishadesh.

Poștă - [E-mail protejat]

Asta-i tot, mulțumesc pentru atenția ta, la întâlniri ambigue!

General

Placa de depanare STM32L-DISCOVERY are un indicator de cristal lichid (LCD, LCD English. Afișaj de cristal lichid), având șase semne segmentate, 4 semne de colon (colon), 4 puncte (DP), 4 benzi (bar). Toate segmentele sunt combinate în complexul de grup, COM1, COM2, COM3 în 24 de segmente. Fiecare grup are propriul său "fir partajat".


Consiliul de depanare este instalat Microcontroler STM32L152Rbt6. Microcontrolerul are un controler LCD încorporat, care controlează indicatoarele de cristale lichide monocrome.
Controler LCD:

  1. Vă permite să configurați frecvența de actualizare (rata cadrelor - frecvența cu care sunt actualizate informațiile de pe ecranul LCD)
  2. Suporta modul de control static și multiplex
  3. Suportă instalarea software-ului de contrast
  4. Vă permite să utilizați mai multe niveluri de tensiune de control (până la patru)
  5. Utilizează tamponarea dublă care vă permite să actualizați datele din registrele LCD_RAM \u200b\u200bîn orice moment al programului, fără a întrerupe integritatea informațiilor despre afișare

Registrele de memorie a controlerului LCD

În microcontrolerul STM32L152RB, sunt evidențiate registrele speciale LCD_RAM, informațiile stocate în care corespund grupului segmentului COM0 - COM3. Fiecare grup corespunde a două 32 de registre de descărcare de gestiune. Un astfel de număr de registre permite microcontrolerului să controleze ecranul LCD cu un număr mare de segmente decât instalarea pe placa de depanare.

Pentru a controla ecranul LCD cu 176 segmente, 4 grupe de COM0 - COM3 sunt utilizate pentru 44 de segmente, 8 grupe de COM0 - COM7 în 40 de segmente sunt utilizate pentru a controla LCA cu 320 de segmente fiecare.



Placa de depanare STM32L-Discovery utilizează LCD cu 96 de segmente separate de 4 grupe de com0 - COM3 în 24 de segmente fiecare.


LCD-ul de pe placa de depanare STM32L-DISCOVERY este conectat astfel încât biții S40, S41 ai celei de-a doua registre LCD_RAM \u200b\u200bsă fie utilizate în fiecare grup și biții S0-S27 ai primelor registre LCD_RAM. Pentru a reduce numărul de registre utilizate, informațiile din biții S40-S43 vor fi înregistrați în biții liberi S28-S31 utilizând funcția de relocare (remapping).

Unitatea de separatoare de frecvență

Unitatea de separatoare de frecvență (generator de frecvență) vă permite să obțineți diferite frecvențe ale cadrelor (rate de cadre) pe ecranul LCD în intervalul de la 32 kHz la 1 MHz. Ca sursă de semnal de tactare poate fi utilizat:
  1. Generator extern NF cu o frecvență de 32 kHz (LSE. Viteză redusă externă)
  2. Generator HF intern cu o frecvență de 37 kHz (LSI. Viteză scăzută internă)
  3. Generator RF extern cu divizori de frecvență cu 2,4,8 și 16 și frecvența maximă de 1 MHz. (HSE. Viteză de mare viteză)
Pentru a obține sincronizarea exactă și reducerea deplasării tensiunii DC prin segmentele LCD, sursa semnalului de tact trebuie să aibă stabilitate. Semnalul de tactare LCDCLK intră în controlerul LCD. Frecvența semnalului de ceas este împărțită, în conformitate cu coeficienții de fisiune care sunt stabiliți de biții PS, registrul LCD_FCR DIV (Registrul de control al cadrului). Frecvența rezultată la ieșirea blocului de divizor de frecvență este calculată prin formula:

F CK_DIV \u003d F LCDCLK / (2 PS * (16 + DIV))

Rata cadrelor se calculează cu formula:

F frame \u003d f ck_div * datorie

În cazul în care taxa este coeficientul de umplere - raportul dintre durata pulsului în perioada sa. În timpul unui cadru de pe LCA, informațiile din registrele LCD_RAM \u200b\u200b[X], LCD_RAM \u200b\u200bși TD sunt afișate secvențial. Pentru ecranul LCD instalat pe placa de depanare, într-un singur cadru, controlerul LCD trebuie să obțină informații de la 4 grupe de segmente COM0 - COM3, prin urmare, durata impulsului de control pentru un grup va fi de 1/4 din durata cadrului, adică. duty \u003d 1/4.

Management LCD.

Există două moduri de a controla modul de control LCD - Static și modul de control multiplex. Cu afișaj static, fiecare segment de descărcare a indicatorului este conectat la ieșirea microcontrolerului. În ceea ce privește LCD, pe bordul de depanare STM32LDISCovery, va dura 6 * 14 \u003d 84 concluzii de microcontroler (cu excepția colonului, punctelor și benzilor). Datorită utilizării unui astfel de concluzii, legătura unei alte periferie va fi imposibilă. Microcontrolerul STM32L152RB are 64 de ieșiri. Când modul de control multiplex (modul de control dinamic), aceleași segmente de descărcare a indicatorului sunt combinate în grupuri. Afișarea informațiilor apare datorită aprinderii alternative a segmentelor de descărcare a indicatorului, cu o frecvență care nu este percepută de ochiul uman.

Controlul multiplex vă permite să gestionați un număr mare de segmente. În loc de control separat de fiecare element, ele pot adăuga pe linie și coloane (com și seg), astfel simplificate de circuitul de comandă, deoarece Fiecare segment nu necesită propria linie de control. Pentru a permite segmentul selectat, este necesar să se prezinte diferența în potențialele COM și SEG. Un exemplu de funcționare a primei descărcări de indicatoare ("1:" este afișată pe indicator):


Prima cifră a indicatorului la momentul t 0


Prima cifră a indicatorului la momentul t 1


Prima cifră a indicatorului la momentul t 2


Schema generală pentru conectarea segmentelor la concluziile LCD


Diagrama conexiunii concluziilor ecranului LCD în porturile microcontrolerului

Pentru liniile SEG, se utilizează tensiunea de control, numărul de niveluri fiind determinat de coeficientul de părtinire. LCD-ul de pe bordul de depanare utilizează modul de control multiplex cu datory \u003d 1/4 și bias \u003d 1/3. Valoarea taxei și bias sunt instalate prin intermediul registrului LCD_cr (registrul de control) în taxe și biți de părtinire.

Practică

Configurarea porturilor microcontrolerului

Pentru a controla porturile LCD, microcontrolerul trebuie să fie configurat în consecință:
  1. La ieșire
  2. Utilizați funcția alternativă AF 11 (funcția alternativă)
  3. Au frecvențe de ieșire în port 400 kHz
  4. Utilizați modul push-pull
  5. Fără strângerea rezistențelor
Când portul funcționează într-o funcție alternativă, tamponul de ieșire a portului este controlat de semnalele periferice. Fișierul antetului STM32LXX.H CMSIS Biblioteca conține o descriere a tuturor registrelor periferice, precum și a structurilor de acces.

Constatările LCD sunt conectate la porturile GPIOA (PA1-PA3, PA8-PA10, PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3, PC6-PC11) din microcontroler. Pentru lucrarea LCA, trebuie să trimiteți un semnal de ceas la porturile selectate. Tactul porturilor GPIO ale microcontrolerului provine din magistrala RCC AHB (resetare și control al ceasului) - sisteme de tact și resetare. Un semnal de ceas este realizat prin instalarea biților corespunzători în registrul RCC_AHBENR (AHB pentru activarea ceasului periferic).

Înregistrarea RCC_AHBENR (cifra prezintă primele 15 deversări)

Pentru gpioa, gpiob, porturi gicioc, este necesar să se stabilească 1 până la 0, 1, 2 de descărcări de înregistrare.

Apoi, voi furniza codul de înregistrare a informațiilor în registru utilizând Bitmascus și folosind coduri hexazecimale. Utilizarea Bitmask este mai convenabilă, dar munca cu coduri hexazecimale vă permite să înțelegeți esența de a lucra cu registrele.

RCC-\u003e AHBENR | \u003d (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEEN); sau RCC-\u003e AHBENR \u003d 0x7; / * 0x7 \u003d 111 * /

Pentru a specifica modurile de funcționare a portului, se utilizează registrul GPIOX_MOTER (Registrul modului GPIO PORT) (X \u003d A..H). Toate descărcările de înregistrare sunt grupate în grupul MODERY, unde numărul Y PINA este portul corespunzător. Porturile trebuie să fie configurate într-un mod de funcționare alternativă, adică Într-un grup responsabil pentru IDU, setați valoarea de 10. Pentru portul GPIOA, trebuie să ajustați pinii 1-3.8-10.15, adică set de 1 până la 3,5,7,17,19,21,31 deversari.


Înregistrați GPIOX_MODER (Registrul modului PORT GPIO)

GPIOA-\u003e MODER | \u003d (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER3_1 | gpi_moder_moder8_1 | gpi_moder_moder9_1 | gpi_moder_moder10_1 | gpi_moder_moder15_1); sau gpio-\u003e moder \u003d 0x802A00A8; / * 0x802A00A8 \u003d 1000 0000 0010 1010 0000 0000 1010 1000 * /
Porturile microcontrolerului trebuie traduse în modul push-pull. Pentru a face acest lucru, trebuie să setați 1 în Registrul GPIOX_OTYER (Registrul de ieșire a portului GPIO) 1 în descărcările responsabile pentru PIN-uri.


GPIOX_OTYPER (Registrul de ieșire a portului GPIO)

Gpio-\u003e oyper_ot_1 | gpi_otyper_ot_2 gpio_otyper_ot_3 | gpi_otyper_ot_8 | gpi_otiper_ot_9 | gpi_otyper_ot_10 | gpi_otyper_ot_15); sau gpio-\u003e oyper & \u003d ~ 0x0000870E; / * 0x870E \u003d 1000 0111 0000 1110 * /
Ambele opțiuni afectează știfturile selectate. (PIN-urile 1-3.8-10.15 sunt configurate pentru portul GPIA). Dacă aveți nevoie să traduceți toți pinii portuari la modul Push-Pull, puteți scrie la valoarea înregistrării:
Gpio-\u003e oyper \u003d 0x0;
Pentru a specifica frecvența de ieșire a informațiilor în port, se utilizează registrul GPIOX_OSPEEDR (Registrul de viteză GPIO Port Register). Toate descărcările de înregistrare sunt grupate în grupuri ospeedry, unde Y este un număr de pin al portului corespunzător. În această lucrare trebuie instalat frecvența de 400 kHz. Într-un grup responsabil pentru UDI, setați valoarea 00.


Înregistrați GPIOX_OSPEEDR (Registrul de viteză de ieșire a portului GPIO)

Gpio-\u003e ospeeedr & ~ (gpi_ospeeder_ospeedr1 | gpi_ospeeder_ospeedr2 gpio_ospeeder_ospeedr3 | gpi_ospeeder_ospeedr8 | gpi_ospeeder_ospeedr9 gpio_ospeeder_ospeedr10 | gpi_ospeeder_ospeedR15); sau gpio-\u003e ospeeedr & ~ 0xc03f00fc; / * 0xc03F00FC \u003d 1100 0000 0011 1111 0000 0000 1111 1100 * /
Dacă trebuie să setați frecvența de ieșire la portul de 400 kHz pentru toți pinii, puteți scrie la valoarea înregistrării:
Gpio-\u003e ospeeedr \u003d 0x0;
Pentru a dezactiva tragerea rezistoarelor de pull-up, trageți în jos pentru știfturile selectate, utilizați registrul GPIOX_PUPDR (GPIO PORT PORLUP / DOWN DOWN DOWN). Toate descărcările de înregistrare sunt grupate în grupuri de puști, unde Y este numărul portului corespunzător. Pentru a dezactiva rezistențele de strângere într-un grup care este responsabil pentru IDU este setat la 00.


Înregistrați GPIOX_PUPDR (Registrul GPIO Pull-up / Pull-Down)

Gpio-\u003e pupdr & ~ (gpi_pupdr_pupdr1 | gpi_pupdr_pupdr2 | gpi_pupdr_pupdr3 | gpi_pupdr_pupdr8 | gpi_pupdr_pupdr9 | gpi_pupdr_pupdr10 | gpi_pupdr_pupdr15); sau gpio-\u003e pupdr & ~ 0xc03f00fc; / * 0xc03F00FC \u003d 1100 0000 0011 1111 0000 0000 1111 1100 * /
Dacă aveți nevoie să dezactivați rezistențele de strângere pentru toți pinii, puteți scrie la valoarea înregistrării:
Gpio-\u003e pupdr \u003d 0x0;
Pentru a utiliza o funcție alternativă pentru porturile microcontrolerului, se utilizează două registre GPIOX_AFRL (registru alternativ GPIO), care este responsabil pentru știfturile mai tinere (de la 0 la 7) și GPIOX_AFRH (GPIO alternativ funcția ridicată), care este responsabilă pentru știfturile mai vechi (de la 8 la 15). Toate descărcările de înregistrare sunt grupate în grupurile de arbore și destinate articulelor, unde Y este un număr de pin al portului corespunzător. Porturile trebuie să fie configurate să utilizeze funcția alternativă AF11, pentru aceasta în grupul care este responsabil pentru IDU trebuie să fie setat la 1011.


Înregistrați GPIOX_AFRL (Funcția Alternativă GPIO Registru scăzut)


Înregistrați GPIOX_AFRH (GPIO alternativ funcția Înregistrare)

Pentru a face acest lucru, scrieți la registre:
Gpio-\u003e AFR \u003d 0xBB0; / * 0xbbb0 \u003d 1011 1011 1011 0000 * / gpio-\u003e AFR \u003d 0xb0000BBB; / * 0xb0000bbb \u003d 1011 0000 0000 0000 0000 1011 1011 1011 * /

AFR \u003d 0xBBB0 - scrie o valoare la Registrul GPIOX_AFRL.
AFR \u003d 0xb0000BBB - scrie o valoare la Registrul GPIOX_AFRH.

Setările porturilor PINS GPIOB sunt produse în mod similar.

Configurarea controlerului LCD

Când lucrați cu controlerul LCD, ca și în cazul unei alte periferie, este necesar să trimiteți un semnal de ceas. Un semnal de ceas este, de asemenea, alimentat în sistemul de gestionare a alimentării. Sistemul de controler și de gestionare a energiei pentru tactare Utilizați magistrala APB1. Pentru a rezolva ceasul în registrul RCC_APB1ENR (APB1 pentru activarea ceasului periferic), este necesar să setați 1 în 9 și 28 de descărcări.


Înregistrarea RCC_APB1ENR (APB1 pentru activarea ceasului periferic)

RCC-\u003e APB1ENR | \u003d RCC_APB1ENR_PWREN | RCC_APB1ENR_LCDEN; sau RCC-\u003e APB1ENR | \u003d 0x10000200; / * 0x10000200 \u003d 1 0000 0000 0000 0000 0010 0000 0000 * /
Pentru a lucra controlerul LCD, trebuie să specificați sursa semnalelor de ceas. Sursa este specificată în Registrul RCC_CSR. În mod implicit, înregistrarea din acest registru este interzisă. În Registrul de gestionare a energiei PWR_CR (Registrul de control al puterii PWR), protecția împotriva scrierii în registrul RCC_CSR este eliminată. RCC_CSR Controlul înregistrării RTC Surse de ceas și controlerul LCD
Înregistrarea la Registrul RCC_CSR este permisă instalarea 1 în 8 categoria de înregistrare a pwr_cr.


Registrul PWR_CR (Registrul de control al puterii PWR)

Pwr-\u003e cr | \u003d pwr_cr_dbp; sau pwr-\u003e cr | \u003d 0x100; / * 0x100 \u003d 1 0000 0000 * /
Pentru a schimba sursa de ceasornică a controlerului LCD (și a ceasului RTC), trebuie mai întâi să resetați sursa de a se potrivi cu setul de biți RTCRST (setarea 1-23 categorie) în registrul RCC_CSR (Registrul de control / stare).


Registrul RCC_CSR (registru de control / stare)

RCC-\u003e CSR | \u003d RCC_CSR_RTCRST;
Sau scrierea unei valori în registru utilizând operatorul "| \u003d", deoarece Valoare de către
Registrul implicit este diferit de 0x0:
RCC-\u003e CSR | \u003d 0x800000; / * 0x800000 \u003d 1000 0000 0000 0000 0000 0000 * /
Pentru a selecta o nouă sursă de ceas, trebuie să eliminați bitul RTCRST:
RCC-\u003e CSR & \u003d ~ RCC_CSR_RTCRST; sau RCC-\u003e CSR & ~ 0x800000;
Sursa semnalului de ceas este selectată un generator LC extern. Pentru a activa generatorul în registrul RCC_CSR, trebuie să instalați Bits LSEON (set 1 până la 8 categorie):
RCC-\u003e CSR | \u003d RCC_CSR_LSEON; sau RCC-\u003e CSR | \u003d 0x100; / * 0x100 \u003d 1 0000 0000 * /
După pornirea generatorului, este necesar pentru o perioadă de timp să o stabilizați. Pregătirea generatorului este verificată de setarea de biți din LSERDY în Registrul RCC_CSR:
În timp ce (rcc-\u003e csr & rcc_csr_lserdy));
Selectarea LC-ului extern al generatorului ca sursă de ceas este efectuată prin setarea în grupul RTCSL al valorilor RCC_CSR 01:
RCC-\u003e CSR | \u003d RCC_CSR_RTCSEL_LSE; sau RCC-\u003e CSR | \u003d 0x10000; / * 0x10000 \u003d 01 0000 0000 0000 0000 * /
În controlerul LCD, trebuie să instalați modul de bias necesare. Pentru a face acest lucru, în Registrul LCD_cr (Registrul de control LCD), trebuie să setați valoarea de 10 la grupul de bias. Înainte de a instala bitul, este necesar să ștergeți biții de la "gunoi".


Registrul LCD_cr (Registrul de control LCD)

Resetați biți:
Lcd-\u003e cr & ~ lcd_cr_bias; sau lcd-\u003e cr & ~ 0x60;
Selectarea modului de bias \u003d 1/3 utilizând Bitmascus:
Lcd-\u003e cr | \u003d lcd_cr_bias_1; sau lcd-\u003e cr | \u003d 0x40;
Instalați modul datory \u003d 1/4. Pentru a face acest lucru, aruncați mai întâi toți biții:
Lcd-\u003e cr & ~ lcd_cr_duty; sau lcd-\u003e cr & ~ 0x1c;
Instalați valoarea 011 în grupul de datorie LCD_CR pentru
Duty \u003d 1/4:
Lcd-\u003e cr | \u003d lcd_cr_duty_0 | lcd_cr_duty_1; sau lcd-\u003e cr | \u003d 0xc;
Activați caracteristica de relocare a concluziei. Pentru a face acest lucru, setați 1 până la 7 categorii de înregistrare LCD_CR:
LCD-\u003e CR | \u003d LCD_CR_MUX_SEG; sau LCD-\u003e CR | \u003d 0X80;
Instalați valorile coeficienților de fisiune de frecvență a ceasului LCDCLK. Valorile coeficienților sunt setate în registrul LCD_FCR (Registrul de control al cadrelor LCD). În primul rând, curățăm și toți biții, apoi instalați dorit.


Registrul LCD_FCR (Registrul de control al cadrului LCD)

LCD-\u003e FCR & \u003d ~ lcd_fcr_ps; LCD-\u003e FCR & \u003d ~ lcd_fcr_div; sau LCD-\u003e FCR & \u003d ~ 0x3c00000; LCD-\u003e FCR & \u003d ~ 0x3C0000;
Valorile coeficienților de fisiune a frecvenței ceasului sunt setate la CK_PS \u003d LCDCLK / 16, CK_DIV \u003d CK_PS / 17. Pentru a face acest lucru, setați 1 până la 24 și în 18 Categorii:
LCD-\u003e FCR | \u003d 0x1040000; / * 0x1040000 \u003d 1 0000 0100 0000 0000 0000 0000 * /
Pentru a instala nivelul dorit de contrast, este necesar să setați valoarea 010 la grupul SS, de asemenea, biți pre-despicați de la valori vechi:
LCD-\u003e FCR & \u003d ~ lcd_fcr_cc; LCD-\u003e FCR | \u003d LCD_FCR_CC_1; sau lcd-\u003e fcr & ~ 0x1c00; LCD-\u003e FCR | \u003d 0x800; / * 0x800 \u003d 1000 0000 0000 * /
După instalarea tuturor valorilor, este necesar pentru o anumită perioadă de timp la sincronizarea registrului LCD_FCR. Sincronizarea registrului este verificată de instalarea BIT FCRSF în Registrul LCD_SR (Registrul de stare LCD).

LCD_SR Înregistrare (Registrul de stare LCD)

În timp ce (! (LCD-\u003e SR & LCD_SR_FCRSR));
Ca o sursă de tensiune pentru ecranul LCD, selectați convertorul intern Step-up la Formular V LCD. Pentru a face acest lucru, prima categorie a registrului LCD_cr (Registrul de control LCD) este setat la 0:
LCD-\u003e Cr & ~ lcd_cr_cr_vsel; sau lcd-\u003e cr & ~ 0x2;
Permisiunea lucrării controlerului LCD este setată la 1 din 0 categorie de înregistrare LCD_cr (Registrul LCD de control):
LCD-\u003e CR | \u003d LCD_CR_LCDEN; sau lcd-\u003e cr | \u003d 0x1;
După instalare ca sursă de convertizor intern de tensiune internă, este necesar să așteptați disponibilitatea sa. Pregătirea este verificată prin instalarea hardware a bit-ului RDY în Registrul LCD_SR (Registrul de stare LCD):
În timp ce (lcd-\u003e sr & lcd_sr_rdy));
După rezolvarea activității controlerului LCD, este necesar să așteptați disponibilitatea sa. Pregătirea este verificată de instalarea hardware a biților ENS în Registrul LCD_SR (Registrul de stare LCD):
În timp ce (! (Lcd-\u003e sr & lcd_sr_ens));

Formarea imaginii pe ecranul LCD

Toate segmentele indicatoare sunt combinate în grupul COM0 - COM3 în 24 de segmente (Seg0-SEG23). Informațiile despre segmente sunt stocate în registrele LCD_RAM \u200b\u200bale controlerului LCD. Cablajul plăcii de circuite imprimate este de așa natură încât numărul de segmente nu corespund categoriilor de registre LCD_RAM.

Pentru a afișa 1 În prima descărcare a ecranului LCD, trebuie să lumineze segmentele 1B, 1C. Segmentul 1B aparține grupului COM0, segmentul 1C aparține grupului COM1. În consecință, informațiile despre ele trebuie înregistrate în registrele RAM (LCD_RAM0), RAM (LCD_RAM2), respectiv. Segmentul 1B îndeplinește ieșirea LCD LCDSEG22, informații despre care sunt stocate în registrul RAM SEG40 (LCD_RAM1). Folosind funcția de relocare, segmentul LCDSEG22 va fi responsabil pentru înregistrarea RAM SEG28 (LCD_RAM0). Segmentul 1C este răspuns la ieșirea LCD LCDSEG1, informații despre care sunt stocate în descărcarea SEG1 a registrului RAM (LCD_RAM2).

LCD-\u003e RAM \u003d 0x10000000; / * 0x10000000 \u003d 1 0000 0000 0000 0000 0000 0000 0000 * / LCD-\u003e RAM \u003d 0x2; / * 0x2 \u003d 10 * /
Înainte de înregistrarea valorilor în registrele de memorie, este necesar să se verifice dacă transferul de date anterior la LCD este finalizat. Aceasta este verificată de UDR (Actualizare solicitare de afișare) a Registrului LCD_SR (Registrul de stare LCD). Controlerul LCD are două tampoane de ieșire, informațiile sunt introduse în primul tampon și sunt afișate pe ecranul LCD de la cel de-al doilea tampon. Bitul UDR este setat în timpul transferului de la primul tampon din al doilea, protejând registrele LCD_RAM:
În timp ce (LCD-\u003e SR & LCD_SR_UDR);
După înregistrarea informațiilor din registrele LCD_RAM, trebuie să instalați bitul UDR în Registrul LCD_SR (Registrul de stare LCD) (set 1 din 2 categorii):
Lcd-\u003e sr | \u003d lcd_sr_udr; sau lcd-\u003e sr | \u003d 0x4; / * 0x4 \u003d 100 * /

Adesea, utilizatorul trebuie să primească câteva informații vizuale de la dispozitivul electronic. Dacă informațiile pot fi reprezentate în formă simbolică, atunci una dintre opțiunile pentru afișarea sa este utilizarea indicatorilor cristalini lichizi (LCD sau LCD în denumirea străină). Astăzi vom vorbi despre indicatorii simbolici implementați pe baza controlorilor Hitachi. HD44780, Samsung Ks 0066 și similare.

De exemplu, voi lua în considerare LCD-ul Winstar Wh1602D-TMI-CT #Am pentru experimente. Am menționat deja acest LCD în articol, evoluțiile grafice ale căror folosesc astăzi.

Detaliat fișa cu date. la LCD Winstar Wh1602D-TMI-CT:

Categorie: Documente
Data: 22.03.2015

Schema LCD simplificată poate fi reprezentată după cum urmează:

Baza indicatorului este o matrice cristalină lichidă, alimentând tensiunea la elementul, putem observa punctul de pe ecran. În ecranul LCD simbolic, această matrice constă dintr-un anumit număr de cunoștințe, care sunt grupate pe linii și coloane. Dimensiunea cunoștinței în pixeli este adesea de 5 × 8 puncte. Marcarea indicatorului meu conține numerele 1602 și acest lucru înseamnă că indicatorul meu poate afișa 2 linii de câte 16 caractere în fiecare. De asemenea, codificarea include: codul producătorului și tipul indicatorului, evidențierea, culoarea, tabelul de cod și așa mai departe.

Sistemul de indicatori Winstar.

Afișați / ascundeți designațiile de decriptare

1. Codul producătorului: Winstar Afișare Co, Ltd

2. Tipul indicatorului:

  • H. - simbol (semn sintetic)
  • C. - culoarea grafică cu matrice pasivă CSTN (Colorstn.)
  • X. - grafic cu matrice Tab. (Bandă de legătură automată.- Cristal montat pe o bandă de substrat de poliamidă cu trei straturi)
  • O. - grafic cu matrice Cog. (Chip pe sticlă. - Crystal pe sticlă)

3. Rezoluția orizontală:

  • numărul de caractere din șirul pentru indicatoare de tip simbolic
  • numărul de puncte orizontale pentru indicatorii grafici

4. Rezoluția verticală:

  • numărul rândului pentru indicatorii de tip simbolic
  • numărul de puncte verticale pentru indicatorii grafici

5. Codul modelului

  • Codifică dimensiunile geometrice utilizate de controler

6. Tipul iluminării:

  • N. - fără lumină de fundal
  • B. - electrolumină, culoarea strălucirii - albastru
  • D. - electrolumină, culoarea strălucirii - verde
  • W. - electrolumină, culoarea strălucirii - alb
  • Y. - LED, culoare strălucitoare - galben-verde
  • A. - LED, culoarea strălucirii - chihlimbar
  • R. - LED-uri, culoare strălucitoare - roșu
  • G. - LED-uri, culoarea strălucitoare - verde
  • T. - LED, culoare strălucitoare - alb
  • P. - LED-uri, culoarea strălucitoare - albastru
  • F. - Lampa catodică rece (CCFL), culoare strălucitoare - alb

7. Tehnologie de fabricare a LCD

  • B. - TN Gray, pozitiv
  • N. - TN, negativ
  • G. - STN Gray, pozitiv
  • Y. - STN galben-verde, pozitiv
  • M. - STN albastru, negativ
  • F.- FSTN pozitiv
  • T. - FSTN negativ
  • H. - HTN Gray, pozitiv
  • I. - HTN Negru, negativ
  • Tn. (Răsucite nematice) -structura cristalelor are un tip spiralat
  • Stn. (Super-răsucite nematice.) - matrix constând din elemente LCD cu transparență variabilă
  • FSTN. (Film compensat STN.) — Stn.- Satchase cu compensare a filmului. Tehnologia vă permite să obțineți un unghi de vizionare mărită.
  • Htn. (Homeotropic răsucite nematică.) - Afișările se bazează pe o răsucire moleculară mai puternică (de obicei 110 °) comparativ cu cea răsucite convenționale TN (90 °). Dați un unghi larg de vizionare și un contrast îmbunătățit. Conform caracteristicilor, tehnologia STN este superioară. Tensiunea scăzută de funcționare (2,5V și cel mai mic cost din cauza nematică le face să utilizeze benefice în dispozitive independente portabile).

8. Polarizator, unghi de vizualizare, interval de temperatură de lucru

  • A. - Rf, 6:00, N.T.
  • D. - RF, 12:00, N.T.
  • G. - Rf, 6:00, W.T.
  • J. - Rf, 12:00, W.T.
  • B. - TF, 6:00, N.T.
  • E.- TF, 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.
  • I. - TM, 6:00, W.T.
  • L. - TM, 12:00, W.T.
  • Rf. (LCD reflectorizant.) - Indicatorul LCD care funcționează exclusiv pe reflexia luminii. Imaginea este vizibilă numai cu suficientă iluminare externă.
  • Tf. - (LCD transflectante.) Afișaj hidrocristalic, care reflectă lumina și îl emite (strălucește pe cont propriu).
  • TM (Transmisiv LCD.) - Lumina vine prin ecranul LCD din partea de iluminare din spate. Are o imagine de înaltă calitate în interior și este de obicei foarte scăzută (ecran negru) cu lumina soarelui.
  • N.t. - Intervalul normal de temperatură 0 ... + 50 ° C W.T. - interval de temperatură avansată -20 ... + 70 ° C

9. Opțiuni suplimentare

Primele două caractere sunt un semn:

  • CT./Cp. - Latina / Cyrilic
  • EP./Et./Ee./I./CE/Es. - Latina / Europeană
  • JP./JT./Js./Jn. - Latina / Japoneză
  • HP./HS. - Ebraică

3-4 Simboluri:

  • T. - compensarea temperaturii
  • E. sau Ez. - Edge BL (LED-urile de fundal sunt situate în jurul perimetrului). Simbolul poate fi, de asemenea, absent.
  • K.sau LIVRE. - Eco BL (LED-urile sunt situate în partea din spate a ecranului uniform)
  • V. - sursa încorporată de tensiune negativă
  • N. - fără o sursă de tensiune negativă încorporată

10. Informații suplimentare:

# - compatibilitatea cu standardul Rohs.

Notă (Producător de microcircitate controler):

  • xS. - Samsung
  • xP. - Sunplus.
  • xT - Sitronix.
  • xe. - Epson.
  • xu. - UMC.

Folosind acest sistem de denumiri, am aflat că m-am dovedit a fi un semn al indicatorului de sinteză Winstar.Afișarea caracterelor în 16 coloane și 2 rânduri utilizând controlerul KS. 0066 sau analogul său, cu iluminare cu LED-uri de culoare albă în jurul perimetrului, cu negativ albastru transmisiv.- satisfacerea, un unghi de revizuire "timp de 6 ore", intervalul de lucru al temperaturilor -20 ... + 70 ° C cu un semnector, inclusiv chirilic și compatibil cu standardul Rohs. (Nu conține componente dăunătoare sănătății, se pare că, la asamblarea, a fost utilizat un lipitor fără plumb).

Indicatori bazați pe controlori HD44780., KS066U.

Gestionează funcționarea indicatorului Indicator încorporat. În calitate de controler efectuează de obicei Hitachi HD44780., Samsung KS0066U. sau numeroasele lor analogi și clone. În indicatorii produse de compania rusă se utilizează controlerul utilizat PCF8576.

Controlerul are celule de memorie cu o singură octet ( Ddram.), conținutul căruia sunt afișate de fapt pe ecran în conformitate cu tabelul înregistrat în Cgram.. Celulele de memorie sunt, de obicei, mai familiarizate în LCD, deci adresarea cunoștinței trebuie să vă uitați fișa cu date.. Trebuie să înregistrăm codul simbolului dorit în poziția dorită și tot restul controlerului o vor face singur.

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

Tabelul de cod al indicatorului constă, de obicei, din trei părți:

  • 0 × 00-0 × 07 - Signogenerator descărcabil, caractere create de dvs.
  • 0 × 20-0xFF - Coduri ASCII Simboluri standard setate și alfabet în limba engleză
  • 0xa0-0xff - simboluri ale alfabetelor naționale și altele, cu simbolurile de sărituri ale coincidificării pe un inventar cu limba engleză.

Afișați / ascundeți tabelul de cod, chirilic

Exemplu: Codul HEX 0x4a corespunde literei J., Cod 0xb6 - scrisoare j..

Cele patru biți mai vechi definesc coloana simbolului selectat din tabel, rândul mai tânăr. Puteți crea propriul tabel de simbol prin scrierea acestuia Cgram.. Fiecare caracter necesită 5 octeți (pe coloana Byte). Unitățile din fiecare pate determină pixeli semnificativi. De exemplu, pentru codarea numerelor pixelno 8 Această secvență este necesară: 0x6c, 0 × 92.0 × 92.0 × 92.0x6c.

Convertor chirilic

Pentru a converti textul care conține caracterele chirilice din codurile corespunzătoare tabelului de mai sus, introduceți textul dorit în caseta de text. Rezultatul obținut mai jos poate fi copiat și utilizat în programele dvs. pentru a emite acest text pe ecranul LCD.

Text original:

Text codificat:

Tabelul de cod al echipei:

D7. D6. D5. D4. D3. D2. D1. D0. Scop
0 0 0 0 0 0 0 1 Curățarea ecranului AC.\u003d 0, adresarea AC. pe Ddram.
0 0 0 0 0 0 1 AC.\u003d 0, adresându-se pe Ddram., schimbările sunt resetate, începutul liniei este adresat la început Ddram.
0 0 0 0 0 1 I / D.S.Selectează direcția schimbării cursorului sau a ecranului
0 0 0 0 1 D.C.B.Selectează modul de afișare
0 0 0 1 S / C.R / L.Cursor / Echipa de schimbare a ecranului
0 0 1 Dl.N.F.Definiția parametrilor de mătură și lățimea autobuzului de date
0 1 AC5.AC4.AC3.AC2.AC1.AC0.Atribuirea unui contor AC. Adrese din regiune Cgram.
1 AC6.AC5.AC4.AC3.AC2.AC1.AC0.Atribuirea unui contor AC. Adrese din regiune Ddram.

Tabelul valorilor de pavilion:

Steag Valoare
I / D.Distribuția contorului de adrese AC, 0 - Scădere, 1 - Creșterea
S.Ecranul conținutului de funcționare a conținutului. 0 - Schimbarea ecranului nu este efectuată, 1 - După înregistrarea în DDRAM a următorului cod, ecranul se schimbă în direcția determinată de pavilionul I / D: 0 - dreapta, 1 - stânga. Schimbarea nu modifică conținutul DDRAM. Numai indicatorii de locație internă ai începutului vizibil al rândului în schimbarea DDRAM
S / C.Flag-comanda, producând împreună cu steagul R / L, operația de schimbare a afișajului (precum și în cazul precedent, fără modificări în DDRAM) sau cursor. Definește obiectul offset: 0 - Cursor mutat, 1 - ecran schimbat
R / L.Flag-comenzi care produce împreună cu steagul S / C al schimbării ecranului sau cursorului. Specifică direcția de schimbare: 0 - stânga, 1 - dreapta
D / L.Flag care definește o lățime a autobuzului de date: 0 - 4 descărcare, 1 - 8 descărcări
N.Modul de scanare a imaginilor pe ecranul LCD: 0 - o linie, 1 - două linii
F.Simboluri matrice de dimensiune: 0 - 5 × 8 puncte, 1 - 5 × 10 puncte
D.Disponibilitatea imaginii: 0 - Dezactivat, 1 - inclus
C.Cursor sub forma unui simbol al sublinierelor: 0 - Oprit, 1 - Activat
B.Cursor sub forma unei cunoștințe pâlpâitoare: 0 - Off, 1 - Activat

Numirea concluziilor controlerului:

  • DB0.-DB7. - Responsabil pentru datele primite / ieșire
  • Rs. - Nivel ridicat înseamnă că semnalul de la ieșirile DB0-DB7 este datele, comanda redusă
  • W / R. - Determină direcția datelor (citire / scriere). Deoarece operarea datelor de citire din indicator este de obicei nerevendicată, poate fi instalată continuu la această intrare scăzută
  • E. - Impulsul cu o durată de cel puțin 500 ms pe această ieșire determină semnalul de citire / scriere a datelor de la bornele DB0-DB7, RS și W / R
  • V 0. - folosit pentru a specifica imaginea de contrast
  • A, K. - iluminare de fundal (anod și catod) dacă este disponibilă
  • V cc. și GND. - indicatorul LCD nutrițional

Pentru a controla indicatorul LCD, este necesar să 6 sau 10 ieșiri, în funcție de modul de selectare a modului de schimb de date de 4 sau 8 biți. Pentru a reduce numărul dorit de concluzii, microcontrolerul poate fi operat într-un mod de 4 biți. În acest caz, în concluziile Db4.-DB7. Indicatorul va fi transmis mai întâi de patru biți / comenzi de date mai vechi, apoi cei mai tineri patru biți. Concluzii DB0.-DB3. va rămâne neutilizată.

Un controler controlează numărul limitat de caractere. Pe panoul indicator, pot exista 1, 2, 4, 8 controlori și, eventual, și mai mult.

Documentație privind controlorii:

Controlor Samsung KS0066U.

Controlor Hitachi HD44780.

Categorie: Documente
Data: 21.03.2015

tradus în opțiunea rusă:

Categorie: Documente
Data: 21.03.2015

Indicatorii diferiților producători sunt adesea compatibili și interschimbabili, dar pot diferi în dimensiunile, fixarea, contactele și alte lucruri. Prin urmare, atunci când alegeți pentru o nouă dezvoltare și căutarea înlocuirilor, contactați cataloagele producătorului:

Tabelul de compatibilitate al indicatorilor LCD simbolici ai diferiților producători:

Afișați / ascundeți tabelul

Un fel Winstar. TOPI Vizibilitate de date. Bolymin. Soare. Microtes. Wintek. Ampition.
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, ajustare de contrast și lumină de fundal

Trebuie să fie legate de polaritatea conexiunii de alimentare la indicatorul LCD, precum și să se asigure că tensiunea de alimentare se află în intervalul de +4,5 ... 5,5 V. Atitudinea inadecvată față de aceste momente poate duce la o ieșire indicatoare!

Indicatorii LCD vă permit să reglați contrastul utilizând un divizor de tensiune. Înainte de afișarea datelor la indicator, trebuie să vă asigurați că controlul stresului este în intervalul de funcționare. Evaluările rezistoarelor diferă în diferite producător de indicatori LCD. Unele modele de indicatori de pe bord oferă locuri pentru a instala un astfel de divizor și suficient pentru a avea ratele de rezistență necesare. Contrastul indicatorului depinde de unghiul de vizualizare. Dacă indicatorul "doisprezece ore", uitați-vă la un astfel de indicator în așa fel încât să fie sub nivelul ochiului, dacă "ore zero", atunci este proiectat să observe nivelul ochiului (perpendicular pe planul de ecran) . Dacă indicatorul "Sixclock", atunci acesta trebuie utilizat atunci când este observat mai sus nivelul ochiului. Acest moment trebuie luat în considerare la cumpărare.

Nutriție Backlighting

Dacă indicatorul are o lumină de fundal, atunci concluziile sunt de obicei localizate separat. Este necesar să îl conectați la putere, setarea unui curent nominal utilizând un rezistor extern R (a se vedea fișa cu date.). Pentru indicatorul meu, tensiunea nominală pe anod trebuie să fie de 3,5 V și un curent de 40 mA. Bazat pe aceasta, denumirea rezistorului de limitare a curentului:

Unii producători de pe placa indicator oferă un loc pentru a instala un astfel de rezistor, trebuie să aveți valoarea nominală corespunzătoare, mai aproape de jumper și lumina de fundal va fi alimentată de la aceeași linie ca indicatorul.

Cum evaluați această publicație?

  • Modulul FC-113 se face pe baza cipului PCF8574T, care este un registru de deplasare pe 8 biți - "Expander" a ieșirilor pentru anvelopa serială a I2C. În figura microcircuitului este desemnat DD1.
  • R1 este un rezistor rapid pentru a regla contrastul afișajului LCD.
  • J1 Jumper este folosit pentru a porni lumina de fundal a afișajului.
  • Concluzii 1 ... 16 sunt utilizate pentru a conecta modulul la ieșirile afișajului LCD.
  • Platformele de contact A1 ... A3 sunt necesare pentru a schimba adresa I2C a dispozitivului. Așezați jumperii corespunzători, puteți schimba adresa dispozitivului. Tabelul prezintă conformitatea adreselor și a jumperiilor: "0" corespunde ruperii lanțului, "1" - jumperului reglabil. Implicit, toate cele 3 jumpers Deschidere și adresa dispozitivului 0x27..

2 Arduino LCD Display Schema de conectarepotrivit I2C.

Conectarea unui modul la Arduino este efectuată standard pentru magistrala I2C: ieșirea SDA a modulului este conectată la portul analog A4, ieșirea SCL în portul analog al A5 Arduino. Modulul este alimentat de tensiune +5 V de la Arduino. Modulul în sine este legat de concluziile 1 ... 16 cu concluziile corespunzătoare de la 1 ... 16 pe ecranul LCD.


3 Biblioteca pentru muncăpotrivit I2C.

Acum aveți nevoie de o bibliotecă pentru a lucra cu LCD prin interfața I2C. Puteți utiliza, de exemplu, acest lucru (link în "Descărcați codul de probă și biblioteca" Row).

Arhiva descărcată Lichidcrystal_i2cv1-1.rar. Dezarhivați în dosar \\ Biblioteci \\care este situat în directorul Arduino IDE.

Biblioteca suportă un set de funcții standard pentru ecrane LCD:

FuncţieScop
Cristal lichid () creează o variabilă de tip Liquidcrystal și acceptă setările de afișare (numere PIN);
începe () inițializarea afișajului LCD, setarea parametrilor (număr de rânduri și simboluri);
clar () curățarea ecranului și returnați cursorul în poziția inițială;
acasă () returnați cursorul în poziția inițială;
sETCURSOR () instalarea cursorului în poziția specificată;
scrie () afișează un simbol pe ecranul LCD;
imprimare () afișează textul de pe ecranul LCD;
cursor () arată cursorul, adică Subclinarea la următorul scaun de simbol;
nocursor () ascunde cursorul;
blink () cursor intermitent;
noblink () anulați clipește;
nodisplay () opriți afișajul în timp ce economisiți toate informațiile afișate;
afișaj () porniți afișajul în timp ce salvați toate informațiile afișate;
scrolldisplayleft () derulând conținutul afișajului în prima poziție în stânga;
scrolldisplayright () derulând conținutul afișajului pe o poziție în dreapta;
autoscroll () includerea contractării automate;
noutoscrl () oprirea automobilului;
de la stânga la dreapta () specifică direcția textului de la stânga la dreapta;
de la dreapta la stanga () direcția textului de pe dreapta spre stânga;
createchar () creează un simbol personalizat pentru ecranul LCD.

4 Schiță pentru ieșirea textuluipe ecranul LCD prin intermediul magistralei I2C

Să deschidem eșantionul: Probele de fișiere LiquidCrystal_i2C CustomChars Și îl aliniază puțin. Vom retrage un mesaj la sfârșitul căruia va fi simbolul intermitent. În comentariile la cod, toate nuanțele de schiță sunt comentate.

#Include. // Conectați firul #include biblioteca // Conectăm Biblioteca LCD #define PrintByte (args) scrie (args); // uint8_t inima \u003d (0x0.0xa, 0x1f, 0x1f, 0xe, 0x4.0x0); // simbolul masca de biți "inima" lichidcrystal_i2c LCD (0x27, 16, 2); // setați adresa 0x27 pentru afișarea LCD 16X2 setup () () () () lcd.init (); // inițializarea afișajului LCD LCD.Backlight (); // porniți iluminarea ecranului LCD.CreateChar (3, inimă); // creați simbolul inimii în celula de memorie 3 LCD.Home (); // Puneți cursorul în colțul din stânga sus, în poziția (0,0) LCD.! "); // Imprimați șirul de text LCD.SetCursor (0, 1); // transferați un cursor la un șir 2, un simbol 1 LCD.print ("I"); // Imprimați un mesaj pe o linie 2 LCD.Printbyte (3); // Imprimați simbolul "Inima", situat în celula 3-a LCD.Print ("Arduino"); } buclă void () () // clipește ultimul simbol LCD.SetCursor (13, 1); // Cursor de transfer la șir 2, simbol 1 lcd.print ("\\ t"); Întârzierea (500); LCD.SETCRSOR (13, 1); // Cursor de transfer la șir 2, simbol 1 lcd.print (""); Întârzierea (500); }

Apropo, personajele înregistrate de echipă lcd.createchar ();, rămân în afișarea afișajului chiar și după oprire, pentru că Înregistrate în 1602 MFU.

5 Crearea personajelor propriipentru afișarea LCD.

Mai puține detalii, luați în considerare problema creării propriilor personaje pentru ecrane LCD. Fiecare simbol de pe ecran este alcătuit din 35 de puncte: 5 în lățime și 7 în înălțime (+1 șir de rezervă pentru subcotare). În linia 6 a schiței date, am stabilit o serie de 7 numere: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Transformăm numerele 16-Riche în binar: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Aceste numere nu sunt altceva decât o mască de biți pentru fiecare dintre cele 7 linii ale simbolului, unde "0" denotă un punct de lumină și "1" - întuneric. De exemplu, un simbol de inimă specificat sub formă de mască de biți va privi pe ecran așa cum se arată în figură.

6 Ecran LCD de biroupe autobuzul i2c

Conduceți schița în Arduino. Pe ecran va apărea inscripția cu cursorul intermitent la sfârșit.


7 Ce este "pentru"anvelopă i2c.

Ca bonus, luați în considerare o diagramă temporară a ieșirii caracterelor latine "A", "B" și "C" pe afișajul LCD. Aceste caractere sunt disponibile în afișajul ROM și sunt afișate pur și simplu prin transmiterea adresei acestora. Diagrama este eliminată din concluziile RS, RW, E, D4, D5, D6 și D7, adică Deja după convertorul FC-113 "Bus paralel I2C". Putem spune că plonjați puțin "mai adânc" în "fier".


Diagrama temporară a ieșirii caracterelor latine "A", "B" și "C" pe ecranul LCD 1602

Diagrama arată că caracterele care se află în DVLD ROM (vezi pagina 9.11, referința de mai jos) este transmisă de două ghee, primul dintre care definește tabelul coloanei de masă, iar al doilea este numărul liniei. În același timp, datele "Snatch" pe partea din față E. (Activare) și linia Rs. (Selectare înregistrare, selectare Înregistrare) se află într-o stare de unitate logică, ceea ce înseamnă transfer de date. Starea scăzută de stare a liniei RS înseamnă transmiterea instrucțiunilor pe care le vedem înainte de transferul fiecărui simbol. În acest caz, codul instrucțiunii de retur a transportului este transmis în poziția (0, 0) LCD afișaj, după cum puteți afla, de asemenea, studiind descrierea tehnică a afișajului.

Și încă un exemplu. În această perioadă, diagrama arată ieșirea simbolului "Heart" de pe afișajul LCD.


Din nou, primele două impulsuri Permite Instrucțiuni conforme Acasă () (0000 0010 2) - Întoarcerea căruciorului în poziția (0; 0) și al doilea două - ieșirea de pe afișajul LCD stocat în celula de memorie 3 10 (0000 0011 2) simbolul "inima" (instrucțiuni lcd.createchar (3, inima); Schiță).