Afișajul este partea necesară a oricărei mașini, indiferent dacă este vorba despre aparate electrocasnice sau mașini industriale. Afișajul nu numai că afișează opțiunile de control pentru operarea mașinii, ci și starea și ieșirea sarcinii efectuate de mașină. Există multe tipuri de afișaje utilizate în electronică, cum ar fi afișajul pe 7 segmente, afișajul LCD de 16x2, afișajul cu ecran tactil TFT, afișajul OLED etc.
Afișajul LCD 16x2 este cel mai de bază modul de afișare și, de asemenea, utilizat în unele echipamente electronice mici, cum ar fi calculatorul, contorul digital etc. Am făcut multe proiecte folosind LCD 16x2, inclusiv interfața de bază cu alte microcontrolere:
- Interfață LCD cu microcontroler 8051
- Interfață LCD cu microcontroler ATmega32
- Interfață LCD cu microcontroler PIC
- Interfață LCD 16x2 cu Arduino
- Interfață LCD 16x2 cu Raspberry Pi folosind Python
În acest tutorial, vom vedea cum să interfațați un ecran LCD de 16x2 cu microcontrolerul Atmega16 AVR și să afișăm un mesaj simplu de bun venit.
Componente necesare
- Atmega16
- Modul LCD 16x2
- Jumpers
- Breadboard
Diagrama circuitului
Programare Atmega16 pentru afișaj LCD 16x2
Programarea nu necesită biblioteci externe. Aici Atmega16 este programat folosind USBASP și Atmel Studio7.0. Programul complet și filmul de lucru sunt oferite la sfârșitul proiectului, trebuie doar să încărcați programul în Atmega16 și să rotiți 10k POT pentru a regla luminozitatea ecranului LCD.Definiți inițial frecvența procesorului și includeți bibliotecile necesare care vin cu pachetul Atmel Studio, cum ar fi accesarea pinilor IO și
Definiți pinul RS și EN al ecranului LCD în program. Pinii RS sunt utilizați pentru a selecta registrul de date și comenzi. Pinul de activare blochează datele.
#define en PA3 #define rs PA2
De asemenea, definiți ceea ce PORTul Atmega16 va fi utilizat pentru interfața LCD. Aici se folosește PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Următorul pas este de a construi o funcție care va accepta o comandă prin trecerea unui parametru. Există multe comenzi LCD HEX. Comenzile Hex sunt utilizate pentru a defini funcția ecranului LCD. Deoarece folosim modul LCD pe 4 biți, octetul (8 biți) va fi trimis în două pachete. Unele pachete vor fi Upper Nibble (4 biți), iar celălalt pachet va fi Lower Nibble (4 biți).
void lcdCommand (comenzi char nesemnate) { lcdPort = (lcdPort & 0x0F) - (comenzi & 0xF0); lcdPort & = ~ (1 <
Următorul pas ar fi acceptarea caracterelor și blocarea acestuia în portul ecranului LCD. Caracterele primite sunt apoi trimise pe ecranul LCD cu ronțăit. Funcția preia caracterul folosind parametrul pass by și apoi preia ciugulitul superior și inferior. PIN-ul „rs” este setat la mare pentru registrul de date și apoi este trimis un impuls crescător pentru blocarea datelor. În mod similar, picătura inferioară este trimisă prin schimbarea valorii de activare și trimiterea impulsului de creștere pentru activare.
void lcdChar (șir de caractere nesemnat) { lcdPort = (lcdPort & 0x0F) - (șir & 0xF0); lcdPort - = (1 <
Această funcție convertește caracterul în șir și poate fi utilizată mai târziu în program acolo unde este nevoie de scriere.
void lcdString (char * str) { int j; pentru (j = 0; str! = 0; j ++) { lcdChar (str); } }
Acum se scrie o funcție doar pentru a șterge ecranul. Trebuie doar să trimiteți comanda 01 în HEX și apoi să setați cursorul în poziția inițială.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Acum, în funcția principală, LCD-ul este inițializat. Setați inițial direcția PORT pentru interfața LCD. Aici, PORTUL este setat ca IEȘIRE, așa că setați FF.
lcdDirection = 0xFF; _delay_ms (20)
Apoi setați ecranul LCD în modul pe 4 biți trimițând 02 în hex. De asemenea, trimiteți 28 în hexagon pentru a-l seta în 2 linii, pixeli matriciali 15x7 în modul 4 biți.
lcdCommand (0x02); lcdCommand (0x28);
0C comandă și 06 este utilizat pentru a controla poziția cursorului. Și, în cele din urmă, ștergeți ecranul trimitând 01 în hex. Aceasta va finaliza inițializarea ecranului LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
După finalizarea inițializării, testați LCD-ul trimitând un șir. Aici trimitem un șir „ Interfacing LCD ” în primul rând.
lcdString ("LCD de interfață");
Apoi mutați cursorul pe rândul următor trimițând comanda c0 în hex. Și, în cele din urmă, pe această poziție, scrieți șirul „Cu Atmega1 6”.
lcdCommand (0xC0); lcdString („Cu Atmega16”);
Aceasta termină tutorialul complet despre interfațarea unui ecran LCD de 16x2 cu Atmega16. Rețineți că, dacă nu obțineți nicio imagine sau pixeli, atunci fie verificați cablajul conform codului și schemei de circuit, fie modificați valoarea POT atașat pinului V0 al LCD-ului. Dacă aveți vreo îndoială sau sugestie, atunci ne puteți contacta fie scriind pe forumul nostru, fie comentând mai jos.