Displayenheter er de viktigste utdataenhetene i innebygde prosjekter og elektronikkprodukter. 16x2 LCD er en av de mest brukte skjermenhetene. 16x2 LCD betyr at det er to rader der 16 tegn kan vises per linje, og hvert tegn tar 5X7 matriseplass på LCD. I denne opplæringen skal vi koble 16X2 LCD-modul til 8051 mikrokontroller (AT89S52). Grensesnitt LCD med 8051 mikrokontroller kan se ganske komplisert ut for nybegynnere, men etter å ha forstått konseptet vil det se veldig enkelt og enkelt ut. Selv om det kan ta tid å ta, fordi du trenger å forstå og koble 16 pins LCD til mikrokontrolleren. Så la oss først forstå de 16 pinnene på LCD-modulen.
Vi kan dele den i fem kategorier, Power Pins, contrast-pin, Control Pins, Data pins og Backlight pins.
Kategori |
Pin NO. |
Pin-navn |
Funksjon |
Strømpinner |
1 |
VSS |
Jordpinne, koblet til bakken |
2 |
VDD eller Vcc |
Spenningsstift + 5V |
|
Kontraststift |
3 |
V0 eller VEE |
Kontrastinnstilling, koblet til Vcc grundig en variabel motstand. |
Kontrollpinner |
4 |
RS |
Registrer Velg Pin, RS = 0 Kommandomodus, RS = 1 Datamodus |
5 |
RW |
Les / skriv pin, RW = 0 skrivemodus, RW = 1 Lesemodus |
|
6 |
E |
Aktiver, behov for høy til lav puls for å aktivere LCD-skjermen |
|
Datapinner |
7-14 |
D0-D7 |
Data Pins, Lagrer dataene som skal vises på LCD eller kommandoinstruksjonene |
Baklyspinner |
15 |
LED + eller A. |
For å drive bakgrunnsbelysning + 5V |
16 |
LED- eller K |
Bakgrunnsbelysning |
Alle pinnene er tydelig forståelige med navn og funksjoner, unntatt kontrollpinnene, så de blir forklart nedenfor:
RS: RS er PIN-koden for registervalg. Vi må sette den til 1 hvis vi sender noen data som skal vises på LCD-skjermen. Og vi vil sette den til 0 hvis vi sender en kommandoinstruksjon som å rydde skjermen (heksekode 01).
RW: Dette er lese / skrive-pin, vi setter den til 0 hvis vi skal skrive noen data på LCD-skjermen. Og sett den til 1 hvis vi leser fra LCD-modulen. Vanligvis er dette satt til 0, fordi vi ikke trenger å lese data fra LCD. Bare én instruksjon “Få LCD-status”, må leses noen ganger.
E: Denne pinnen brukes til å aktivere modulen når den får en høy til lav puls. En puls på 450 ns bør gis. Denne overgangen fra HØY til LAV gjør modulen AKTIV.
Det er noen forhåndsinnstilte kommandoinstruksjoner i LCD, vi har brukt dem i vårt program nedenfor for å forberede LCD (i lcd_init () -funksjonen). Noen viktige kommandoinstruksjoner er gitt nedenfor:
Hex-kode |
Kommando til LCD instruksjonsregister |
0F |
LCD PÅ, markør PÅ |
01 |
Tøm skjermbildet |
02 |
Vende hjem |
04 |
Reduser markøren (flytt markøren til venstre) |
06 |
Øk markør (flytt markøren til høyre) |
05 |
Skift skjerm til høyre |
07 |
Skift display til venstre |
0E |
Display PÅ, markøren blinker |
80 |
Tving markøren til begynnelsen av første linje |
C0 |
Tving markøren til begynnelsen av andre linje |
38 |
2 linjer og 5 × 7 matrise |
83 |
Markørlinje 1 posisjon 3 |
3C |
Aktiver andre linje |
08 |
Display AV, markør AV |
C1 |
Gå til andre linje, posisjon 1 |
OC |
Display PÅ, markør AV |
C1 |
Gå til andre linje, posisjon 1 |
C2 |
Gå til andre linje, posisjon 2 |
Kretsdiagram og forklaring
Kretsskjema for LCD-grensesnitt med 8051 mikrokontroller er vist i figuren ovenfor. Hvis du har grunnleggende forståelse av 8051, må du vite om EA (PIN 31), XTAL1 & XTAL2, RST-pin (PIN 9), Vcc og Ground Pin av 8051 mikrokontroller. Jeg har brukt disse pins i kretsen ovenfor. Hvis du ikke har noen anelse om det, anbefaler jeg deg å lese denne artikkelen LED-grensesnitt med 8051 mikrokontroller før du går gjennom LCD-grensesnitt.
Så i tillegg til disse ovennevnte pinnene, har vi koblet datapinnene (D0-D7) på LCD-skjermen til Port 2 (P2_0 - P2_7) mikrokontroller. Og kontrollpinnene RS, RW og E til pinnen 12,13,14 (pin 2,3,4 av port 3) til henholdsvis mikrokontroller.
PIN 2 (VDD) og PIN 15 (bakgrunnsbelysning) på LCD er koblet til spenning (5v), og PIN 1 (VSS) og PIN 16 (bakgrunnsbelysning bakken) er koblet til bakken.
Pin 3 (V0) er koblet til spenning (Vcc) via en variabel motstand på 10k for å justere LCD-kontrasten. Midtbenet på den variable motstanden er koblet til PIN 3, og de andre to benene er koblet til spenningsforsyning og jord.
Kode Forklaring
Jeg har prøvd å forklare koden gjennom kommentarer (i selve koden).
Som jeg har forklart tidligere om kommandomodus og datamodus, kan du se at mens du sender kommando (funksjon lcd_cmd), har vi satt RS = 0, RW = 0 og en HØY til LAV puls blir gitt til E ved å gjøre den 1, så 0 Også når vi sender data (funksjon lcd_data) til LCD har vi satt RS = 1, RW = 0 og en HØY til LAV puls blir gitt til E ved å gjøre den 1 til 0. Funksjon msforsinkelse () er opprettet for å skape forsinkelse i millisekunder. og kalles ofte i programmet, kalles det slik at LCD-modulen kan ha tilstrekkelig tid til å utføre den interne operasjonen og kommandoene.
Det er opprettet en stund-loop for å skrive ut strengen, som kaller lcd_data-funksjonen hver gang for å skrive ut et tegn til siste tegn (null terminator- '\ 0').
Vi har brukt lcd_init () -funksjonen for å gjøre LCD-skjermen klar ved å bruke forhåndsinnstilte kommandoinstruksjoner (forklart ovenfor).