Sterowanie wskaznikami LCD sterownik cz2


S P R Z  T
Sterowanie wskaznikami
ciekłokrystalicznymi
Sterownik wyświetlacza graficznego, część 2
Programowanie ukÅ‚adu Hp=6, dla szerokoÅ›ci 6 punktÛw,
W drugiej czÍÅ›ci artykuÅ‚u
HD61830B Hp=7, dla szerokoÅ›ci 7 punktÛw,
poÅ›wiÍconego sterowaniu
UkÅ‚ad HD61830B programowany jest za Hp=8, dla szerokoÅ›ci 8 punktÛw.
graficznego wyświetlacza LCD
pomocÄ… rejestru instrukcji (IR) oraz ogÛlne- W trybie graficznym Hp okreÅ›la ile bitÛw
prezentujemy listÍ rozkazÛw
go rejestru danych wejścia/wyjścia (DIOR). z bajtu ma byĘ wyświetlanych (Hp=8: ozna-
kontrolera HD61830B oraz
DostÍpnych jest 13 dwubajtowych rozka- cza wszystkie bity).
algorytm rysowania figur
zÛw. Rozkazy do kontrolera przesyÅ‚ane sÄ…
geometrycznych. w dwu kolejnych cyklach. Pierwszy zapis Set number of characters.
do rejestru IR specyfikuje kod rozkazu oraz Kod 0x02
numer jednego z 13 wewnÍtrznych rejest- RozkazìSet number ofcharactersî ustala
rÛw danych. W drugimcykluzapisu do(lub ilośĘ znakÛw wyÅ›wietlanych w linii w try-
odczytu z) rejestru DIOR informacja zostaje bie tekstowym lub ilośĘ bajtÛw (1 bit od-
przesłana do (odczytana z) wybranego re- powiada 1 punktowi) przypadających na
jestru wewnÍtrznego. PeÅ‚na lista rozkazÛw jednÄ… linie w trybie graficznym.
kontrolera HD61830Bzestawionajest w tab.
1. W dalszejczÍÅ›ci przedstawionyjestszcze- Set number of time division.
gÛÅ‚owy opis poszczegÛlnych rozkazÛw. Kod 0x03
Parametr ìTime divisionî jest odwrotnoÅ›-
Mode control. Kod 0x00 cią wielkości duty ratio (cykl wypełnienia)
RozkazìModecontrolî ustalasposÛb pra- charakteryzujÄ…cÄ… konkretny wyÅ›wietlacz.
cy wskaünika (D1=0: tryb tekstowy, D1=1: Dla wskaünika LMG640X duty ratio wynosi
trybgraficzny). W trybietekstowym ustawia 1/128, stÄ…d Nx=128.
siÍ atrybuty kursora (D2=0: kursor wyÅ‚Ä…czo-
ny, D2=1: kursor włączony), mruganie zna- Set cursor position. Kod 0x04
ku pod kursorem (D3=0: znak nie mruga- Parametr ìCursor positionî waÅ‚ny jedy-
jÄ…cy, D3=1: znak mrugajÄ…cy), wewnÍtrzny nie w trybie tekstowym ustala numer wier-
(D0=0)lubzewnÍtrzny(D0=1)generatorzna- sza w matrycyznakugdzie wyÅ›wietlany bÍ-
kÛw. ZarÛwno w trybietekstowymjaki gra- dzie kursor. Dla przykÅ‚adu w matrycy 5x7
ficznym wskaünik moÅ‚na zgasiĘ (D5=0: kursor wyÅ›wietlany bezpoÅ›rednio pod zna-
wskaünik wÅ‚Ä…czony, D5=1: wskaünik wyÅ‚Ä…- kiem ustala siÍ przez Cp=8.
czony). Bit D4 umoÅ‚liwia konfiguracjÍ ste-
rownika wskaünika w ktÛrej wykorzystuje Set display start low address.
siÍ dwa rÛwnolegle pracujÄ…ce kontrolery Kod 0x08
HD61830. W przypadku stosowania poje- Set display start high address.
dynczego kontrolera D4=1. Kod 0x09
Rozkazy ìSet display addressî ustalajÄ…
Set character pitch. Kod 0x01 odwzorowanie lewego gÛrnego rogu wskaü-
Rozkaz ìSet character pitchî dla trybu nika (pozycja Home) na pamiÍĘ RAM ek-
tekstowego ustala rozmiary, wraz z margi- ranu. W trybie graficznym adres ten składa
nesami, drukowanego znaku. WartośĘ Vp, siÍ 16 bitÛw. W trybie tekstowym waÅ‚ne sÄ…
istotna jedynie w trybie tekstowym, ozna- jedynie bity D3..D0 starszego bajtu i wszys-
cza wysokośĘ znaku a Hp jego szerokośĘ. tkie bity młodszego.
Mołliwe są jedynie trzy wartości Hp:
Set cursor low address.
Kod 0x0a
Tab. 1. Lista rozkazów kontrolera HD61830B.
Set cursor high address.
rozkaz IR DIOR D7 D6 D5 D4 D3 D2 D1 D0
Kod 0x0b
Mode control 0x00 0 0 dis ms blk cur gr cg
Rozkazy ìSet cursor addressî ustalajÄ… ad-
Set character pitch 0x01 (Vp-1) 0 (Hp-1)
res kursora w pamiÍci RAM. Kolejne zapisy
Set number of chars 0x02 0 (Hn-1)
(lub odczyty z) pamiÍci dokonywane bÍdÄ…
do (lub z) lokacji ustalonej przez połołenie
Set number of divs 0x03 0 (Nx-1)
kursora. Producentzalecaabyadres kursora
Set cursor pos 0x04 0 0 0 0 (Cp-1)
był ustawiany w kolejności: najpierw młod-
Set disp addr low 0x08 (address)
szy a po tym starszy bajt.
Set disp addr high 0x09 (address)
Set cursor addr low 0x0a (address)
Write display data. Kod 0x0c
Set cursor addr high 0x0b (address) Read display data. Kod 0x0d
Rozkazy ìWrite/Read display dataî sÅ‚uÅ‚Ä…
Write display data 0x0c (char/data)
do zapisu/odczytu kodu znaku (w trybie
Read display data 0x0d (char/data)
tekstowym) lub bajtu (w trybie graficznym).
Clear bit 0x0e 0 0 0 0 0 (Nb-1)
Po wykonaniu rozkazu adres kursora jest
Set bit 0x0f 0 0 0 0 0 (Nb-1)
automatycznie zwiÍkszany o 1.
Read busy flag
Elektronika Praktyczna 11/99
99
S P R Z  T
Clear bit. Kod 0x0e TrochÍ rachunku
Set bit. Kod 0x0f rÛÅ‚niczkowego
Rozkazy ìSet/Clear bitî umoÅ‚liwiajÄ… ma- Nawet najwspanialszy wskaünik graficz-
nipulacjÍ pojedynczymi punktami na ekra- ny bÍdzie maÅ‚o uÅ‚yteczny jeÅ›li nie bÍdzie-
nie. WartośĘ Nb ustala pozycjÍbitu w bajcie my w stanie generowaĘ na nim obrazÛw
(Nb=1 odpowiada D0, Nb=8 odpowiada D7). graficznych. Aby mÛc praktyczne korzystaĘ
Po wykonaniu rozkazu adres kursora jest z mołliwościgraficznych potrzebnesą przy-
automatycznie zwiÍkszany o 1. najmniejfunkcjerysujÄ…ce pojedynczy punkt,
liniÍ, prostokÄ…t i okrÄ…g lub elipsÍ.
Read busy flag PodstawowÄ… funkcjÄ… graficznÄ… biblioteki
Rozkaz ìRead busy flagî umoÅ‚liwia obsÅ‚ugi wskaünika LMG640X jest funkcja
sprawdzeniestanuzajÍtoÅ›cikontrolera. Roz- lcgputpixel() umoÅ‚liwiajÄ…ca wÅ‚Ä…czenie lub
kaz wykonywany jest przez bezpoÅ›rednie zgaszenie dowolnego punktu na wskaüniku.
odczytanie bajtu z rejestru rozkazÛw IR. Bit Punktem wyjÅ›cia umoÅ‚liwiajÄ…cymanalizÍ
D7=1 oznacza, łe kontroler jest w trakcie działania wszystkichfunkcjigraficznychjest
Rys. 4.
wykonywania poprzedniego rozkazu i nie sposÛb w jaki kontroler HD61830B odwzo-
moÅ‚e otrzymaĘ ani nastÍpnego rozkazu ani rowuje wewnÍtrzny RAM na ekran. Lewy
danej bÍdÄ…cej czÍÅ›ciÄ… rozkazu. gÛrny rÛg ekranu odpowiada najstarszemu dokonywane jest porÛwnanie z najbliÅ‚szy-
bitowi pierwszejkomÛrki pamiÍci RAM. Ko- mi punktami siatki. W zaleÅ‚noÅ›ci od odleg-
Konfiguracja wskaünika lejne bity odwzorowujÄ… kolejne punkty na Å‚oÅ›ci od siatki punkt rysowany jest bliÅ‚ej
LMG640X ekranie. Na kaÅ‚dy wiersz wskaünika w try- gÛrnego (A) lub dolnego (B) wiersza tak jak
Jak widaĘ z powyÅ‚szego opisu konfigura- bie graficznym przypada 30 kolejnych baj- pokazane jest to na rys. 3. RÛwnanie linii
cja wskaünika sprowadza siÍ do obliczenia tÛw. LogicznÄ… organizacjÍ ekranu przyjmu- y=a*x+b moÅ‚na przeksztaÅ‚ciĘ do postaci nu-
kilku parametrÛw a nastÍpnie wpisania ich jemy podobniejak naekranie komputera PC merycznej: y=(dy/dx)*x+b, gdzie dy/dx
do rejestrÛw wewnÍtrznych kontrolera. Do- jako czwartÄ… ĘwiartkÍ ukÅ‚adu wspÛÅ‚rzÍd- oznacza tangens nachylenia linii (dy=y2-y1
konajmy wszystkich obliczeÒ zarÛwno dla nych. OÅ› X skierowana bÍdzie w prawo zaÅ› i dx=x2-x1). RÛÅ‚nicÍ odlegÅ‚oÅ›ci pomiÍdzy
trybutekstowegojaki graficznego. Aby usta- oÅ› Y od punktu HOME w dÛÅ‚. Przy tak prawdziwÄ… wartoÅ›ciÄ… funkcji w punkcie
wiĘ wÅ‚Ä…czony wskaünik w trybietekstowym, przyjÍtym ukÅ‚adzie odniesienia punkt x ((dy/dx)*x+b) a punktami A (y+1) i B (y)
z wewnÍtrznym generatorem znakÛw, o wspÛÅ‚rzÍdnej (x, y) odpowiadaĘ bÍdzie moÅ‚na wyraziĘ jako: d(x)=a-b=2*(dy/dx)*x
z mrugającym i włączonym kursorem nale- bajtowi o adresie: loc=(240*y+x)/8 i bitowi - 2*y -1.
Å‚y ustawiĘ sÅ‚owo kontrolne na 0x3C. Usta- w bajcieloc o numerze pixel=(240*y+x)%8. IstotÄ… algorytmu Bresenhamía nie jest ob-
wienietrybugraficznegoz wyÅ‚Ä…czonymkur- MajÄ…c wartoÅ›ci loc i pixel, rozkazami ìSet liczanie bezwzglÍdnej wartoÅ›ci odlegÅ‚oÅ›ci
sorem uzyskamy programujÄ…c rejestr mode cursor addressî ustalamy adres bajtu a roz- (d(x)) od siatki w punkcie x ale rÛÅ‚nicy
na 0x32. kazami ìSet/Clear bitî wÅ‚Ä…czamy lub gasi- w stosunku do odlegÅ‚oÅ›ci obliczonej w po-
ZaÅ‚ÛÅ‚my, Å‚e w trybie tekstowym stoso- my Å‚Ä…dany punkt na ekranie. przednim punkcie(d(i)-d(i-1)).JeÅ›li wzglÍd-
waĘ bÍdziemy matrycÍ 6x8 (znak 5x7 oraz MajÄ…c moÅ‚liwośĘ kontroli dowolnego na rÛÅ‚nica jest wiÍksza od 0 punkt umiesz-
jednopunktowy margines), wtedy Vp=8, punktu na ekranie mołemy juł kreśliĘ linie czamy w A w przeciwnymrazie w B. W po-
Hp=6. JeÅ›li przyjmiemy dodatkowo, Å‚e kur- i okrÍgi. Rysowanie linii pionowych i po- dobny sposÛb dziaÅ‚a algorytm rysowania
sor umieÅ›cimy w ostatniejlinii matrycyzna- ziomych jest trywialne. Wystarczy w pÍtli elipsy (lub okrÍgu jeÅ›li przyjmiemy rÛwne
kÛwto Cp=8.JeÅ›li w trybiegraficznymzmie- zmieniaĘ jednÄ… z wspÛÅ‚rzÍdnych i rysowaĘ pÛÅ‚osie). Co wiÍcej ze wzglÍdu na symetriÍ
rzamy odwzorowywaĘ kaÅ‚dy bit bajtu z pa- kolejne punkty. Problem pojawiasiÍ w przy- elipsy wystarczy obliczyĘ jedynie wspÛÅ‚-
miÍci RAM musimy przyjąĘ Hp=8. padkugdyzamierzamy narysowaĘliniÍ pod rzÍdne dla pierwszej Ęwiartki, a nastÍpnie
PrzyjmujÄ…c szerokośĘ znaku jako Vp=6 to dowolnym kÄ…tem. OczywiÅ›cie moÅ‚na tÍ li- symetrycznie w pozostaÅ‚ych Ęwiartkach
w linii moÅ‚emy wyÅ›wietliĘ Hn=240/Hp=40 niÍ rysowaĘ wprost korzystajÄ…c z ogÛlnego umieÅ›ciĘ punkty na ekranie. Mimo iÅ‚ al-
znakÛw. W trybie graficznym na jednÄ… liniÍ wzoru funkcji liniowej: y=a*x+b, gdzie gorytmy rysowania linii i elipsy wyglÄ…dajÄ…
bÍdzie przypadaĘ Hn=240/Hp=30 bajtÛw. a i b sÄ… staÅ‚ymi a x zmiennÄ… i y oczekiwanÄ… naskomplikowaneich praktycznarealizacja
WartośĘ Nx dla wskaünika LMG640X z da- wartoÅ›ciÄ… funkcji. Niestety powyÅ‚szy spo- w funkcjach lcgline() i lcgellipse() jest sto-
nych katalogowych producenta przyjmuje- sÛb jest maÅ‚o efektywny i w rezultacie, ze sunkowo prosta.
my jako Nx=128. Jako lokacjÍ Home najwy- wzglÍdu na zaokrÄ…glenia, da nam poszar-
godniej bÍdzie przyjąĘ poczÄ…tek pamiÍci panÄ…, a co najwaÅ‚niejsze nieciÄ…gÅ‚Ä… liniÍ. PrzykÅ‚ad programu obsÅ‚ugi
RAM to jest adres 0. W tab. 2 zebrane sÄ… Znacznie efektywniejszym i elegantszym wskaünika
przykÅ‚adowe parametry konfiguracyjne za- rozwiÄ…zaniem jest uÅ‚ycie algorytmu nume- ObsÅ‚uga wskaünika LMG640X sprowadza
rÛwno dla trybu tekstowego jak i graficzne- rycznego. siÍ dojegoinicjacji dotrybutekstowegolub
go. PodstawÄ… wszelkich metod numerycznych graficznego. Po inicjacji wskaünik gotowy
jestzasada obliczania kolejnej wartościfun- jest do pracy. Przykład programu przedsta-
kcji w oparciu o wartośĘ poprzednią i usta- wiony w list. 2 (EP10/99) rysuje na ekranie
lony mały krok: dwa prostokąty, dwie linie ukośne po czym
1. ustalamy wartoÅ›ci poczÄ…tkowe (krok, wrysowuje we wskaünik elipsÍ i okrÄ…g.
zmienna, wartośĘ), Janusz J. Młodzianowski
2. obliczamy kolejną wartośĘ,
3. zwiÍkszamy zmiennÄ… o wartośĘ kroku, Karta katalogowa (PDF) sterownika
4. przechodzimy do punktu 2. HD61830 jest dostÍpna pod adresem http:/
W przypadku kreślenia figur na ekranie /www.ep.com.pl/ftp/lcdgraf.pdf.
krok bÍdzie miaÅ‚ wartośĘ 1 (1 punkt)
a wspÛÅ‚rzÍdne bÍdÄ… siÍ zmieniaÅ‚y w zakre- Tabela 2. PrzykÅ‚adowe parametry
sie <0, x, 240) i <0, y, 128). Zauwałmy, łe konfiguracyjne wskaznika LMG640X.
ekran mołemy potraktowaĘ jako prostokąt-
rozkaz tryb tryb
nÄ… siatkÍ z punktami na ekranie odpowia-
tekstowy graficzny
dajÄ…cymi przeciÍciom linii siatki. Na tak
Mode control 0x3C 0x32
rozumiany ekran mołemy nałołyĘ hipote-
Set character pitch 0x75 0x77
tycznÄ… liniÍ (y=a*x+b) do wykreÅ›lenia.
Set number of chars 0x27 0x1D
Oczywistym jest, Å‚e na ekranie mogÄ… po-
jawiĘ siÍjedynie punkty wynikajÄ…cez prze- Set number of divs 0x7F 0x7F
ciÍciasiÍliniisiatkia nie wynikajÄ…cez rÛw-
Set cursor pos 0x07 -
nania linii. Prezentowany algorytm Bresen-
Set disp addr low 0x00 0x00
hamía dziaÅ‚a w ten sposÛb, Å‚e obliczajÄ…c
Set disp addr high 0x00 0x00
wartośĘfunkcji(y) dla kolejnego punktu(x)
Elektronika Praktyczna 11/99
100


Wyszukiwarka