- 16x2 dotmatrix LCD-controller IC HD44780:
- Visning af en brugerdefineret karakter på 16x2 LCD:
- Programmering og arbejdsforklaring:
- Kredsløbstilslutninger og test:
I vores tidligere vejledning har vi lært, hvordan man bruger et 16 * 2 LCD-interface med PIC Microcontroller. Vi anbefaler dig at gå igennem det, før du går videre, hvis du er nybegynder i PIC-mikrocontroller. Tidligere har vi også lært det grundlæggende i PIC ved hjælp af LED-blinkende program og timere i PIC Microcontroller. Du kan her tjekke alle vejledningerne i Learning PIC Microcontrollers ved hjælp af MPLABX og XC8 compiler.
Lad os i denne vejledning gøre det mere interessant ved at oprette vores egne brugerdefinerede tegn og vise dem på vores LCD-skærm ved hjælp af PIC16F877A PIC Microcontroller. Der er også nogle foruddefinerede mest brugte brugerdefinerede tegn givet af selve HD44780A IC, vi vil også se, hvordan vi kan bruge dem. Som forklaret i vores tidligere tutorial har vores LCD en Hitachi HD44780-controller indlejret i den, som hjælper os med at vise tegn. Hvert tegn, som vi viser, er allerede foruddefineret inde i ROM'en på HD44780 IC. Vi lærer om LCD-controller IC HD44780, inden vi viser tegn på LCD.
16x2 dotmatrix LCD-controller IC HD44780:
For at få vist et brugerdefineret tegn skal vi på en eller anden måde fortælle IC, at hvordan det brugerdefinerede tegn vil se ud. For at gøre det skal vi vide om de tre typer minder, der findes i HD44780 LCD-controller IC:
Character Generator ROM (CGROM): Det er den skrivebeskyttede hukommelse, som som nævnt tidligere indeholder alle mønstre for de tegn, der er foruddefineret inde i den. Denne ROM vil variere fra hver type interface IC, og nogle kan have noget foruddefineret brugerdefineret karakter med sig.
Display Data RAM (DDRAM): Dette er en tilfældig adgangshukommelse. Hver gang vi viser et tegn, hentes dets mønster fra CGROM og overføres til DDRAM og placeres derefter på skærmen. For at sige det enkelt vil DDRAM have mønstrene på alle tegn, der aktuelt vises på LCD-skærmen. På denne måde behøver IC ikke at hente data fra CGROM og hjælper med at få en kort opdateringsfrekvens
Tegngenerator RAM (CGRAM): Dette er også en tilfældig adgangshukommelse, så vi kan skrive og læse data fra den. Som navnet antyder, vil denne hukommelse være den, der kan bruges til at generere det brugerdefinerede tegn. Vi er nødt til at danne et mønster til tegnet og skrive det i CGRAM, dette mønster kan læses og vises på skærmen, når det er nødvendigt.
Nu, da vi fik en grundlæggende forståelse af de typer hukommelse, der findes i HD44780 interface IC. Lad os se på databladet for at forstå lidt mere.
Som databladet antyder, har HD44780 IC leveret som 8 placeringer til at gemme vores brugerdefinerede mønstre i CGRAM, også til højre kan vi se, at der er nogle foruddefinerede tegn, som også kan vises på vores LCD-skærm. Lad os se, hvordan vi kan gøre det.
Visning af en brugerdefineret karakter på 16x2 LCD:
For at få vist et brugerdefineret tegn skal vi først generere et mønster til det og derefter gemme det i CGRAM. Da vi allerede har biblioteksfunktionerne med os, skal det være let at gøre dette med nogle enkle kommandoer. Her er biblioteket til LCD-funktioner, men her har vi kopieret alle biblioteksfunktionerne i selve programmet, så det er ikke nødvendigt at medtage denne headerfil i vores program. Se også denne artikel for grundlæggende LCD-arbejde og dens pinouts.
Det første trin er at generere et mønster eller det brugerdefinerede tegn. Som vi ved, er hvert tegn en kombination af 5 * 8 prikker. Vi er nødt til at vælge hvilken prik (pixel) der skal gå højt og hvilken der skal forblive lav. Du skal blot tegne et felt som nedenfor og skygge regionerne ud fra din karakter. Min karakter her er en stokmand (håber det ligner en). Når den er skyggefuld, skal du skrive den tilsvarende binære værdi for hver byte som vist nedenfor.
Du skal blot sætte en '1' på det skraverede område og en '0' på det ikke-skraverede område for hver byte, og det er det, vores brugerdefinerede mønster er klar. Tilsvarende har jeg lavet 8 brugerdefinerede mønsterkoder til vores 8 hukommelsesrum, der præsenterer det CGROM. De er anført i nedenstående tabel.
S.NO: |
Brugerdefineret karakter |
Mønster kode |
1 |
|
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
2 |
|
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
3 |
|
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
4 |
|
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
5 |
|
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
6 |
|
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
7 |
|
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
8 |
|
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Bemærk: Det er ikke obligatorisk at indlæse alle de 8 mellemrum, der findes i CGRAM.
Programmering og arbejdsforklaring:
Nu er vores mønsterkoder klar, vi skal bare indlæse dem til CGRAM på LCD og vise dem ved hjælp af PIC-mikrocontroller. For at indlæse dem i CGRAM kan vi danne et 5 * 8 array af elementer og indlæse hver byte ved hjælp af en ' for loop '. Matrixen med mønsterkode er vist nedenfor:
const usigneret kort Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Kode til CGRAM-hukommelsesplads 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00, CGRAM hukommelsesplads 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Kode til CGRAM hukommelsesplads 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00AM hukommelse, // kode til CG plads 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Kode til CGRAM-hukommelsesplads 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Kode til CGRAM-hukommelse 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Kode til CGRAM-hukommelsesplads 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Kode til CGRAM-hukommelsesrum 8};
Hvert hukommelsesrum er fyldt med dets respekterede karaktermønster. For at indlæse dette mønster i HD44780 IC skal dataarket for HD44780 henvises, men det er kun kommandolinjer, der kan bruges til at indstille adressen på CGRAM
// *** Indlæs brugerdefineret char i CGROM *** ////// Lcd_Cmd (0x04); // Indstil CGRAM-adresse Lcd_Cmd (0x00); //.. sæt CGRAM-adresse til (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Vend tilbage til hjemmet Lcd_Cmd (2); //.. vende tilbage til hjemmet // *** Indlæser brugerdefineret char komplet *** //////
Her indlæses hver binær værdi i ' for loop' i CGROM. Når mønsteret er indlæst, kan de brugerdefinerede tegn fås til at blive vist ved blot at ringe til mønsterets placering ved hjælp af ugyldigheden Lcd_Print_Char (char data) -funktionen som vist nedenfor.
Lcd_Print_Char (0); // Vis brugerdefineret karakter 0 Lcd_Print_Char (1); // Vis brugerdefineret karakter 1 Lcd_Print_Char (2); // Vis brugerdefineret karakter 2 Lcd_Print_Char (3); // Vis brugerdefineret karakter 3 Lcd_Print_Char (4); // Vis brugerdefineret karakter 4 Lcd_Print_Char (5); // Vis brugerdefineret karakter 5 Lcd_Print_Char (6); // Vis brugerdefineret karakter 6 Lcd_Print_Char (7); // Vis brugerdefineret karakter 7
Udskriv foruddefineret specialtegn:
HD44780 IC har nogle foruddefinerede specialtegn gemt i DDROM. Disse tegn kan udskrives direkte på skærmen ved at henvise til dens binære værdi i databladet.
For eksempel: Den binære værdi af tegnet "ALPHA" er 0b11100000. Hvordan man opnår dette kan forstås fra nedenstående figur, ligesom du kan få værdi for ethvert specialtegn, der er foruddefineret i IC.
Når den binære værdi er kendt, kan det tilsvarende tegn udskrives på skærmen ved blot at bruge den ugyldige Lcd_Print_Char (char data) -funktion som vist nedenfor, Lcd_Print_Char (0b11100000); // binær værdi af alfa fra datablad
Den komplette kode for dette projekt er angivet nedenfor i afsnittet Kode, se også detaljerede videoforklaringer i slutningen af denne vejledning.
Kredsløbstilslutninger og test:
Dette projekt har ikke yderligere hardwarekrav, vi har simpelthen brugt de samme forbindelser fra den forrige LCD-interface-tutorial og brugt det samme kort, som vi har oprettet i LED-blinkende tutorial. Lad os som altid simulere programmet ved hjælp af Proteus for at verificere vores output.
Når vi har simuleringen kørt som forventet, kan vi direkte brænde koden i vores hardwareopsætning. Programmets output skal være noget som dette:
Så det er sådan, du kan vise ethvert brugerdefineret tegn på 16x2 LCD ved hjælp af PIC Microcontroller med MPLABX og XC8 compiler. Tjek også vores komplette PIC Microcontroller Learning Series her.