Unitățile de afișare sunt cele mai importante dispozitive de ieșire din proiectele încorporate și produsele electronice. 16x2 LCD este una dintre cele mai utilizate unități de afișare. 16x2 LCD înseamnă că există două rânduri în care pot fi afișate 16 caractere pe linie, iar fiecare caracter ocupă spațiu de matrice 5X7 pe LCD. În acest tutorial vom conecta modulul LCD 16X2 la microcontrolerul 8051 (AT89S52). Interfața LCD cu microcontrolerul 8051 ar putea părea destul de complexă pentru începători, dar după înțelegerea conceptului ar arăta foarte simplu și ușor. Deși poate dura timpul, deoarece trebuie să înțelegeți și să conectați 16 pini LCD la microcontroler. Deci, mai întâi să înțelegem cei 16 pini ai modulului LCD.
Îl putem împărți în cinci categorii, pini de alimentare, pini de contrast, pini de control, pini de date și pini de iluminare din spate.
Categorie |
PIN nr. |
Nume PIN |
Funcţie |
Pinii de alimentare |
1 |
VSS |
Pinul de masă, conectat la masă |
2 |
VDD sau Vcc |
Pin de tensiune + 5V |
|
Pin de contrast |
3 |
V0 sau VEE |
Setarea contrastului, conectat la Vcc completează un rezistor variabil. |
Pinii de control |
4 |
RS |
Înregistrare Selectare Pin, RS = 0 Mod comandă, RS = 1 Mod date |
5 |
RW |
Citire / Scriere pin, RW = 0 Mod scriere, RW = 1 Mod citire |
|
6 |
E |
Activați, pentru a activa ecranul LCD este nevoie de un impuls de la mare la mic |
|
Pinii de date |
7-14 |
D0-D7 |
Pinii de date, stochează datele care trebuie afișate pe ecranul LCD sau instrucțiunile de comandă |
Pinii de iluminare din spate |
15 |
LED + sau A |
Pentru a alimenta iluminarea din spate + 5V |
16 |
LED- sau K |
Teren de iluminare din spate |
Toți pinii sunt ușor de înțeles prin numele și funcțiile lor, cu excepția pinilor de control, deci sunt explicați mai jos:
RS: RS este pinul de selectare a registrului. Trebuie să-l setăm la 1, dacă trimitem unele date pentru a fi afișate pe ecranul LCD. Și îl vom seta la 0 dacă trimitem instrucțiuni de comandă cum ar fi ștergerea ecranului (cod hexagonal 01).
RW: Acesta este pinul de citire / scriere, îl vom seta la 0, dacă vom scrie câteva date pe LCD. Și setați-l la 1, dacă citim de pe modulul LCD. În general, acest lucru este setat la 0, deoarece nu este nevoie să citim date de pe ecranul LCD. O singură instrucțiune „Obțineți starea LCD”, trebuie citită de câteva ori.
E: Acest pin este utilizat pentru a activa modulul atunci când i se dă un impuls de mare la mic. Ar trebui dat un impuls de 450 ns. Această tranziție de la HIGH la LOW face modulul ENABLE.
Există câteva instrucțiuni de comandă presetate în LCD, le-am folosit în programul nostru de mai jos pentru a pregăti LCD-ul (în funcția lcd_init ()). Unele instrucțiuni importante de comandă sunt date mai jos:
Cod Hex |
Comandă către Registrul de instrucțiuni LCD |
0F |
LCD PORNIT, cursor PORNIT |
01 |
Ștergeți ecranul de afișare |
02 |
Intoarce-te acasa |
04 |
Decrementează cursorul (deplasează cursorul la stânga) |
06 |
Incrementează cursorul (deplasează cursorul la dreapta) |
05 |
Afișare Shift dreapta |
07 |
Afișare Shift la stânga |
0E |
Afișaj PORNIT, cursorul intermitent |
80 |
Forțați cursorul să înceapă prima linie |
C0 |
Forțați cursorul să înceapă a doua linie |
38 |
2 linii și matrice 5 × 7 |
83 |
Linia cursorului 1 poziția 3 |
3C |
Activați a doua linie |
08 |
Afișați OFF, cursorul OFF |
C1 |
Salt la a doua linie, poziția 1 |
OC |
Afișaj PORNIT, cursor OPRIT |
C1 |
Salt la a doua linie, poziția 1 |
C2 |
Salt la a doua linie, poziția 2 |
Diagrama și explicația circuitului
Diagrama circuitului pentru interfața LCD cu microcontrolerul 8051 este prezentată în figura de mai sus. Dacă aveți o înțelegere de bază a 8051, atunci trebuie să știți despre EA (PIN 31), XTAL1 și XTAL2, pin RST (PIN 9), Vcc și Ground Pin al microcontrolerului 8051. Am folosit acești Pin în circuitul de mai sus. Dacă nu aveți nicio idee despre asta, vă recomand să citiți acest articol Interfață LED cu microcontroler 8051 înainte de a trece prin interfața LCD.
Deci, pe lângă acești pini de mai sus, am conectat pinii de date (D0-D7) ai LCD-ului la microcontrolerul Port 2 (P2_0 - P2_7). Și controlați pinii RS, RW și E la pinul 12,13,14 (pinul 2,3,4 al portului 3) al microcontrolerului.
PIN 2 (VDD) și PIN 15 (alimentare cu iluminare din spate) ale LCD-ului sunt conectate la tensiune (5v), iar PIN 1 (VSS) și PIN 16 (masă pentru iluminarea din spate) sunt conectate la masă.
Pinul 3 (V0) este conectat la tensiune (Vcc) printr-un rezistor variabil de 10k pentru a regla contrastul LCD-ului. Piciorul mijlociu al rezistorului variabil este conectat la PIN-ul 3 și alte două picioare sunt conectate la alimentarea cu tensiune și la masă.
Explicarea codului
Am încercat să explic codul prin comentarii (în cod în sine).
Așa cum am explicat mai devreme despre modul de comandă și modul de date, puteți vedea că, în timp ce trimitem comanda (funcția lcd_cmd), am setat RS = 0, RW = 0 și un impuls HIGH la LOW este dat lui E făcându-l 1, apoi 0 De asemenea, atunci când trimitem date (funcția lcd_data) pe LCD, am setat RS = 1, RW = 0 și un impuls HIGH la LOW este dat lui E făcându-l de la 1 la 0. Funcția msdelay () a fost creată pentru a crea întârziere în milisecunde. și apelat frecvent în program, este apelat astfel încât modulul LCD să aibă suficient timp pentru a executa operația internă și comenzile.
O buclă while a fost creată pentru a imprima șirul, care apelează funcția lcd_data de fiecare dată pentru a imprima un caracter până la ultimul caracter (terminator nul- '\ 0').
Am folosit funcția lcd_init () pentru a pregăti ecranul LCD utilizând instrucțiunile de comandă presetate (explicate mai sus).