79
Elektronika Praktyczna 9/99
S P R Z Ę T
Do wielu zastosowaÒ kontrolno-pomiaro-
wych w†zupe³noúci wystarczy wskaünik sk³a-
daj¹cy siÍ z†kilku wierszy lub wskaünik gra-
ficzny o†niewielkiej rozdzielczoúci. Na rynku
dostÍpnych jest bardzo wiele gotowych mo-
du³Ûw, od bardzo prostych aø do w†pe³ni
emuluj¹cych karty SVGA i†monitory koloro-
we. Niestety, informacje dotycz¹ce dzia³ania,
a†co najwaøniejsze uøytkowania wskaünikÛw
nie s¹ powszechnie dostÍpne. Opracowanie
niniejsze ma na celu pokazanie jak w†prosty
sposÛb moøna wyposaøyÊ we wskaünik alfa-
numeryczny lub graficzny sterownik oparty
na p³ycie g³Ûwnej komputera PC.
Wskaüniki alfanumeryczne
WiÍkszoúÊ wskaünikÛw alfanumerycznych,
oprÛcz samego elementu ciek³okrystaliczne-
go, posiada zintegrowany uk³ad kontrolera.
Najpopularniejszym sterownikiem alfanume-
rycznym jest uk³ad HD44780 firmy Hitachi.
Prezentowane w†dalszej czÍúci rozwi¹za-
nia dotyczyÊ bÍd¹ wskaünika LM032 rÛw-
nieø firmy Hitachi. Wskaünik ten umoøliwia
wyúwietlanie 2 linii tekstu po 20 znakÛw
w†wierszu. Poniewaø kontroler HD44780 jest
sterownikiem uniwersalnym, sterowanie za
jego pomoc¹ innych wskaünikÛw (nawet in-
nych firm) jest bardzo podobnie i†sprowadza
siÍ do ustawienia odpowiednich parametrÛw
konfiguruj¹cych. Co wiÍcej, wiÍkszoúÊ goto-
wych modu³Ûw wkaünikÛw, w†odrÛønieniu
od wskaünikÛw graficznych, uøywa iden-
tycznego interfejsu z†jednostk¹ centraln¹.
Sterownik HD44780 jest uk³adem CMOS
duøej skali integracji, zapewniaj¹cym kom-
pleksow¹ obs³ugÍ wskaünikÛw alfanume-
rycznch. Wszystkie niezbÍdne funkcje kon-
trolne zosta³y zaimplementowane sprzÍtowo,
odci¹øaj¹c w†ten sposÛb g³Ûwny procesor.
WewnÍtrznie HD44780 sk³ada siÍ z†rejestru
kontrolnego, rejestru danych, bufora na 80
znakÛw oraz z†generatora 192 znakÛw zre-
alizowanych w†matrycy 5x7 lub 5x10 pun-
ktÛw. W†zestawie znakÛw znajduje siÍ 96
znakÛw ³aciÒskich, 64 znaki Kata kana i†wy-
brane 32 znaki greckie. Kody znakÛw alfa-
numerycznych zgodne s¹ z†ASCII (32..127).
Ponadto, generator znakÛw pozwala na
zdefiniowanie przez uøytkownika do 8†do-
wolnych glifÛw. Po³¹czenie uk³adu HD44780
z†jednostk¹ steruj¹c¹ odbywa siÍ za pomoc¹
prostego interfejsu rÛwnoleg³ego. Wszystkie
sygna³y steruj¹ce dostÍpne s¹ na 14-styko-
wym z³¹czu, do ktÛrego moøna zamontowaÊ
standardowy wtyk IDC14 oraz gniazdo z†kab-
lem wstÍgowym. Rozk³ad sygna³Ûw na gnieü-
dzie wskaünikÛw alfanumerycznych firmy
Hitachi przedstawiono w†tab. 1.
Do wskaünika oprÛcz sygna³Ûw steruj¹-
cych, masy i†zasilania +5V naleøy przy³¹-
czyÊ napiÍcie steruj¹ce kontrastem wskaüni-
ka. NapiÍcie to otrzymuje siÍ z†suwaka po-
tencjometru o†wartoúci 10..20k
Ω
(patrz rys.
1). Interfejs kontrolera HD44780 przystoso-
wany jest do bezpoúredniej wspÛ³pracy z†szy-
n¹ procesorÛw 6502/6800. Przy³¹czenie
wskaünika do szyny procesorÛw iAPX86 nie
stanowi wielkiego problem, jako øe w†wiÍk-
szoúci zastosowaÒ praktycznych wskaüniki
sterowane nie s¹ bezpoúrednio przez proce-
sor, a†poúrednio przez uk³ad peryferyjny np.
8255 lub, jak w†przypadku prezentowanego
rozwi¹zania, poprzez niewykorzystywany
port drukarkowy.
Obs³uga poúrednia wymaga w†pe³ni pro-
gramowej generacji sekwencji sygna³Ûw ste-
ruj¹cych. I†w†tym przypadku nie stanowi to
wielkiego problemu, gdyø HD44780 (bÍd¹c
uk³adem CMOS) nie moøe byÊ sterowany
zbyt szybko. Procedury wejúcia/wyjúcia mo-
g¹ byÊ z†powodzeniem zrealizowane w†jÍzy-
ku wyøszego poziomu, np. C.
Duø¹ zalet¹ uk³adu HD44780 jest moøli-
woúÊ stosowania zarÛwno czterobitowej jak
i†oúmiobitowej szyny danych. W†po³¹czeniu
z†trzema sygna³ami steruj¹cymi moøliwa jest
wiÍc pe³na kontrola wskaünika nawet jed-
nym bajtem.
Obs³uga wskaünika
W†opisywanym rozwi¹zaniu wskaünik ob-
s ³ u g i w a n y j e s t z a p o m o c ¹ b i b l i o t e k i
HD44780.h. Biblioteka ta sk³ada siÍ z†dwu
czÍúci. W†czÍúci pierwszej zebrane s¹ fun-
kcje zapewniaj¹ce uniwersaln¹ obs³ugÍ por-
tÛw rÛwnoleg³ych komputera PC. W†czÍúci
drugiej znajduj¹ siÍ definicje s³Ûw kontrol-
nych, funkcje generuj¹ce cykle zapisu do
i†odczytu z†uk³adu HD44780, jak rÛwnieø
podstawowe funkcje edycyjne.
Wykorzystanie portu
drukarkowego komputera PC do
komunikacji z uk³adami
peryferyjnymi
Z³¹cze Centronics komputera PC stanowi
doskona³y, uniwersalny interfejs rÛwnoleg³y,
ktÛry wraz z†odpowiednim oprogramowa-
niem moøe s³uøyÊ do kontroli nie tylko
wskaünika ciek³okrystalicznego, ale takøe in-
nych uk³adÛw.
Komputer PC moøe byÊ wyposaøony
w†cztery porty drukarkowe znane w†syste-
mie MSDOS jako porty LPT1, LPT2, LPT3
i†LPT4. Przynajmniej jeden port dostÍpny
jest w†starszych komputerach na karcie Mul-
Sterowanie wskaźnikami
ciekłokrystalicznymi
Sterownik wyświetlacza alfanumerycznego
Wskaünik ciek³okrystaliczny
stanowi doskona³y element
uzupe³niaj¹cy sterownik
mikrokomputerowy. RozwÛj
technologii i†obniøka cen
elementÛw umoøliwia konstrukcje
sterownikÛw bazuj¹cych na
p³ytach g³Ûwnych komputerÛw PC.
Nic wiÍc dziwnego, øe pomys³
zast¹pienia karty graficznej
i†monitora wskaünikiem
ciek³okrystalicznym jest bardzo
atrakcyjnym rozwi¹zaniem nie
tylko obniøaj¹cym koszty, ale
rÛwnieø gabaryty i†pobÛr pr¹du
przez taki sterownik.
Tabela 1. Interfejs wskaźnik−komputer.
złącze
sygnał
bit
złącze
opis
LM032
sterujący
LPT
1
Vss
−
18..25
masa zasilania
2
Vdd
−
−
zasilanie +5V
3
Vo
−
−
kontrast ~0,7V
4
RS
D1
14
0:rozkaz, 1:znak
5
R/W
D3
17
0:zapis, 1:odczyt
6
E
D0
1
strob 1−>0
7..14
D0..D7
2..9
szyna danych
S P R Z Ę T
Elektronika Praktyczna 9/99
80
ti I/O, a†w†nowszych montowany jest bez-
poúrednio na p³ycie g³Ûwnej. Sterowanie
interfejsem Centronics moøliwe jest poprzez
BIOS komputera albo bezpoúrednio przez
program. Z³¹cze LPT obs³ugiwane jest przez
3†porty: port danych, port kontrolny i†port
statusu. Adresy portÛw dla LPT2 wynosz¹
odpowiednio 0x378, 0x37A i†0x379. Now-
sze rozwi¹zania portÛw drukarkowych typu
EPP uøywaj¹ rÛwnieø dodatkowych rejest-
rÛw i†sprzÍtowych protoko³Ûw transmisji.
Port danych w†wiÍkszoúci rozwi¹zaÒ (po-
cz¹wszy od portÛw bitronics) moøe byÊ uøy-
wany jako port dwukierunkowy. Port kon-
trolny stanowi czterobitowe wyjúcie, a†port
statusu 5-bitowe wejúcie. Kierunek trans-
misji przez port danych sterowany jest bi-
tem D5 portu kontrolnego. Bit D4 umoøliwia
automatyczn¹ generacjÍ przerwania int7.
Przyporz¹dkowanie pinÛw z³¹cza DB25
portu Centronics bitom portÛw wejúcia-wy-
júcia zebrano w†tab. 2. FunkcjÍ bitronics na
starszych kartach Multi I/O naleøy ustawiÊ
zwork¹, a†w†p³ytach g³Ûwnych ze zintegro-
wanym interfejsem naleøy ustawiÊ opcje EPP
w†SETUP BIOS-u. Pewnym utrudnieniem ob-
s³ugi portu kontrolnego i†statusu jest fakt,
øe czÍúÊ sygna³Ûw na z³¹czu peryferyjnym
jest zanegowana. Aby uproúciÊ do maksi-
mum komunikacjÍ przez z³¹cze LPT wystar-
czy przygotowaÊ zestaw funkcji komunika-
cyjnych. Funkcje te stanowi¹ czÍúÊ biblio-
teki HD44780.h i†przedstawione s¹ w†list. 1.
Sterowanie uk³adem HD44780 za
pomoc¹ portu rÛwnoleg³ego
komputera PC
Procedura zapisu do uk³adu HD44780
rozpoczyna siÍ od ustawienia linii RS
(RS=1, dane lub RS=0, rozkaz), linii R/W
(R/W=0, zapis lub RW=1, odczyt). Cykl
rozpoczyna siÍ narastaj¹cym zboczem syg-
na³u wybieraj¹cego E. Dane do rejestru
wewnÍtrznego wpisywane s¹ zboczem opa-
daj¹cym E. Podobnie, cykl odczytu inicjo-
wany jest ustawieniem linii RS i†R/W,
a†sam odczyt dokonywany jest w†czasie
aktywnoúci linii E. SzczegÛ³y przedstawio-
no na rys. 2.
G³Ûwnym ograniczeniem
czÍstoúci powtarzania cyk-
lÛw dostÍpu jest czas trwa-
nia sygna³u wybieraj¹cego
E, ktÛry nie moøe byÊ krÛt-
szy niø 500ns. Okres cyklu
odczytu okreúlony czasem
pomiÍdzy kolejnymi naras-
taj¹cymi zboczami sygna³u
E†nie moøe byÊ krÛtszy niø
1
µ
s. Co wiÍcej, kontroler
po otrzymaniu rozkazu
wykonuje go, w†zaleønoúci
od polecenia, w†czasie od
1
µ
s do 5ms i†w†tym czasie
nie moøe przyj¹Ê ani roz-
kazu, ani danych.
S y g n a ³
z a j Í t o ú c i
HD44780 moøe byÊ testo-
wany poprzez odczyt jego
rejestru kontrolnego. W†odczytanym s³owie
bit D7=1 oznacza zajÍtoúÊ kontrolera.
Bezpoúrednio po w³¹czeniu zasilania
i†minimum 15-ms pauzie, wewnÍtrzny uk³ad
zeruj¹cy inicjuje kontroler. Ustawiane s¹ na-
stÍpuj¹ce parametry wyjúciowe: 8-bitowa szy-
na danych, 1†linia tekstu, matryca 5x7 pun-
ktÛw, wskaünik, kursor i†migotanie znaku
zostaj¹ wy³¹czone. Przesuwanie okienka zo-
staje zabronione oraz ustawiony jest ruch
kursora w†prawo. W†trakcie inicjacji wskaü-
nik BF ustawiony jest na 1.
WewnÍtrzny uk³ad zeruj¹cy HD44780 dzia-
³a poprawnie jedynie wtedy, gdy czas na-
rastania napiÍcia zasilania jest krÛtszy od
10ms. W†przeciwnym razie kontroler zosta-
nie ustawiony w†stan nieustalony i†wymaga
zerowania programowego. Do zasilania
wskaünika moøna z†powodzeniem uøyÊ na-
piÍcia +5V dostÍpnego w†gnieüdzie klawia-
tury komputera PC.
Przy inicjacji programowej HD44780 za-
leca siÍ wstÍpne trzykrotne przes³anie do
rejestru rozkazÛw (RS=R/W=0) kodu 0x30,
przy czym pomiÍdzy pierwszym a†drugim
przes³aniem musi up³yn¹Ê czas min. 4,1ms,
a†miÍdzy drugim i†trzecim min. 100
µ
s.
W†trakcie wstÍpnej inicjacji obowi¹zuje 8-
bitowa szyna danych (choÊ bity D3..D0 s¹
ignorowane). Kod 0x30 przesy³any jest wiÍc
w†jednym cyklu. Ponadto, pomiÍdzy tymi
przes³aniami nie moøna testowaÊ stanu za-
jÍtoúci kontrolera.
Po wykonaniu wstÍpnej inicjacji, kolejne
rozkazy mog¹ byÊ przesy³ane z†wstÍpnym
sprawdzaniem zajÍtoúci kontrolera. Przebie-
gi czasowe cyklÛw zapisu i†odczytu, przed-
stawione na rys. 2, praktycznie realizowane
s¹ w†opisywanym projekcie za pomoc¹ fun-
kcji lcdwr() i†lcdrd(), ktÛrych ìtreúÊî przed-
stawiono na list. 1. Funkcja lcdwait() wy-
konywana na pocz¹tku cyklÛw zapisu i†od-
czytu ma za zadanie upewniÊ siÍ czy uk³ad
HD44780 nie jest zajÍty wykonywaniem po-
przedniego rozkazu.
Programowanie uk³adu HD44780
Uk³ad HD44780 programowany jest za po-
moc¹ 11 rozkazÛw. Rejestr kontrolny s³uøy
do ustawiania parametrÛw pracy, a†rejestr
danych do przesy³ania i†odczytu zawartoúci
wewnÍtrznego bufora uk³adu: adresu kursora
i†zawartoúci generatora znakÛw.
Pe³na lista rozkazÛw HD44780 zestawiona
jest w†tab. 3. Poniøej znajduje siÍ krÛtki opis
poszczegÛlnych poleceÒ.
Clear display
Kasuje bufor wskaünika wpisuj¹c do
wszystkich komÛrek pamiÍci kod 0x20 (spa-
cja) i†ustawia kursor w†pozycji Home (adres
0).
Return Home
Ustawia kursor w†pozycji Home. Przesta-
wia rÛwnieø okienko na adres 0. ZawartoúÊ
bufora nie ulega zmianie.
Entry mode set
Ustawia kierunek zmian kursora (I/D=1 -
w†prawo, I/D=0 - w†lewo) i†zezwala na prze-
suwanie okienka (S=1 - zezwala, S=0 - blo-
kuje). Po ustawieniu operacje z†kursorem lub
okienkiem wykonywane s¹ automatycznie
po rozkazie wpisania lub odczytu znaku.
Display ON/OFF
Ustawia atrybuty wskaünika i†kursora:
D=1 - wskaünik aktywny, D=0 - wskaünik
zgaszony,
C=1 - kursor widoczny, C=0 - kursor ukry-
ty,
B=1 - znak pod kursorem migocze, B=0
- znak nie migocze.
Cursor/display shift
Przestawia kursor lub okienko:
S/C
R/L
0
0
przestawia kursor w†lewo
0
1
przestawia kursor w†prawo
1
0
przestawia okienko (i kursor)
w†lewo
1
1
przestawia okienko (i kursor)
w†prawo
Function set
Ustawia szerokoúÊ szyny danych (D=1 - 8
bitÛw, D=0 - 4†bity), liczba obs³ugiwanych
linii (N=0 - 1†linia, N=1 - 2†linie) oraz matrycÍ
znakÛw (F=0 - 5x7, F=1 - 5x10). Jeúli wybrano
N=1 dostÍpna jest jedynie matryca 5x7.
Rys. 1. Podłączenie potencjometru kontrastu wskaźnika.
Tab. 2. Złącze DB25 interfejsu Centronics komputera PC.
port
adres
D7
D6
D5
D4
D3
D2
D1D0
dane
0x278
2
3
4
5
6
7
8
9
kontrola
0x27A
−
−
dir
int
/17
16
/14
/1
status
0x279
/11
10
12
13
15
−
−
−
masa
18..25
Rys. 2. Cykle zapisu i odczytu kontrolera
HD44780.
81
Elektronika Praktyczna 9/99
S P R Z Ę T
Set CG RAM address, Set DD RAM address
Ustawia pocz¹tkowy adres pamiÍci gene-
ratora znakÛw (CG) lub bufora wskaünika
(DD). Po ustawieniu adresu kolejne operacje
zapisu i†odczytu odnosz¹ siÍ do wyspecy-
fikowanego obszaru.
Write Data (CG/DD)
Wpisuje znak do pamiÍci ustawionej ostat-
nim rozkazem ìSet CG addressî lub ìSet DD
addressî i†do komÛrki, ktÛrej adres wskazy-
wany jest przez aktualn¹ wartoúÊ licznika
adresÛw. Po zapisie danej licznik zostaje
uaktualniony w†sposÛb ustalony rozkazem
ìEntry mode setî.
Read Data (CG/DD)
Odczytuje znak z†komÛrki wskazywanej
przez licznik adresÛw. Typ odczytywanej
pamiÍci (CG/DD) ustalony jest ostatnim roz-
kazem ìSet CG addressî lub ìSet DD ad-
dressî.
Read BF & address
Czyta wskaünik zajÍtoúci kontrolera (BF=1
- zajÍty, BF=0 - wolny) oraz aktualn¹ wartoúÊ
licznika adresu. Wskaünik BF naleøy kaødo-
razowo sprawdzaÊ przed wys³aniem do kon-
trolera zarÛwno rozkazu jak i†znaku.
W†przypadku konfiguracji 8-bitowej szy-
ny danych informacja do i†z†kontrolera
przesy³ana jest przy uøyciu wszystkich 8
bitÛw danych kontrolera. Przy 4-bitowej
szynie danych wykorzystuje siÍ jedynie
bity D7..D4 interfejsu. Dane i†rozkazy prze-
s y ³ a n e s ¹ w † d w u k o l e j n y c h c y k l a c h .
W†pierwszym cyklu przesy³ane s¹ starsze
bity (D7..D4), a†w†drugim m³odsze bity
(D3..D0).
/******************************************************
* HD44780.h
* biblioteka obsługi HD44780 przy użyciu interfejsu
* Centronics
* (c) Janusz J. Młodzianowski
******************************************************/
#include <dos.h>
/************ Obsługa portów LPT *********************/
#define LPTDATA 0x378 /* zakładamy LPT2 */
#define LPTSTAT 0x379
#define LPTCTRL 0x37A
/* prototypy */
void lptwr(char value);
char lptrd(void);
char lptstat(void);
void ltpcmd(char cmd);
/******************************************************
* zapis do portu danych LPT
******************************************************/
void lptwr(char value)
{
outportb(LPTDATA,value);
}
/******************************************************
* odczyt z portu danych LPT
******************************************************/
char lptrd(void)
{
return(0xff&inportb(LPTDATA));
}
/******************************************************
* odczyt z portu statusu LPT
******************************************************/
char lptstat(void)
{
char tmp;
tmp=inportb(LPTSTAT);
return((0xff&tmp^0x80)>>3);
}
/******************************************************
* zapis do portu kontrolnego LPT
******************************************************/
void lptcmd(char cmd)
{
outportb(LPTCTRL,cmd^0xB);
}
/*********** obsługa HD44780 ********************/
#define LCDIN
0x28
/* dir, rw */
#define LCDOUT
0
/* dir, rw */
#define LCDDATA
0x02
/* rs */
#define LCDCMD
0
/* rs */
#define LCDEN
0x01
/* e */
#define LCDDIS
0
/* e */
#define EDELY
1
/* mim 540ns */
#define CLEAR
0x01
/* kasuj wskaźnik */
#define HOME
0x02
/* home cursor */
#define WRLEFT
0x04
/* zwiększac adres */
#define WRIGHT
0x06
/* zmniejszać adres */
#define WRSHIFTRIGHT
0x07
/* obrót w prawo */
#define WRSHIFTLEFT
0x05
/* obrót w lewo */
#define BLINK
0x09
/* kursor mrugajacy */
#define NOBLINK
0x08
/* niemrugający kursor*/
#define CURON
0x0A
/* kursor widoczny */
#define CUROFF
0x08
/* kursor niewidoczny */
#define DISPON
0x0C
/* wskaźnik włączony */
#define DISPOFF
0x08
/* wskaźnik wyłączony */
#define SHIFCURTLEFT
0x10
/* kursor w lewo */
#define SHIFTCURRIGHT 0x14
/* kursor w prawo */
#define SHIFDISPLEFT
0x18
/* przesunięcie w lewo */
#define SHIFDISPRIGHT 0x1C
/* przesunięcie w prawo */
#define MODE8
0x30
/* 8-bitowa szyna */
#define MODE4
0x20
/* 4-bitowa szyna */
#define LINES1
0x20
/* 1 linia */
#define LINES2
0x28
/* 2 linie */
#define DOTS7
0x20
/* font 5x7 */
#define DOTS10
0x24
/* font 5x10 */
#define CGRAM
0x40
/* | adres */
#define DDRAM
0x80
/* | adres */
/* prototypy */
void lcdwait(void);
void lcdset(char mode, char display, char cursor);
void lcdwr(char sel, char value);
char lcdrd(char sel);
void lcdchar(char ch);
void lcdstr(char *str);
/******************************************************
* oczekiwanie na zwolnienie kontrolera
******************************************************/
void lcdwait(void)
{
char busy;
do{
lptcmd(LCDIN|LCDCMD|LCDEN);
busy=lptrd()&0x80;
lptcmd(LCDIN|LCDCMD|LCDDIS);
}while(busy);
}
/******************************************************
* ustawienie parametrów pracy
******************************************************/
void lcdset(char mode, char display, char cursor)
{
lcdwr(LCDCMD,mode);
lcdwr(LCDCMD,display);
lcdwr(LCDCMD,cursor);
lcdwr(LCDCMD,CLEAR);
lcdwr(LCDCMD,HOME);
}
/******************************************************
* cykl zapisu
******************************************************/
void lcdwr(char where, char value)
{
lcdwait();
lptcmd(LCDOUT|where|LCDEN);
lptwr(value);
delay(EDELY);
lptcmd(LCDOUT|where|LCDDIS);
}
/******************************************************
* cykl odczytu
******************************************************/
char lcdrd(char what)
{
char tmp;
lcdwait();
lptcmd(LCDIN|what|LCDEN);
delay(EDELY);
tmp=lptrd();
lptcmd(LCDIN|what|LCDDIS);
return(tmp);
}
/******************************************************
* zapis znaku
******************************************************/
void lcdchar(char ch)
{
lcdwr(LCDDATA,ch);
}
/******************************************************
* zapis ciągu znaków
******************************************************/
void lcdstr(char *str)
{
while(*str) lcdwr(LCDDATA,*str++);
}
List. 1. Kod źródłowy biblioteki HD44780.h
S P R Z Ę T
Elektronika Praktyczna 9/99
82
Organizacja pamiÍci ekranu
Uk³ad HD44780 posiada wewnÍtrzny bu-
for (oznaczony jako DD RAM), przeznaczony
do wyúwietlania na wskaüniku do 80 zna-
kÛw. W†zaleønoúci od konfiguracji i†zasto-
sowanego wyúwietlacza, znaki mog¹ byÊ wi-
zualizowane w†jednym lub w†kilku wier-
szach.
KomÛrki nie wykorzystane do wyúwietla-
nia mog¹ byÊ stosowane jako pamiÍÊ ogÛl-
nego przeznaczenia. Kod znaku do wyúwiet-
lenia przesy³any jest do komÛrki pamiÍci,
ktÛrej adres jest wyznaczony przez aktualn¹
zawartoúÊ licznika, ustawion¹ wczeúniej roz-
kazem ìSet DD RAM addressî. Licznik ten,
po kaødorazowym zapisie lub odczycie jest
automatycznie modyfikowany w†sposÛb
okreúlony wczeúniej rozkazem ìEntry mode
setî.
Kontroler HD44780 umoøliwia bezpoúred-
nie wyúwietlanie jedynie 8†znakÛw na
wiersz. Dodatkowe znaki (w wielokrotnoúci
8/wiersz) mog¹ byÊ wyúwietlane dziÍki do-
datkowym sterownikom typu HD44100. Tak
wiÍc wskaünik LM032, wyúwietlaj¹cy 20 zna-
kÛw w†wierszu, wymaga oprÛcz HD44780
dwÛch uk³adÛw HD44100. Ca³oúÊ zmontowa-
na jest fabrycznie na p³ytce modu³u wskaü-
nika.
W†zaleønoúci od liczby wyúwietlanych
linii, bufor wyúwietlacza jest w†rÛøny
s p o s Û b o d w z o r o w a n y n a w s k a ü n i k .
W†przypadku wyúwietlacza jednowierszo-
wego odwzorowanie jest trywialne. Kolej-
ne adresy bufora odpowiadaj¹ kolejnym
znakom na wskaüniku. W†danej chwili
wyúwietlanych jest jedynie tyle znakÛw
na ile pozwala wskaünik. Pozosta³e znaki
w†wierszu mog¹ byÊ wyúwietlone po za-
stosowaniu przesuniÍcia okienka, np. roz-
kazem ìCursor/display shiftî. PrzesuniÍ-
cie jest cykliczne, co oznacza, øe po ostat-
nim znaku z†bufora znajduje siÍ pierw-
szy. Tak wiÍc przy za³oøeniu, øe wskaü-
nik wyúwietla 20 znakÛw odwzorowanie
bÍdzie nastÍpuj¹ce:
0
1
2
3..19
okienko nie przesuniÍte
1
2
3
4..20
o k i e n k o p r z e s u n i Í t e
w†lewo
79 0
1
2..18
o k i e n k o p r z e s u n i Í t e
w†prawo
Nieco bardziej skomplikowane odwzoro-
wanie ma miejsce w†przypadku wskaünika
dwuwierszowego. Po ustawieniu rozkazem
ìFunction setî konfiguracji dwuwierszowej,
przestrzeÒ adresowa bufora staje siÍ nieci¹g-
³¹. Linia pierwsza, podobnie jak w†poprzed-
Listing 2. Przykład programu obsługi wskzaźnika LM032.
#include “HD44780.h”
main(){
/* ustawienie parametrów pracy */
lcdinit(MODE8|LINES2|DOTS7, DISPON|NOBLINK|CURON, WRIGHT);
/* definicja litery ‘ź’ o kodzie 1 */
lcdwr(LCDCMD,CGRAM|0x48);
lcdchar(2);
lcdchar(4);
lcdchar(0xff);
lcdchar(0x2);
lcdchar(0x4);
lcdchar(0x8);
lcdchar(0xff);
lcdchar(0);
/* ustawienie zapisu do bufora od początku linii 1 */
lcdwr(LCDCMD,DDRAM);
lcdstr(“Wska\1nik Hitachi”);
/* przejście do 5 pozycji w linii 2 */
lcdwr(LCDCMD,DDRAM|(0x40+5));
lcdstr(“LM 032”);
}
nim przypadku, odwzorowuje znaki od lo-
kacji 0,†ale do adresu 39, natomiast linia
druga pocz¹wszy od lokacji 64 do lokacji
103 (razem 80 znakÛw). PrzesuniÍcie okien-
ka powoduje cykliczny obrÛt zarÛwno pier-
wszej jak i†drugiej linii:
0
1
2..19
64 65 66..83
okienko nie przesuniÍte
1
2
3..20
65 66 67..84
okienko przesuniÍte
w†lewo
39 1
2..18
103 65 66..82
okienko przesuniÍte
w†prawo
Kontroler HD44780 moøe rÛwnieø stero-
waÊ wskaünikiem czterowierszowym (np.
LM044L). Przy takiej konfiguracji podzia³
bufora jest jeszcze bardziej skomplikowany.
Linia pierwsza wskaünika odwzorowuje lo-
kacje 0..19, linia druga lokacje 64..83, linia
trzecia lokacje 20..39, a†linia czwarta lokacje
84..103...
Programowany generator znakÛw
Generator znakÛw, w†ktÛry wyposaøony
jest kontroler HD44780 umoøliwia dowolne
zaprogramowanie 8†znakÛw w†postaci mat-
rycy 5x8 lub 4†znakÛw w†matrycy 5x11. Mi-
mo iø pamiÍÊ generatora ma strukturÍ baj-
tow¹, jedynie piÍÊ bitÛw (D4..D0) okreúla
kszta³t znaku. Nie wyúwietlane bity D7..D5
s¹ w†dalszym ci¹gu programowane i†mog¹
byÊ wykorzystane jako zwyk³y RAM.
Definiowane znaki o†kodach od 0†do
7†oraz powtÛrzone na pozycjach od 8†do 15
dostÍpne s¹ tak samo, jak znaki ze standar-
dowego generatora z†ROM.
Definiowanie glifÛw polega na wpisaniu
do kolejnych lokacji pamiÍci generatora zna-
kÛw (CG RAM), pocz¹wszy od adresu 64,
kolejnych (przy za³oøeniu automatycznego
zwiÍkszania licznika adresu) 8†lub 11 baj-
tÛw na kaødy znak. Ostatnia linia przezna-
czona na kursor zwykle nie jest programo-
wana.
£¹cze komputer-wskaünik
Konstruowany interfejs ³¹czy wskaünik
z†portem drukarki (p³yty g³Ûwnej komputera
PC) za pomoc¹ 30 cm odcinka kabla wstÍ-
gowego.
Potencjometr kontrastu oraz gniazdo ze-
wnÍtrznego zasilania +5V zmontowane s¹
w†standardowej plastykowej obudowie wty-
ku DB25. Linie danych wskaünika sterowane
s¹ poprzez port danych. Linie: RS, R/W oraz
E†obs³uguje port kontrolny LPT. Bezpoúred-
nio po w³¹czeniu zasilania komputera, linie
danych portu drukarkowego ustawione zo-
staj¹ jako wyjúcie. Linie steruj¹ce, za wy-
j¹tkiem linii SlctIn (pin 17), przechodz¹
w†stan wysoki.
Aby unikn¹Ê konfliktu miÍdzy portem LPT
a†kontrolerem HD44780, linia R/W sterowa-
na jest bitem D3 portu kontrolnego. Bit ten
po inicjacji komputera przyjmuje na z³¹czu
stan 0,†przygotowuj¹c kontroler do zapisu.
W†tab. 2 zebranie s¹ opisy poszczegÛlnych
sygna³Ûw i†numery koÒcÛwek na z³¹czach
kabla.
Przyk³adowy program obs³ugi
wskaünika
Obs³uga wskaünika sprowadza siÍ do usta-
wienia parametrÛw konfiguracyjnych instruk-
cj¹ lcdinit(). Zak³ada siÍ przy tym, øe wskaü-
nik zosta³ poprawnie zainicjowany po w³¹-
czeniu zasilania. W†opisywanym przyk³adzie
wybierane s¹: wskaünik dwuwierszowy, 8-
bitowa szyna danych, ruch kursora w†prawo
i†nie migocz¹cy kursor w†postaci podkreúle-
nia.
Po inicjacji zdefiniowany zostaje znak ìüî,
ktÛremu przyporz¹dkowany jest kod 1,†a†na-
stÍpnie na ekranie zostaje wyúwietlony
w†pierwszej linii tekst ìWskaünik Hitachiî,
a†na úrodku drugiej ìLM032î.
W†drugiej czÍúci artyku³u opisany zosta-
nie sposÛb sterowania wskaünika graficzne-
go LMG640X (240x128), wyposaøonego
w†zintegrowany kontroler HD61830B.
Janusz J. Młodzianowski
Karta katalogowa (PDF) dostÍpna jest pod
adresem http://www.ep.com.pl/ftp/hd44780.pdf
Tabela 3. Lista rozkazów kontrolera HD44780.
rozkaz
kod
sterowanie
D7
D6
D5
D4
D3
D2
D1D0
RS
R/W
Clear display
0
0
0
0
0
0
0
1
0
0
Return home
0
0
0
0
0
0
1
x
0
0
Entry mode set
0
0
0
0
0
1
I/D
S
0
0
Display ON/OFF
0
0
0
0
1
D
C
B
0
0
Cursor/display shift
0
0
0
1
S/C
R/L
x
x
0
0
Function set
0
0
1
DL
N
F
x
x
0
0
Set CG RAM address
0
1
adres
0
0
Set DD RAM address
1
adres
0
0
Write Data (CG/DD)
znak
1
0
Read Data (CG/DD)
znak
1
1
Read BF & address
BF
adres
0
1
x: bez znaczenia