Wyświetlacze tekstowe LCD produkowane są przez wielu producentów. W większości wyposażone są w sterownik HD44780 lub zgodny z nim. Dzięki temu sposób podłączenia i sterowanie jest w zasadzie niezależne od konkretnej wersji układu (można to traktować jak standard).
Cechy układu:
- zawiera pamięć 80 znaków (DD-RAM), w dwóch zakresach adresowych: 00H-27H,
40H-67H.
- sterowanie wyświetlaczami 1, 2 lub 4 wierszowymi.
- znaki w matrycy 5×8 pikseli (lub rzadko spotykane 5×10).
- zasilanie 5V, pobór prądu ok. 0,5mA.
- wbudowany generator znaków zgodny z ASCII dla podstawowych znaków,
niestety rozszerzone kody zawierają znaki japońskie. Istnieje, co prawda wersja
„europejska", ale trudno ją spotkać w handlu.
- możliwość zdefiniowania max. 8 własnych znaków (np. polskie litery).
- 3 sygnały sterujące, 4 lub 8 bitowa magistrala danych.
- możliwość regulacji kontrastu.
- podświetlenie (niektóre układy).
Sposób przyporządkowania adresów pamięci DD-RAM do pól wyświetlacza zależy od organizacji wskaźnika. Poniżej pokazane są adresy dla typowych wskaźników:
1×16 |
|
2×8 |
|
2×16 |
|
2×20 |
|
2×24 |
|
4×16 |
|
4×20 |
Trochę to dziwnie wygląda, ale tak już to zrobiono. Konsekwencją takiej organizacji pamięci DD-RAM jest konieczność odpowiedniego dopasowania adresów przy wpisywaniu danych. Zostanie to zaprezentowane w przykładach poniżej.
do góryNumer | Nazwa | Opis |
---|---|---|
1 | GND | Masa |
2 | VDD | Napiecie zasilania +5V |
3 | V0 | Regulacja kontrastu wyświetlacza |
4 | RS | Wybór rodzaju informacji:
0 - komenda 1 - dane |
5 | R/W | Kierunek transmisji:
0 - wysłanie komendy lub danych 1 - odczyt stanu lub danych |
6 | E | Sygnał zezwalający
0 - wejścia nieatywne 1 - wykonanie działania |
7 | DB0 | Linia danych D0 |
8 | DB1 | Linia danych D1 |
9 | DB2 | Linia danych D2 |
10 | DB3 | Linia danych D3 |
11 | DB4 | Linia danych D4 |
12 | DB5 | Linia danych D5 |
13 | DB6 | Linia danych D6 |
14 | DB7 | Linia danych D7 |
15 | LED A | Anoda diody podświetlającej |
16 | LED K | Katoda diody podświetlającej |
Tryby pracy układu zależą od sygnałów sterujących:
RS | R/W | Opis |
---|---|---|
0 | 0 | Wpisanie komendy do HD44780. Lista komend poniżej. |
0 | 1 | Odczyt słowa stanu:
bity 0-6 tego słowa stanowią aktualny adres w pamięci DD-RAM (lub CG-RAM, bity 0-5), bit 7 jest sygnałem zajętości (Busy). Jeżeli Busy=1 to układ wykonuje poprzednią komendę. Przed wykonaniem następnej operacji na HD44780 należy zaczekać, aż Busy=0. |
1 | 0 | Zapis danych do pamięci DD-RAM (lub CG-RAM) |
1 | 1 | Odczyt danych z pamięci DD-RAM (lub CG-RAM) |
(x - wartość dowolna)
Magistrala | Nazwa | Opis |
---|---|---|
00000001 | Display clear | Kasowanie wyświetlacza:
- pamięć DD-RAM wypełniona spacjami, - kursor pod adres 00H (pierwszy znak, lewy górny róg) - tryb przesuwania kursora (wyłączenie przesuwania okna) |
0000001x | Display/cursor home | - kursor pod adres 00H (pierwszy znak, lewy górny róg)
- tryb przesuwania kursora (wyłączenie przesuwania okna) Dane nie są kasowane. |
000001IS | Entry mode set | Tryb pracy kursora (lub okna)wyświetlacza przy zapisie kolejnych znaków:
S=0 - przesuwa się kursor S=1 - przesuwa się okno, pozycja kursora na wyświetlaczu jest stała I=0 - przesuwanie kursora lub okna w lewo (dekrementacja adresu) I=1 - przesuwanie kursora lub okna w prawo (inkrementacja adresu) |
00001DCB | Display ON/OFF | Załączenie (=1) lub wyłączenie (=0) następujących elementów:
D - całego pola wyświetlacza (display) C - kursora (cursor) B - miganie znaku (blink) |
0001SRxx | Display/cursor shift | S=0 - przesunięcie kursora ..
S=1 - obrót danych wyświetlacza .. R=0 - .. w lewo R=1 - .. w prawo |
001DNFxx | Function set | Tryb pracy układu:
D=0 - 4-bitowa magistrala danych (bity D4-D7) D=1 - 8-bitowa magistrala danych N=0 - 1 linia wyświetlacza N=1 - 2 lub 4 linie wyświetlacza F=0 - matryca znaków 5 x 7 punktów F=1 - matryca znaków 5 x 10 punktów (nie spotkałem takiego układu!) Dla konkretnego układu i schematu jest to wartość stała, ustalana podczas inicjacji wyświetlacza |
01AAALLL | CG-RAM set | Włącza adresowanie pamięci generatora znaków (CG-RAM) i ustawia adres w tej pamięci.
6-io bitowy adres zawiera: bity AAA - kod znaku 0-7 bity LLL - numer linii (000 - górna linia) |
1AAAAAAA | DD-RAM set | Włącza adresowanie pamięci danych wyświetlacza (DD-RAM) i ustawia adres w tej pamięci.
Sposób przyporządkowania adresów polom wyświetlacza przedstawiono wyżej |
Poniższe układy należy traktować jako przykładowe.
Jest to podłączenie najwygodniejsze dla programisty. Wadą układu jest to, że na sterowanie przeznaczono aż 11 linii portów. Dlatego układ taki jest stosowany wtedy, gdy mamy ich wystarczającą ilość.
Jest to podłączenie oszczędniej gospodarujące liniami portów, tylko 7 linii.Wadą układu są nieco bardziej złożone procedury obsługi. Układ taki jest stosowany wtedy, gdy mamy ograniczoną ilość linii portów.
W poniższych przykładach przyjmuję następującą konfigurację:
- wyświetlacz 2x16 znaków
- magistrala 8-bitowa
- dane podłączone do poru P1
- sygnał RS - linia P3.5
- sygnał R/W - linia P3.6
- sygnał E - linia P3.7
- kwarc 11,0592 MHz
W programach stosuję nazewnictwo przyjęte przez większość programistów.
Procedura CZYZAJ sprawdza bit BUSY, tzn czy układ HD44780 może przyjmować polecenia lub dane. Zwraca w ACC bieżący adres w pamięci DD-RAM (lub CG-RAM)
Procedura PISZKOM wysyła kod rozkazu z akumulatora do układu HD44780. Przed wysłaniem sprawdza bit BUSY.
Dla wersji 4-bitowej należy pamiętać, że w porcie P1 są zarówno dane (bity 4567), jak i bity sterujące (bity 012)
Procedura CZAS wprowadza opóźnienie wynoszące w przybliżeniu tyle milisekund, ile wynosiła zawartość akumulatora przed jej wywołaniam.
Przyda nam się również makro CZEKAJ z parametrem określającym czas opóźnienia w ms.
do góryPo włączeniu napięcia zasilania należy przeprowadzić procedurę inicjalizacji układu. Przebieg tej procedury przedstawiono na poniższych rysunkach. Podane czasy należy traktować jako minimalne, można zastosować znacznie dłuższe, np. po 50ms lub 100ms.
Procedura ta różni się od powyższej jedynie ustawieniem opcji 4-bitowej oraz inną procedurą PISZKOM:
do góryPZNAK wysyła do HD44780 bajt z akumulatora traktowany jako kod ASCII znaku (zgodnie z tablicą znaków).
Procedura ta napisana jest dla wyświetlacza 2×16 i uwzględnia przejście do nowej linii po 16 znaku.
PTEXT wysyła do HD44780 ciąg znaków od adresu w DPTR. Koniec tego ciągu oznaczony jest bajtem 0.
PHEX wypisuje na ekranie zawartość akumulatora w formie 2-cyfrowej liczby HEX.
PBIN wypisuje na ekranie zawartość akumulatora w formie 8-cyfrowej liczby BIN.
do góryMakra te wysyłają do HD44780 odpowiednie rozkazy (zgodnie z listą rozkazów). Wykorzystują podprogram PISZKOM.
W układzie HD44780 istnieje możliwość zdefiniowania do ośmiu własnych znaków (dla matrycy 5×7). Matryca tych znaków zapisywana jest w pamięci CG-RAM o rozmiarze 8×8 bajtów. Jeden bajt (a właściwie jego 5 młodszych bitów) definiuje jedną linię znaku. Osiem kolejnych bajtów definiuje cały znak, kolejność z góry na dół.
Jeżeli chciałbym napisać np. "Żółte światło!" to muszę umieścić w pamięci CG-RAM definicje czterech polskich liter:
adres | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | HEX |
00 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0CH |
01 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04H |
02 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06H |
03 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04H |
04 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0CH |
05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04H |
06 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0EH |
07 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00H |
08 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 02H |
09 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04H |
0A | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0EH |
0B | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 11H |
0C | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 11H |
0D | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 11H |
0E | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0EH |
0F | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00H |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 02H |
11 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04H |
12 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0EH |
13 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 10H |
14 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0EH |
15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 01H |
16 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1EH |
17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00H |
18 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1FH |
19 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 01H |
1A | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 02H |
1B | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1FH |
1C | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 08H |
1D | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 10H |
1E | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1FH |
1F | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00H |
Litery otrzymują kody:
0 lub 8 - ł
1 lub 9 - ó
2 lub 10 - ś
3 lub 11 - Ż
Stąd napis definiuję następująco (0 jest znacznikiem końca napisu!!!):
DB 3,1,8,'te ',2,'wiat',8,'o!',0
Do dyspozycji mamy tylko 8 kodów (8 znaków), dlatego należy je definiować w miarę aktualnych potrzeb.
Procedura POLSKIE "ładuje" 8 znaków naraz.
|
|
| |||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||
|
|
|