79 82

background image

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

background image

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.

background image

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

background image

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


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron