Cytat: Alfanumeryczne wyświetlacze LCD ze sterownikiem HD44780
Obecnie ze względu na swoją niską cenę, alfanumeryczne wyświetlacze LCD są bardzo często stosowane w układach opartych na mikrokontrolerach. Chciałbym przedstawić tutaj sposób sterowania takim wyświetlaczem.
Sterowanie wyświetlaczem alfanumerycznym wyposażonym we sterownik HD44780 odbywa się na zasadzie wysyłania odpowiednich komend oraz zapisu danych do wewnętrzenj pamięci wyświetlacza. Komendy i dane są rozróżniane na podstawie stamu linii RS (0 - komendy; 1 - dane). Kierunek transmisji jest okreslany stanem linii R/W. Sterownik HD44780 posiada dwa rodzaje pamięci : pamięć generatora znaków (CGROM) oraz pamięc danych (DD RAM). Pamięć generatora znaków zawiera graficzną postac znaków wyświetlanych na wyświetlaczu (można porównać do czcionki). Oprócz znaków zdefiniowanych na stałe przez producenta sterownika do dyspozycji użytkownika pozostaje 8-znakowa pamięć RAM, w której można zdefiniowac własne znaki (np. polskie znaki diakrytyczne). Pamięc danych DD RAM ma pojemność 80 bajtów (jeden sterownik HD4478 może obłużyć maksymalnie 80 znaków, czyli np. 2 linie po 40 znaków, lub 4 linie po 20 znaków). W przypadku gdy wyswietlacz posiada mniej znaków niż oferuje sterownik, to te bajty można wykorzystać jako pamięć RAM ogólnego przeznaczenia.
Instrukcje sterujące wyświetlaczem
Display clear - (RS = 0, R/W = 0, dane = 00000001) -instrukcja ta powoduje wyczyszczenie wyświetlacza poprzez wypełnienie go spacjami, ustawienie trybu zapisu danych od pozucji w lesym górnum rogu wyświetlacza oraz wyłączenie trybu przesuwania okna; maksymalny czas trwania instrukcji - 1,64ms
Display/cursor home - (RS - 0, R/W = 0, dane = 0000001x) - instrukcja powoduje ustawienie kursora na pozycji pierwszego zanku w pierwszej linii; maksymalny czas trwania instrukcji 1,64ms
Entry mode set - (RS = 0; R/W = 0, dane = 000001IS) - okreslenie trybu pracy kursora/okna wyświetlacza :
- dla S = 1 po zapisaniu znaku do wyświetlacza kursor nie zmienia położenia, natosmiast przesuwa się cała zawartość wyswietlacza
- dla S = 0 po zapisaniu znaku do wyświetlacza kursor znienia połozenie, a przesuwanie okna jest wyłaczone
- dla I = 1 kursor lub okno wyświetlacza przesuwa się w prawo (inkrementacja adresu zanku)
- dla I = 0 kursor lub okno wyświetlacza przesuwa się w lewo (dekrementacja adresu zanku)
Maksymalny czas trwania instrukcji - 40us
Display ON/OFF - (RS = 0, R/W = 0, dane 0001DCB)
- dla D = 1 - włączenie wyświetlacza
- dla D = 0 - wyłączenie wyświetlacza
- dla C = 1 - właczenie kursora
- dla C = 0 - wyłączenie kursora
- dla B = 1 - włączenie migania kursora
- dla B = 0 - wyłączenie migania kursora
Display kursor shift - (RS = 0, R/W = 0, dane = 0001SRxx)
- dla S = 1 - przesuwana jest zawartość okna
- dla S = 0 - przesuwany jest kursor
- dla R = 1 - kierunek przesuwu w prawo
- dla R = 0 - kierunek przesuwu w lewo
Function set (RS= 0, , R/W = 0, dane = 001DNFxx)
- dla D = 1 - interfejs 8-bitowy
- dla D = 0 - interfejs 4-bitowy
- dla N = 1 - wyświetlacz dwuwierszowy
- dla N = 0 - wyświetlacz jednowierszowy
- dla F = 1 - matryca znaków 5*10 punktów
- dla F = 0 - matryca znaków 5*7punktów
CG RAM set - (RS= 0, RW = 0, dane = 01AAALLL) - ustawia adres pamięci generatora znaków. AAA - 3-bitowy adres znaku, LLL - 3-bitowy numer linii składającej sie na graficzne odwzorowanie znaku.
DD RAM set - (RS = 0, R/W = 0, dane = 1AAAAAAA) - ustawia adres pamięci wyświetlacza, pod który nastąpi zapis (bądź odczyt) danych operacją Data write lub Data read.
Busy flag read - (RS = 0, R/W = 1, dane = BAAAAAAA) - odczyt flagi zajętości i adresu pamięci wyświetlacza. B - flaga zajętości wyświetlacza, AAAAAAA - 7-bitowy adrtes pamięci DD RAM.
Data read - (RS = 1, R/W= 1, dane = odczytywany bajt danych) - odczyt danych z pamięci wyświetlacza, bądź pamieci CG RAM (jesli poprzednio wydano komendę CG RAM set)
Data write - (RS = 1, R/W = 0, dane = zapisywany bajt danych) - zapis danych do pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set)
a linie w wyświetlaczu 2x20 albo 16 nie wiem sam jaki to jest ten co mam
od 1-16:
1:GND
2: VCC
3:VSS
4:RS
5:RW
6:E
7-14: linie danych 7

0, 8

1... 14:D7
15:A
16: K
powinno ciut pomóc
