Display-units zijn de belangrijkste uitvoerapparaten in embedded projecten en elektronicaproducten. 16x2 LCD is een van de meest gebruikte beeldschermen. 16x2 LCD betekent dat er twee rijen zijn waarin 16 karakters per regel kunnen worden weergegeven, en elk karakter neemt 5X7 matrixruimte op het LCD-scherm in. In deze tutorial gaan we de 16X2 LCD-module aansluiten op de 8051 microcontroller (AT89S52). Het aansluiten van een LCD met de 8051-microcontroller ziet er misschien vrij ingewikkeld uit voor nieuwkomers, maar na het begrijpen van het concept zou het er heel eenvoudig en gemakkelijk uitzien. Hoewel het misschien tijd kost, omdat u 16 pinnen van het LCD-scherm moet begrijpen en aansluiten op de microcontroller. Laten we dus eerst de 16 pinnen van de LCD-module begrijpen.
We kunnen het onderverdelen in vijf categorieën: Power Pins, Contrastpin, Control Pins, Data pins en Backlight pins.
Categorie |
Pin nr. |
Pin Naam |
Functie |
Power Pins |
1 |
VSS |
Aardpen, verbonden met aarde |
2 |
VDD of Vcc |
Spanningspin + 5V |
|
Contrasterende pin |
3 |
V0 of VEE |
Contrastinstelling, aangesloten op Vcc via een variabele weerstand. |
Controle pinnen |
4 |
RS |
Registreren Selecteer Pin, RS = 0 Commando-modus, RS = 1 Gegevensmodus |
5 |
RW |
Lees- / schrijfpin, RW = 0 Schrijfmodus, RW = 1 Leesmodus |
|
6 |
E. |
Inschakelen, een hoge naar lage puls moet het LCD-scherm inschakelen |
|
Gegevenspinnen |
7-14 |
D0-D7 |
Datapinnen, slaat de gegevens op die op het LCD-scherm of de opdrachtinstructies moeten worden weergegeven |
Backlight-pinnen |
15 |
LED + of A |
Om de achtergrondverlichting + 5V van stroom te voorzien |
16 |
LED- of K |
Achtergrondverlichting Grond |
Alle pinnen zijn duidelijk te begrijpen door hun naam en functies, behalve de besturingspinnen, daarom worden ze hieronder uitgelegd:
RS: RS is de register-selectie-pin. We moeten het op 1 zetten als we gegevens verzenden die op het LCD-scherm moeten worden weergegeven. En we zullen het op 0 zetten als we een commando-instructie sturen, zoals het scherm wissen (hex-code 01).
RW: Dit is de pin voor lezen / schrijven, we zullen het op 0 zetten als we wat gegevens op het LCD-scherm gaan schrijven. En zet het op 1, als we lezen vanaf de LCD-module. Over het algemeen staat dit op 0, omdat we geen gegevens van het LCD-scherm hoeven te lezen. Slechts één instructie "Get LCD status", moet een paar keer worden gelezen.
E: Deze pin wordt gebruikt om de module in te schakelen wanneer er een hoge naar lage puls aan wordt gegeven. Er moet een puls van 450 ns worden gegeven. Die overgang van HOOG naar LAAG maakt de module ENABLE.
Er zijn enkele vooraf ingestelde opdrachtinstructies in LCD, we hebben ze in ons programma hieronder gebruikt om de LCD (in lcd_init () functie) voor te bereiden. Enkele belangrijke opdrachtinstructies worden hieronder gegeven:
Hex-code |
Commando naar LCD-instructieregister |
0F |
LCD AAN, cursor AAN |
01 |
Helder beeldscherm |
02 |
Terug naar huis |
04 |
Verlagingscursor (cursor naar links verplaatsen) |
06 |
Verhogingscursor (cursor naar rechts verplaatsen) |
05 |
Display naar rechts verschuiven |
07 |
Display naar links verschuiven |
0E |
Display AAN, cursor knippert |
80 |
Forceer de cursor naar het begin van de eerste regel |
C0 |
Forceer de cursor naar het begin van de tweede regel |
38 |
2 regels en 5 × 7 matrix |
83 |
Cursorregel 1 positie 3 |
3C |
Activeer tweede regel |
08 |
Display UIT, cursor UIT |
C1 |
Spring naar de tweede regel, positie 1 |
OC |
Display AAN, cursor UIT |
C1 |
Spring naar de tweede regel, positie 1 |
C2 |
Spring naar tweede regel, positie 2 |
Schakelschema en uitleg
Het schakelschema voor LCD-interface met 8051-microcontroller wordt weergegeven in de bovenstaande afbeelding. Als je basiskennis hebt van 8051, dan moet je kennis hebben van EA (PIN 31), XTAL1 & XTAL2, RST-pin (PIN 9), Vcc en Ground Pin van 8051-microcontroller. Ik heb deze pinnen in het bovenstaande circuit gebruikt. Als je daar geen idee van hebt, raad ik je aan om dit artikel LED-interface met 8051 Microcontroller te lezen voordat je door de LCD-interface gaat.
Dus naast deze bovenstaande pinnen hebben we de datapinnen (D0-D7) van het LCD-scherm aangesloten op de Port 2 (P2_0 - P2_7) microcontroller. En controlepinnen RS, RW en E naar respectievelijk pin 12,13,14 (pin 2,3,4 van poort 3) van microcontroller.
PIN 2 (VDD) en PIN 15 (Backlight supply) van LCD zijn verbonden met spanning (5v), en PIN 1 (VSS) en PIN 16 (Backlight ground) zijn verbonden met aarde.
Pin 3 (V0) is verbonden met spanning (Vcc) via een variabele weerstand van 10k om het contrast van LCD aan te passen. Het middelste been van de variabele weerstand is verbonden met PIN 3 en de andere twee benen zijn verbonden met de voedingsspanning en aarde.
Code Uitleg
Ik heb geprobeerd de code uit te leggen door middel van opmerkingen (in de code zelf).
Zoals ik eerder heb uitgelegd over de commandomodus en de datamodus, kun je zien dat we tijdens het verzenden van een commando (functie lcd_cmd) RS = 0, RW = 0 hebben ingesteld en een HIGH naar LOW-puls wordt aan E gegeven door er 1 van te maken, dan 0. Ook bij het verzenden van gegevens (functie lcd_data) naar LCD hebben we RS = 1, RW = 0 ingesteld en een HIGH to LOW puls wordt aan E gegeven door deze 1 op 0 te maken. Functie msdelay () is gemaakt om vertraging in milliseconden te creëren en wordt vaak genoemd in het programma, het wordt zo genoemd dat de LCD-module voldoende tijd heeft om de interne bediening en opdrachten uit te voeren.
Er is een while-lus gemaakt om de string af te drukken, die de functie lcd_data elke keer aanroept om een teken af te drukken tot het laatste teken (null-terminator- '\ 0').
We hebben de functie lcd_init () gebruikt om het LCD-scherm gereed te maken met behulp van de vooraf ingestelde opdrachtinstructies (hierboven uitgelegd).