Zaslonske enote so najpomembnejše izhodne naprave v vdelanih projektih in elektronskih izdelkih. 16x2 LCD je ena najpogosteje uporabljenih zaslonskih enot. LCD 16x2 pomeni, da sta v vrstici dve vrstici, v katerih je na vrstico mogoče prikazati 16 znakov, vsak znak pa zavzame 5X7 matričnega prostora na LCD-ju. V tej vadnici bomo povezali 16X2 LCD modul z mikrokrmilnikom 8051 (AT89S52). Povezava LCD-ja z mikrokrmilnikom 8051 se novincem morda zdi precej zapletena, a po razumevanju koncepta bi bila videti zelo preprosta in enostavna. Čeprav si lahko vzame čas, ker morate razumeti in na mikrokrmilnik priključiti 16 nožic LCD. Najprej torej razumimo 16 nožic LCD modula.
Lahko ga razdelimo v pet kategorij, napajalni zatiči, kontrastni zatiči, nadzorni zatiči, zatiči za podatke in zatiči z osvetlitvijo ozadja.
Kategorija |
Pin NO. |
Pripnite ime |
Funkcija |
Napajalni zatiči |
1. |
VSS |
Ground Pin, povezan z Ground |
2. |
VDD ali Vcc |
Napetostni pin + 5V |
|
Kontrastni pin |
3. |
V0 ali VEE |
Nastavitev kontrasta, priključen na Vcc skozi spremenljiv upor. |
Kontrolni zatiči |
4. |
RS |
Register Izberi pin, RS = 0 ukazni način, RS = 1 Podatkovni način |
5. |
RW |
Zatiči za branje / pisanje, RW = 0 Način pisanja, RW = 1 način branja |
|
6. |
E |
Omogoči, LCD mora biti omogočen z visokim do nizkim impulzom |
|
Podatkovni zatiči |
7-14 |
D0-D7 |
Podatkovni zatiči, shrani podatke za prikaz na LCD-prikazovalniku ali navodila za ukaz |
Zatiči za osvetlitev ozadja |
15. |
LED + ali A |
Za napajanje osvetlitve ozadja + 5V |
16. |
LED- ali K |
Osvetlitev ozemljitve |
Vsi zatiči so po svojem imenu in funkcijah jasno razumljivi, razen krmilnih zatičev, zato so razloženi spodaj:
RS: RS je zatič za izbiro registra. Če pošiljamo nekaj podatkov za prikaz na LCD-zaslonu, ga moramo nastaviti na 1. In postavili ga bomo na 0, če pošiljamo kakšno ukazno navodilo, kot je čiščenje zaslona (šestnajstiška koda 01).
RW: To je zatič za branje / pisanje, nastavili ga bomo na 0, če bomo nekaj podatkov zapisovali na LCD. In jo nastavite na 1, če beremo z modula LCD. Na splošno je to nastavljeno na 0, ker nam ni treba brati podatkov z LCD-ja. Včasih je treba prebrati samo eno navodilo »Pridobite stanje LCD«.
E: Ta zatič se uporablja za omogočanje modula, ko mu damo impulz od visokega do nizkega. Dati je treba impulz 450 ns. Ta prehod iz VISOKEGA v NIZKO naredi modul Omogočen.
V LCD-ju je nekaj prednastavljenih navodil za ukaze, ki smo jih uporabili v spodnjem programu za pripravo LCD-ja (v funkciji lcd_init ()). Nekaj pomembnih navodil za ukaz je spodaj:
Hex koda |
Ukaz za register navodil LCD |
0F |
LCD vklopljen, kurzor vklopljen |
01 |
Čist zaslon |
02 |
Vrniti se domov |
04 |
Zmanjšaj kazalko (premakni kurzor v levo) |
06 |
Povečaj kurzor (pomakni kurzor v desno) |
05 |
Prestavite zaslon v desno |
07 |
Prikaz prestavite v levo |
0E |
Zaslon je vklopljen, kurzor utripa |
80 |
Prisili kazalko na začetek prve vrstice |
C0 |
Prisili kazalko na začetek druge vrstice |
38 |
2 vrstici in 5 × 7 matrica |
83 |
Položaj kazalke 1, položaj 3 |
3C |
Aktivirajte drugo vrstico |
08 |
Zaslon IZKLOP, kazalec IZKLOPLJEN |
C1 |
Skok na drugo vrstico, položaj 1 |
OC |
Prikaz VKLOPLJEN, kurzor IZKLOPLJEN |
C1 |
Skok na drugo vrstico, položaj 1 |
C2 |
Skok na drugo vrstico, položaj 2 |
Shema vezja in razlaga
Shema vezja za povezavo LCD z mikrokrmilnikom 8051 je prikazana na zgornji sliki. Če imate osnovno znanje o 8051, potem morate vedeti o EA (PIN 31), XTAL1 in XTAL2, RST zatiču (PIN 9), Vcc in Ground Pin mikrokrmilnika 8051. Te zatiče sem uporabil v zgornjem vezju. Če o tem nimate pojma, vam priporočam, da preberete ta članek Povezava LED z mikrokrmilnikom 8051, preden začnete uporabljati povezavo LCD.
Torej smo poleg teh zgornjih nožic povezali še podatkovne nožice (D0-D7) LCD-ja z mikrokrmilnikom Port 2 (P2_0 - P2_7). In krmilite zatiče RS, RW in E na zatič 12,13,14 (zatič 2,3,4 priključka 3) mikrokrmilnika.
PIN 2 (VDD) in PIN 15 (osvetlitev ozadja) LCD-ja sta priključena na napetost (5v), PIN 1 (VSS) in PIN 16 (ozadje ozadja) pa na tla.
Zatič 3 (V0) je povezan z napetostjo (Vcc) prek spremenljivega upora 10k za nastavitev kontrasta LCD. Srednji krak spremenljivega upora je priključen na PIN 3, druga dva kraka pa na napetost in ozemljitev.
Razlaga kode
Kodo sem poskušal razložiti s komentarji (v sami kodi).
Kot sem že razložil glede ukaznega načina in podatkovnega načina, lahko vidite, da smo med pošiljanjem ukaza (funkcija lcd_cmd) nastavili RS = 0, RW = 0 in impulz HIGH to LOW dobi E, tako da je 1, nato 0 Tudi pri pošiljanju podatkov (funkcija lcd_data) na LCD smo nastavili RS = 1, RW = 0 in E-impulzu HIGH to LOW damo 1 do 0. Ustvarjena je bila funkcija msdelay () za ustvarjanje zamude v milisekundah in se v programu pogosto pokliče, se pokliče tako, da ima LCD-modul dovolj časa za izvajanje notranje operacije in ukazov.
Za tiskanje niza je bila ustvarjena zanka while, ki vsakič pokliče funkcijo lcd_data, da natisne znak do zadnjega znaka (null terminator- '\ 0').
Za pripravo LCD-zaslona smo uporabili funkcijo lcd_init () z uporabo prednastavljenih navodil za ukaz (razloženo zgoraj).