| Znakové LCD displeje |
Displeje se u nás objevili koncem 80 let. Tehdy se považovali za
zázrak techniky. Dnes jsou LCD zobrazovací displeje všude okolo nás. Setkáváme se s nimi
při koupi jízdenky na autobus nebo vlak, v telefonních automatech, na parkovištích ve
faxech atd.
Každý displej má v sobě speciální integrovaný obvod - řadič, který ovládá celý displej a
komunikuje s okolím. Standartem se stal řadíč
HD44780
od firmy HITACHI. Všichni výrobci používají HD44780 nebo jeho ekvivalent. Proto je jedno
od jakého výrobce displej je. Pro dosažení plné kompatibiliti displeje, je zapojení
přívodního konektoru stejné. To zjednodušuje použití displejů v praxi.
Displej se vyrábí v několika variantách 8x2, 16x1, 16x2, 16x4, 20x2, 20x4, 24x2, 24x4,
40x2, 40x4, které se liší počtem sloupců a řádků. Moduly se vyrábí s podsvícením LED
nebo výbojkou.
Displeje LCD prodávají firmy GMe, Shop HW, Elatec, Powertip a Koala kde také najdete přehled displejů a datasheety. Firma GMe prodává displeje označené např. MC1602E-SYL (2x16 znaků) od výrobce Everbouquet.
MC1602E-SYL |
MC1602E-SYL/H |
![]() |
![]() |
![]() |
![]() |
V tabulce je zobrazeno zapojení vývodů, název signálu a popis. Většinou se vyskytuje standartní zapojení vývodů, ale již jsem se setkal u displeje LCD 4x40 (neznámý výrobce) s jiným zapojením.
| vývod standard |
vývod LCD4x40 |
název | popis |
| 1 | 13 | Vss | napájení GND |
| 2 | 14 | Vdd | napájení +5V |
| 3 | 12 | Vo | kontrast 0V .. 5V (typ. 0,8V) |
| 4 | 11 | RS | Register Select (0=instrukce, 1=data) |
| 5 | 10 | R/W | Read / Write (0=zápis, 1=čtení) |
| 6 | 9 | E | Enable (1, hrana z 1 -> do 0) |
| 7 | 8 | DB0 | Data Bus 0 |
| 8 | 7 | DB1 | Data Bus 1 |
| 9 | 6 | DB2 | Data Bus 2 |
| 10 | 5 | DB3 | Data Bus 3 |
| 11 | 4 | DB4 | Data Bus 4 |
| 12 | 3 | DB5 | Data Bus 5 |
| 13 | 2 | DB6 | Data Bus 6 |
| 14 | 1 | DB7 | Data Bus 7 |
| 15 | - | A | podsvícení - anoda LED (jen některé typy) |
| 16 | - | K | podsvícení - katoda LED (jen některé typy) |
| - | 15 | E2 | Enable (1, hrana z 1 -> do 0) |
| - | 16 | nc | nezapojen |
DB0 - DB3 (Data Bus), nižší bity 3-stavové sběrnice. Nevyužito při 4-bitovém ovládání.
DB4 - DB7 (Data Bus), vyšší bity 3-stavové sběrnice
Pro komunikaci s displejem je potřeba minimálně 6 vodičů až maximálně 11 vodičů a napájení +5V. Před zapojením s procesorem si musíme zvolit datovou komunikaci. Komunikace s modulem muže být po 8-bitové sběrnici (DB0-DB7) nebo 4-bitové sběrnici (DB4-DB7).
Po zapnutí procesoru a displeje je nutné provést základní inicializaci displeje. Nastaví se počet bitů datové komunikace (8 nebo 4 bity), směr psaní znaků, posun řádku, pozice kurzoru a blikání kurzoru. Po této inicializaci je displej připraven na komunikaci.
4-bitová sběrnice (DB4-DB7). Tuto komunikaci je vhodné použít při nedostatku vývodů na procesoru. Komunikace bude 2x pomalejší, protože se data posílají nadvakrát. Nejdříve se pošlou vyšší 4 bity a zapíšou se Enablem a pak nižší 4 bity a zapíšou se Enablem. Nižší 4 bity (DB0-DB3) na displeji je potřeba spojit se zemí. Zapojení displeje s procesorem je na obrázku.
Pokud potřebujete vyzkoušet komunikaci LCD displeje, zapojte procesor podle následujícího schématu a stáhněte si program test LCD. Displej můžete použít 1x16, 2x8, 2x16 až 4x40 znaků. Program Vám vyzkouší v displeji i pamět CGRAM pro uložení vlastních znaků. Po zapnutí se zobrazí na displeji Test LCD 1.0-2002 po 2 sekundách Line 1 Line 2 po dalších 2 sekundách CZ znaky áíěščřžý. Pokud se nezobrazí české znaky je problém s pamětí CGRAM. Program je určen pro procesor PIC16F84. Při programování nastavte XT krystal a WatchDog off.
Každý znak je zobrazován jako matice 5x8 bodů. Definice jednotlivých znaků je uložena napevno ve vnitřní paměti ROM code: A00. Dále je možno zobrazit kurzor, nastavit blikání kurzoru, definovat posouvání zobrazených znaků, smazat displej, zobrazovat na konkrétní pozici apod.
Názorně si ukážeme zobrazení znaků na displeji 2x16 znaků. Data, která se mají zobrazit jsou uložena v paměti DDRAM (Display Data Random Acces Memory). Každý zobrazovaný znak má svojí adresu. Ve skutečnosti je adresa posazena o 80h. Hodnota pro 1 řádek 1znak je 80h pro 2 řádek 1 znak je C0h.
V tabulce jsou uvedeny pozice, na kterých jsou uloženy znaky pro zobrazení na řádcích.
Jednořádkové displeje |
Dvouřádkové displeje |
Čtyřřádkové displeje |
||||||||||||||||||||||||||
|
|
|
Poznámka: Některé jednořádkové displeje 1x16 znaků se musí inicializovat jako dvouřádkové! Je to zjednodušení a šetření ze strany výrobce, protože jeden řadič LCD displeje umí ovládat 2x8 znaků. Bližší informace najdete v datasheetu každého displeje.
| pozice LCD | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| adresa DDRAM | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
| adresa DDRAM | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F |
Pokud je nastaven posun displeje doleva , bude po provedení posunu zobrazeny následující adresy.
| pozice LCD | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| adresa DDRAM | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | 10 |
| adresa DDRAM | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F | 50 |
Pokud je nastaven posun displeje doprava , bude po provedení posunu zobrazeny následující adresy.
| pozice LCD | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| adresa DDRAM | 27 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E |
| adresa DDRAM | 67 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E |
Prvních 8 znaků (znak 0 - 7) je možno nadefinovat uživatelem třeba jako české znaky nebo různé grafické symboly podle vlastního přání. Pro češtinu je osm znaků málo, proto se znaky můžou měnit v generátoru znaků před jejich zobrazením. Tento postup přepisování znaků nám ale přepíše i zobrazený znak (0 - 7) na displeji za nově nadefinovaný. Velikost znaku, které zapisujeme do paměti je 8x8 pixelů, ale zobrazí se jen 5x8 (šířka x výška) nebo 5x10 podle zvoleného nastavení displeje při inicializaci. Pro vytváření vlastních znaků napsal pěkný program Filip Zajíček s názvem LCDChar v.1.3.1.
| Instrukce | Signál | Popis | čas ** |
|||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
| Smazat displej | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Smaže displej a nastaví adresu DDRAM na 0. | 1.64ms |
| Návrat na pozici 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * | Nastaví adresu DDRAM na 0. Vrátí kurzor na pozici 0 a posune displej zpět do původní pozice. Obsah DDRAM zůstane zachován. | 1.64ms |
| Nastavení módu | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | Nastaví směr pohybu kurzoru, a specifikuje posun displeje. Operace jsou prováděny během zápisu a čtení dat. | 40us |
| Kontrola displeje zap/vyp | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | Zapne/vypne displej (D), zapne/vypne kurzor (C) a blikání kurzoru (B). | 40us |
| Posun kurzoru, displeje | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * | Pohyb kurzoru a posun displeje bez změny obsahu DDRAM. | 40us |
| Nastavení funkce | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * | Délka rozhraní (DL), počet řádek displeje (N) a velikost fontu (F). | 40us |
| Nastavení adresy CGRAM | 0 | 0 | 0 | 1 | CGRAM adresa | Nastaví adresu CGRAM. Data jsou přenesena po tomto nastavení. | 40us | |||||
| Nastavení adresy DDRAM | 0 | 0 | 1 | DDRAM adresa | Nastaví adresu DDRAM. Data jsou přenesena po tomto nastavení. | 40us | ||||||
| Čtení příznaku Busy Flag a adresy | 0 | 1 | BF | CGRAM / DDRAM adresa | Čte příznak (BF), který indikuje provádění vnitřních operací a čte adresu CGRAM nebo DDRAM (v závislosti na předchozí instrukci). | 0us | ||||||
| Zápis dat do CGRAM nebo DDRAM | 1 | 0 | zápis dat | Zapíše data do CGRAM nebo DDRAM. | 40us | |||||||
| Čtení dat z CGRAM nebo DDRAM | 1 | 1 | čtení dat | Přečte data z CGRAM nebo DDRAM. | 40us | |||||||
Vysvětlivky:
DDRAM - Display Data RAM. (paměť zobrazovaných znaků)
CGRAM - Character Generator RAM. (paměť pro uložení vlastního znaku)
* - Na hodnotě nezáleží.
** - Maximální čas při frekvenci oscilátoru 270KHz.
| Název bitu | Popis | |
|---|---|---|
| I/D | 0 - Snížení | 1 - Zvýšení |
| S | 0 - Není posun displeje | 1 - Posun displeje při zápisu dat |
| D | 0 - Vypnout displej | 1 - Zapnout displej |
| C | 0 - Vypnout kurzor | 1 - Zapnout kurzor |
| B | 0 - Vypnout blikání kurzoru | 1 - Zapnout blikání kurzoru |
| S/C | 0 - Posun kurzoru | 1 - Posun displeje |
| R/L | 0 - Posun doleva | 1 - Posun doprava |
| DL | 0 - 4bitová komunikace | 1 - 8bitová komunikace |
| N | 0 - 1 řádek | 1 - 2 řádky |
| F | 0 - 5x8 bodů | 1 - 5x10 bodů |
| BF | 0 - Operace je ukončena | 1 - Operace probíhá |
Smaže displej. Zapíše kód 20H (kód 20H je prázdný znak) do všech adres DDRAM. Potom nastavý DDRAM adresu 0 adresového čítače a návrat displej k jeho originálnímu stavu, jestliže byl posunutý. Jinými slovy, displej zmizí a kurzor nebo blikání směřuje displej doleva (v 1řádce 2řádkového displeje). To také nastaví I / D na 1 (zvýšení) v nastavovacím módu. S se v módu nastavení nezmění.
Vrátí se na začátek. Nastaví adresu DDRAM na 0 a vrátí displej do jeho originálnímu stavu jestliže byl posunut. Nezmění se obsah DDRAM. Kurzor nebo blikání směřuje displej doleva (v 1řádce 2řádkového displeje).
I / D: Zvětší (I / D = 1) nebo zmenší
(I / D = 0) adresu DDRAM o 1, když kód znaku je zapsán do nebo čten z DDRAM. Kurzor nebo
blikající pohyb doprava zvětšen o 1 a doleva zmenšený o 1. Stejné platí při zápisu a čtení
z CGRAM.
S: Posune celý displej o jeden znak doprava (I / D = 0) nebo doleva (I / D = 1),
když S je 1. Displej se neposune jestliže S je 0. Jestliže S je 1, bude se zdát jako by se
kurzor nepohyboval ale displej pracuje. Displej se neposune, když čte z DDRAM. Také psaní
do nebo čtení z vnější CGRAM displej neposune.
D: Displej zapnut když D je 1 a vypnut když D je 0. Když je vypnut, data displeje
zůstanou v DDRAM, ale můžou být zobrazena okamžitě tím, že D je 1.
C: Kurzor je zobrazen když C je 1 a nezobrazen když C je 0. Dokonce jestliže
kurzor zmizí, funkce I / D nebo jiné specifikace nebudou se měnit během zápisu dat displeje.
Kurzor je zobrazen pomocí 5 teček v 8-mé řádce pro 5x8 bodů a v 11-té řádce pro 5x10 bodů.
B: Znak ukázaný kurzorem bliká když B je 1. Blikání je zobrazováno jako přepíná
mezi celým prázdným místem a zobrazovaným znakem rychlostí 409,6 ms, když fcp nebo fosc je
250 kHz. Kurzor a blikání může být zobrazováno současně. (Frekvence blikání podle fosc nebo
podobný z fcp. Například, když fcp je 270 kHz, 409,6 x 250 / 270 = 379,2 ms.)
Posun kurzoru nebo displeje změní místo kurzoru nebo displeje doprava nebo doleva bez
psaní nebo čtení zobrazovaných dat. Tato funkce opravuje nebo hledá na displeji. Na 2řádek
se kurzor přemístí z 1řádky, když bude přes 40-té číslo 1 řady. Poznamenávám, že první a
druhá řádka displeje se posouvá zároveň. Když zobrazovaná data jsou posouvána opakovaně
každá řádka se pohybuje jenom vodorovně. Z druhé řádky se neposune do první řádky. Čítač
adres (AC) nebude měnit obsah jestliže se jenom vykonaná posun displeje.
DL: Nastaví délku datového rozhraní. Data jsou poslaná nebo přijatá 8-bitově
(DB7 - DB0) když DL je 1, a 4-bitově (DB7 k DB4) když DL 0. Při vybrání 4-bitové délky,
data musí být poslána nebo přijata dvakrát.
N: Nastaví počet řádků displeje.
F: Nastaví velikost znaku.
Poznámka: Provádět Funkci u hlavy programu předtím, než vykonal nějaká instrukce
(kromě čtení busy flag a instrukce adres). Od tohoto bodu, nastavení funkce instrukcí
nemůže být vykonána změna délky datového rozhraní.
Nastavením adresy CGRAM dá CGRAM binární adresu AAAAAA do adresového čítače. Data jsou
pak zapsána nebo čtena od MPU pro CGRAM.
Nastavením adresy DDRAM dá DDRAM binární adresu AAAAAAA do adresového čítače. Data jsou
pak zapsána nebo čtena od MPU pro DDRAM. Nicméně, když N je 0 (1-řádkový displej), AAAAAAA
může být 00H - 4FH. Když N je 1 (2-řádkový displej ), AAAAAAA může být 00H - 27H pro 1 řádek
a 40H - 67H pro 2 řádek.
Čtení busy flag a čtení adresy busy flag (BF) ukazuje, že systém vnitřně pracuje na
předchozí přijaté instrukci. Jestliže BF je 1, vnitřní operace je v běhu. Příští instrukce
nebude přijata do okamžiku než BF je 0. Kontrolovat BF stav před příštím zápisem operace. U
stejný čas, hodnota adresový čítač v binární AAAAAAA je čten ven. Tento adresový čítač je
použitý u obou CG a DDRAM adresy a jeho hodnota je předurčená předchozí instrukcí. Adresový
obsah je stejný pokud jde o instrukce nastavení adresy CGRAM a nastavení adresy DDRAM.
Zapisuje data do DDRAM nebo CGRAM.
Čte data z CGRAM nebo DDRAM.
Poznámka:
Popis instrukcí je přeložen z originální dokumentace obvodu
HD44780U od firmy HITACHI.
Vnitřní reset se automaticky inicializuje po zapnutí řadiče HD44780U a nastaví se takto:
Po zapnutí napájení a provedení vnitřního resetu se musí provést inicializace displeje.
Nastaví se 8-bitová nebo 4-bitová komunikace a základní uživatelské
nastavení. V následující tabulce je vypsána inicializace po jednotlivých instrukcích.
Inicializace pro 8-bitovou komunikaci |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Zapnutí napájení (Power On) | poznámka |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| čekej minimálně 15 ms po náběhu Vcc nad 4,5V | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
nelze testovat BF, nastaven 8-bitový interface |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
čekej minimálně 4,1ms |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
nelze testovat BF, nastaven 8-bitový interface |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
čekej minimálně 100µs |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
nelze testovat BF, nastaven 8-bitový interface |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
čekej na BF=0 nebo 40us, 2-řádky, font znaku 5x8 Displej, kurzor, blikání vyp smazat displej posun kursoru do prava zapnout displej |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
konec inicializace |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Inicializace pro 4-bitovou komunikaci |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Zapnutí napájení (Power On) | poznámka |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| čekej minimálně 15 ms po náběhu Vcc nad 4,5V | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
nelze testovat BF, nastaven 8-bitový interface |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
čekej minimálně 4,1ms |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
nelze testovat BF, nastaven 8-bitový interface |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
čekej minimálně 100µs |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
nelze testovat BF, nastaven 8-bitový interface |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
čekej na BF=0 nebo 40us, nastaven 4-bitový interface |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2-řádky, font znaku 5x8 Displej, kurzor, blikání vyp smazat displej posun kursoru do prava zapnout displej |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
konec inicializace |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||