- 16x2 matrični LCD krmilnik IC HD44780:
- Prikaz znaka po meri na 16x2 LCD:
- Programiranje in delovna razlaga:
- Vezja in preskušanje vezij:
V prejšnji vadnici smo se naučili, kako povezati LCD 16 * 2 z mikrokrmilnikom PIC. Če ste začetnik mikrokrmilnika PIC, vam priporočamo, da ga opravite, preden nadaljujete. Prej smo se tudi naučili osnov PIC z uporabo utripajočega programa LED in časovnikov v PIC Microcontroller. Tukaj lahko preverite vse vaje o učenju mikrokrmilnikov PIC s pomočjo prevajalnika MPLABX in XC8.
V tej vadnici naj bo bolj zanimivo z ustvarjanjem lastnih znakov po meri in njihovo prikazovanje na našem LCD zaslonu z mikrokrmilnikom PIC16F877A PIC. Obstaja tudi nekaj vnaprej določenih večinoma uporabljenih znakov po meri, ki jih daje IC HD44780A, videli bomo tudi, kako jih lahko uporabimo. Kot je razloženo v prejšnji vadnici, ima naš LCD vgrajen krmilnik Hitachi HD44780, ki nam pomaga prikazati znake. Vsak znak, ki ga prikažemo, je že vnaprej določen v ROM-u HD44780 IC. Pred prikazom znaka na LCD-ju bomo izvedeli več o LCD-krmilniku IC HD44780.
16x2 matrični LCD krmilnik IC HD44780:
Če želimo prikazati znak po meri, moramo nekako povedati IC, kako bo izgledal znak po meri. Da bi to naredili, bi morali vedeti o treh vrstah spominov, ki so v notranjosti IC krmilnika LCD HD44780:
ROM generatorja znakov (CGROM): To je samo za branje pomnilnik, ki, kot rečeno, vsebuje vse vzorce vnaprej določenih znakov. Ta ROM se razlikuje od posamezne vrste vmesniške IC, nekateri pa imajo lahko vnaprej določen znak po meri.
Prikaz podatkovnega pomnilnika RAM (DDRAM): to je pomnilnik z naključnim dostopom. Vsakič, ko prikažemo znak, bo njegov vzorec pridobljen iz CGROM-a in prenesen v DDRAM ter nato postavljen na zaslon. Poenostavljeno bo DDRAM imel vzorce vseh znakov, ki so trenutno prikazani na LCD zaslonu. Tako za vsak cikel IC ne potrebuje podatkov iz CGROM-a in pomaga pri pridobivanju kratke frekvence posodobitve
RAM generatorja znakov (CGRAM): To je tudi pomnilnik z naključnim dostopom, zato lahko iz njega pišemo in beremo podatke. Kot že ime pove, bo ta pomnilnik tisti, ki ga lahko uporabimo za ustvarjanje znaka po meri. Za lik moramo oblikovati vzorec in ga zapisati v CGRAM, ta vzorec lahko po potrebi preberemo in prikažemo na zaslonu.
Zdaj, ko smo osnovno razumeli, katere vrste pomnilnika so na voljo v vmesniku IC HD44780. Oglejmo si njegov podatkovni list, da bomo razumeli nekaj več.
Kot je razvidno iz podatkovnega lista, je HD44780 IC zagotovil 8 lokacij za shranjevanje vzorcev po meri v CGRAM, tudi na desni lahko vidimo, da je nekaj vnaprej določenih znakov, ki se lahko prikažejo tudi na našem LCD zaslonu. Poglejmo, kako to lahko storimo.
Prikaz znaka po meri na 16x2 LCD:
Za prikaz znaka po meri moramo najprej ustvariti vzorec zanj in ga nato shraniti v CGRAM. Ker imamo knjižnične funkcije že pri sebi, bi to moralo biti enostavno z nekaj preprostimi ukazi. Tukaj je Knjižnica za funkcije LCD, vendar smo tukaj kopirali vse funkcije knjižnice v sam program, zato te glave ni treba vključiti v naš program. V tem članku si oglejte tudi osnovno delovanje LCD-ja in njegove izrezke.
Prvi korak je ustvarjanje vzorca ali znaka po meri. Kot vemo, je vsak znak kombinacija 5 * 8 pik. Izbrati moramo, katera pika (piksla) naj bo visoka in katera naj ostane nizka. Preprosto narišite polje, kot je prikazano spodaj, in zasenčite regije glede na vaš značaj. Moj lik tukaj je moški (upam, da je videti tako). Ko je enkrat zasenčen, preprosto zapišite enakovredno binarno vrednost vsakega bajta, kot je prikazano spodaj.
Preprosto postavite '1' na zasenčeno območje in '0' na nesenčeno območje za vsak bajt in to je, da je naš vzorec po meri pripravljen. Podobno sem naredil 8 kod po vzorcu za 8 pomnilniških prostorov, ki predstavljajo CGROM. Navedeni so v spodnji tabeli.
S.NO: |
Znak po meri |
Koda vzorca |
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 |
Opomba: Ni obvezno naložiti vseh 8 presledkov, predvidenih v CGRAM.
Programiranje in delovna razlaga:
Zdaj so naše vzorčne kode pripravljene, le naložiti jih moramo v CGRAM LCD-ja in prikazati z uporabo mikrokrmilnika PIC. Če jih želite naložiti v CGRAM, lahko oblikujemo niz elementov 5 * 8 in vsak bajt naložimo s pomočjo zanke ' for '. Niz kode vzorca je prikazan spodaj:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Koda za pomnilniški prostor CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00, CGRAM pomnilniški prostor 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Koda za pomnilniški prostor CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000AM // Koda za C space 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Koda za pomnilniški prostor CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Koda za pomnilniški prostor CGRAM 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Koda za pomnilniški prostor CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Koda za pomnilniški prostor CGRAM 8};
Vsak pomnilniški prostor je naložen s spoštovanim vzorcem znakov. Če želite ta vzorec naložiti v HD44780 IC, je treba sklicevati na podatkovni list HD44780, vendar so le vrstice ukaza mogoče uporabiti za nastavitev naslova CGRAM
// *** Naloži char po meri v CGROM *** ////// Lcd_Cmd (0x04); // Nastavimo naslov CGRAM Lcd_Cmd (0x00); //.. nastavimo naslov CGRAM za (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Vrnitev na domačo stran Lcd_Cmd (2); //.. vrnitev na domačo stran // *** Nalaganje char po meri *** //////
Tu je vsaka binarna vrednost znotraj zanke " for" naložena v CGROM. Ko je vzorec naložen, se lahko znaki po meri prikažejo tako, da preprosto pokličete lokacijo vzorca s pomočjo void funkcije Lcd_Print_Char (char data), kot je prikazano spodaj.
Lcd_Print_Char (0); // Prikaži znak po meri 0 Lcd_Print_Char (1); // Prikaži znak po meri 1 Lcd_Print_Char (2); // Prikaži znak po meri 2 Lcd_Print_Char (3); // Prikaži znak po meri 3 Lcd_Print_Char (4); // Prikaži znak po meri 4 Lcd_Print_Char (5); // Prikaži znak po meri 5 Lcd_Print_Char (6); // Prikaži znak po meri 6 Lcd_Print_Char (7); // Prikaži znak po meri 7
Natisni vnaprej določen poseben znak:
IC HD44780 ima nekaj vnaprej določenih posebnih znakov, shranjenih v DDROM-u. Te znake lahko neposredno natisnete na zaslon, tako da se sklicujete na njihovo binarno vrednost v obrazcu.
Na primer: binarna vrednost znaka "ALFA" je 0b11100000. Kako to pridobiti, lahko razberemo s spodnje slike, prav tako lahko dobite vrednost za kateri koli poseben znak, ki je vnaprej določen v IC.
Ko je binarna vrednost znana, lahko ustrezen znak natisnemo na zaslon s preprosto funkcijo voc Lcd_Print_Char (char data), kot je prikazano spodaj, Lcd_Print_Char (0b11100000); // binarna vrednost alfa iz podatkovnega lista
Popolna koda tega projekta je navedeno v nadaljevanju v poglavju zakonika, preverite tudi podrobno video pojasnilo konec tega učbenika.
Vezja in preskušanje vezij:
Ta projekt nima dodatnih zahtev glede strojne opreme, preprosto smo uporabili iste povezave iz prejšnje vadnice za povezovanje LCD-jev in uporabili isto ploščo, ki smo jo ustvarili v Vadnici za utripanje LED. Kot vedno simuliramo program s pomočjo Proteusa, da preverimo naš izhod.
Ko simulacija deluje po pričakovanjih, omogoča neposredno zapisovanje kode v našo strojno opremo. Rezultat programa naj bo približno tak:
Tako lahko na LCD zaslonu 16 x 2 prikažete poljubne znake po meri z uporabo mikrokrmilnika PIC s prevajalnikom MPLABX in XC8. Tukaj si oglejte tudi našo celotno serijo učenja PIC Microcontroller Learning.