Wyświetlacz jest niezbędną częścią każdej maszyny, niezależnie od tego, czy jest to urządzenie domowe, czy maszyny przemysłowe. Wyświetlacz nie tylko pokazuje opcje sterowania do obsługi maszyny, ale także pokazuje status i dane wyjściowe zadania wykonywanego przez tę maszynę. Istnieje wiele typów wyświetlaczy stosowanych w elektronice, takich jak wyświetlacz 7-segmentowy, wyświetlacz LCD 16x2, wyświetlacz dotykowy TFT, wyświetlacz OLED itp.
Wyświetlacz LCD 16x2 jest najbardziej podstawowym modułem wyświetlacza i jest również używany w niektórych małych urządzeniach elektronicznych, takich jak kalkulator, miernik cyfrowy itp. Zrealizowaliśmy wiele projektów z wykorzystaniem LCD 16x2, w tym podstawowe interfejsy z innymi mikrokontrolerami:
- Połączenie LCD z mikrokontrolerem 8051
- Interfejs LCD z mikrokontrolerem ATmega32
- Połączenie LCD z mikrokontrolerem PIC
- Połączenie wyświetlacza LCD 16x2 z Arduino
- Interfejs LCD 16x2 z Raspberry Pi przy użyciu Pythona
W tym samouczku zobaczymy, jak połączyć wyświetlacz LCD 16x2 z mikrokontrolerem Atmega16 AVR i wyświetlić prostą wiadomość powitalną.
Wymagane składniki
- Atmega16
- Moduł LCD 16x2
- Zworki
- Płytka prototypowa
Schemat obwodu
Programowanie Atmega16 dla wyświetlacza LCD 16x2
Programowanie nie wymaga żadnych zewnętrznych bibliotek. Tutaj Atmega16 jest programowany za pomocą USBASP i Atmel Studio7.0. Kompletny program i roboczy film jest podawany na końcu projektu, wystarczy załadować program do Atmega16 i obrócić 10k POT, aby wyregulować jasność LCD.Najpierw zdefiniuj częstotliwość procesora i dołącz niezbędne biblioteki, które są dostarczane z pakietem Atmel Studio, takie jak dostęp do pinów IO i
Zdefiniuj w programie piny RS i EN wyświetlacza LCD. Piny RS służą do wyboru rejestru danych i poleceń. Pin włączania blokuje dane.
#define en PA3 #define rs PA2
Określ również, który PORT Atmega16 będzie używany do łączenia się z LCD. Tutaj używana jest PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Następnym krokiem jest skonstruowanie funkcji, która przyjmie polecenie przez przekazanie parametru. Istnieje wiele poleceń HEX na wyświetlaczu LCD. Polecenia szesnastkowe służą do definiowania funkcji wyświetlacza LCD. Ponieważ używamy 4-bitowego trybu LCD, bajt (8-bitowy) zostanie wysłany w dwóch pakietach. Jeden pakiet będzie miał wartość Upper Nibble (4-bitowy), a drugi pakiet będzie miał wartość Lower Nibble (4-bitowy).
void lcdCommand (polecenia bez znaku) { lcdPort = (lcdPort & 0x0F) - (polecenia & 0xF0); lcdPort & = ~ (1 <
Następnym krokiem byłoby zaakceptowanie znaków i podłączenie go do portu LCD. Odebrane znaki są następnie wysyłane do półbajtu LCD przez półbajt. Funkcja przyjmuje znak za pomocą parametru pass by, a następnie pobiera górny i dolny półbajt. Pin „rs” jest ustawiony w stan wysoki dla rejestru danych, a następnie wysyłany jest rosnący impuls w celu zatrzaśnięcia danych. Podobnie niższy półbajt jest wysyłany poprzez zmianę wartości włączenia i wysłanie rosnącego impulsu dla włączenia.
void lcdChar (ciąg znaków bez znaku) { lcdPort = (lcdPort & 0x0F) - (ciąg & 0xF0); lcdPort - = (1 <
Ta funkcja po prostu konwertuje znak na łańcuch i może być później używana w programie, gdy konieczne jest napisanie łańcucha.
void lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
Teraz jest napisana funkcja, aby wyczyścić ekran. Wystarczy wysłać polecenie 01 w formacie HEX, a następnie po prostu ustawić kursor w pozycji początkowej.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Teraz w funkcji głównej wyświetlacz LCD jest inicjalizowany. Początkowo ustaw kierunek PORT dla interfejsu LCD. Tutaj PORT jest ustawiony jako WYJŚCIE, więc ustaw FF.
lcdDirection = 0xFF; _delay_ms (20)
Następnie ustaw wyświetlacz LCD w trybie 4-bitowym, wysyłając 02 w formacie szesnastkowym. Wyślij również 28 w formacie szesnastkowym, aby ustawić go w 2 wierszach, 15x7 pikseli matrycy w trybie 4-bitowym.
lcdCommand (0x02); lcdCommand (0x28);
0c poleceń i 06 służy do regulacji położenia kursora. I wreszcie po prostu wyczyść ekran, wysyłając 01 szesnastkowo. To zakończy inicjalizację LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Po zakończeniu inicjalizacji wystarczy przetestować wyświetlacz LCD, wysyłając ciąg. Tutaj wysyłamy ciąg znaków „ Interfacing LCD ” w pierwszym rzędzie.
lcdString ("Interfejs LCD");
Następnie przenieś kursor do następnego wiersza, wysyłając polecenie c0 w formacie szesnastkowym. I na koniec w tej pozycji napisz napis „With Atmega1 6”.
lcdCommand (0xC0); lcdString ("Z Atmega16");
To kończy pełny samouczek dotyczący łączenia wyświetlacza LCD 16x2 z Atmega16. Zwróć uwagę, że jeśli nie otrzymasz żadnego obrazu lub pikseli, sprawdź okablowanie zgodnie z kodem i schematem obwodu lub zmień wartość POT podłączonego do styku V0 wyświetlacza LCD. Jeśli masz jakiekolwiek wątpliwości lub sugestie, możesz skontaktować się z nami, pisząc na naszym forum lub komentując poniżej.