80_82.pdf

(172 KB) Pobierz
Sterowanie graficznych wyświetlaczy z telefonów komórkowych firmy Nokia, część 3
K U  R S
Sterowanie graficznych wyświetlaczy
z telefonów komórkowych firmy Nokia, część 3
W†ostatniej czÍúci cyklu przedstawiamy procedury
umoøliwiaj¹ce wyúwietlanie na wyúwietlaczu graficznym
znakÛw alfanumerycznych, bargrafÛw, prostych grafik oraz
linii. Z†myúl¹ o†najbardziej niecierpliwych Czytelnikach
przedstawiamy takøe sposÛb sterowania wyúwietlacza za
pomoc¹ komputera PC z†zainstalowanym odpowiednim
oprogramowaniem.
wskaø¹ na kolejn¹ pozycjÍ znaku lub -
jeúli dotrzemy do koÒca linii - automa-
tycznie przenios¹ nas do nastÍpnej linii.
Pozostaje jeszcze jedna przydatna funkcja
gotoXY , umoøliwiaj¹ca rozpoczÍcie wy-
úwietlania danych w†okreúlonym miejscu
wyúwietlacza. Jej realizacja jest rÛwnieø
bardzo prosta, bo wystarczy wymagan¹
pozycjÍ X†znaku pomnoøyÊ przez 6, i†ko-
mend¹ Set X†address wys³aÊ do licznika
kolumn, a†wymagan¹ pozycjÍ Y†wpisaÊ
bezpoúrednio do licznika wierszy komen-
Set Y†address . Na list. 2 przedsta-
wiono przyk³ad owych procedur. Jest to
oczywiúcie jeden z†wielu moøliwych spo-
sobÛw wypisywania tekstÛw na wyúwiet-
laczu - w†miarÍ ubogi w†moøliwoúci, lecz
jednoczeúnie jeden z†najprostszych i†wy-
magaj¹cy niewielu zasobÛw procesora,
a†w†szczegÛlnoúci zapotrzebowania na pa-
miÍÊ RAM. ZawartoúÊ przyk³adowego ge-
neratora znakÛw znajduje siÍ na CD-EP7/
2003B - plik ASCII.DEF. Jest on zapisa-
ny w†formacie pseudodefinicji asemblera
uøywanego przez kompilator AVR-GCC.
Pisanie na ekranie
Jeúli mamy juø za sob¹ procedurÍ ini-
cjalizacji wyúwietlacza, moøemy przyst¹piÊ
do wyúwietlania informacji. Zaczniemy od
wyúwietlania tekstÛw. Jak juø wczeúniej
sygnalizowa³em, do tego celu bÍdzie po-
trzebny tzw. generator znakÛw. W†przy-
padku mikrokontrolerÛw bÍdzie to po
prostu obszar pamiÍci ROM (Flash) mik-
rokontrolera z†zapisanymi wzorcami po-
szczegÛlnych znakÛw ASCII. Stosuj¹c zna-
ki o†wielkoúci 5x7 pikseli, zapisanie jed-
nego znaku bÍdzie wymaga³o 5†bajtÛw pa-
miÍci. Aby poszczegÛlne znaki by³y od
siebie oddzielone, naleøy dodaÊ jeszcze je-
den - 6†bajt. Zak³adaj¹c moøliwoúÊ wy-
úwietlania znakÛw ASCII o†kodach od
0†do 127, potrzebujemy 128*6 = 768 baj-
tÛw pamiÍci Flash. Znaki o†kodach poni-
øej 32 (32 to spacja) mog¹ byÊ wykorzys-
tane do wyúwietlania dodatkowych sym-
boli lub semigrafiki. W†tym miejscu wy-
jaúniÍ, dlaczego warto stosowaÊ generator
zawieraj¹cy 6†bajtÛw na znak, zamiast
5†bajtÛw i†automatycznego dodawania
przerwy po kaødym znaku. OtÛø moøemy
tworzyÊ znaki semigraficzne wiÍksze niø
wielkoúÊ jednego znaku - poprzez sk³ada-
nie ich z†kilku znakÛw. Jeúli zastosujemy
metodÍ automatycznego dodawania prze-
rwy, to wtedy taka semigrafika bÍdzie po-
przedzielana przerwami. Jeúli jednak nie
zamierzamy wykorzystywaÊ semigrafiki, to
zmieniaj¹c generator znakÛw moøna w†ten
sposÛb oszczÍdziÊ 128 bajtÛw pamiÍci.
Jeúli wyúwietlacz zosta³ zainicjowany
w†trybie adresowania poziomego, wy-
úwietlenie jednego znaku na ekranie po-
lega na obliczeniu adresu, pod ktÛrym
znajduje siÍ jego wzorzec w†generatorze
znakÛw, a†nastÍpnie na pobraniu 6†baj-
tÛw z†obszaru generatora i†wys³aniu ich
na wyúwietlacz poprzez SPI. To wszys-
tko. Proste, prawda?
No dobrze, ale to tylko jeden znak -
powiecie. Nie szkodzi, po wys³aniu tego
znaku wyúwietlacz jest gotowy do przy-
jÍcia kolejnych 6†bajtÛw tworz¹cych na-
stÍpny znak tekstu. Jego pozycjÍ bÍd¹
wyznacza³y liczniki wierszy i†kolumn wy-
úwietlacza, ktÛre zgodnie z† rys. 3 , przy
adresowaniu poziomym automatycznie
Wyúwietlanie bitmap
Kolejn¹ moøliwoúci¹, jak¹ daje nam
graficzny wyúwietlacz, jest wyúwietlanie
obrazkÛw w†postaci bitmap lub animacji
sk³adaj¹cych siÍ z†sekwencji nastÍpuj¹cych
po sobie obrazkÛw. Wyúwietlanie pe³no-
ekranowych lub zajmuj¹cych ca³¹ wyso-
koúÊ ekranu najlepiej jest przeprowadziÊ
w†trybie adresowania pionowego. Jeúli
chcemy, øeby obrazek zajmowa³ fragment
ekranu, lecz mia³ pe³n¹ szerokoúÊ, to le-
piej jest zastosowaÊ adresowanie poziome.
Samo wyúwietlenie obrazka jest banalne,
bo po ustawieniu wymaganej pozycji po-
przez zapis licznikÛw kolumn i†wierszy
wystarczy wys³aÊ przygotowane wczeúniej
dane bitmapy poprzez SPI prosto do pa-
miÍci obrazu kontrolera. Ze wzglÍdu na
objÍtoúÊ kodu preferowane jest tutaj
wczeúniejsze przekonwertowanie standardo-
wej bitmapy, tak aby uzyskaÊ plik, ktÛry
wysy³amy do LCD bez jakichkolwiek mo-
dyfikacji. SposÛb konwersji zaleøy od wy-
branego trybu adresowania.
Przy wyborze adresowania pionowego
moøna przekonwertowaÊ obrazek, robi¹c
jego odbicie lustrzane i†obrÛt o†90 stopni
w†lewo. Tak zapisanej bitmapy niestety
nadal nie moøna wys³aÊ bezpoúrednio, po-
niewaø posiada ona nag³Ûwek charakterys-
tyczny dla plikÛw BMP oraz 86*8 bajtow
danych zamiast spodziewanych 84*6.
Wiec z†kaødych 8†bajtÛw opisuj¹cych jed-
n¹ kolumnÍ, pocz¹wszy od offsetu 0x3e
(pocz¹tek w³aúciwych danych), wysy³amy
tylko 6†bajtÛw, pomijaj¹c nastÍpne 2.
Przy wyborze adresowania poziomego
przekszta³cenie bitmapy w†prawid³owy
ci¹g danych jest nieco bardziej skompli-
kowane. Nie bÍdÍ dok³adnie opisywa³ al-
gorytmu, lecz pos³uøÍ siÍ gotowym pro-
gramem, ktÛry napisa³em swego czasu
w†Turbo Pascalu na w³asne potrzeby,
a†ktÛry wraz z†ürÛd³ami znajduje siÍ na
List. 2. Przykład procedury umożliwiającej wyświetlanie znaków alfanumerycznych
zdefiniowanych w pliku ASCII.DEF na graficznym LCD
lcd_data: ; wyświetlenie znaku o kodzie w R24
push r30 ; zachowaj rejestr Z - potrzebne aby
push r31 ; łatwiej wyświetlać stringi
sbi DC_PORT,DC_PIN ; ustawienie trybu DATA
ldi r25,6 ; 6 bajtów/znak
mul r24,r25 ; oblicz offset w generatorze znaków
ldi r30,lo8(ASCIITAB) ; adres generatora znaków
ldi r31,hi8(ASCIITAB)
add r30, r0
; dodaj offset
adc r31, r1
LCD_CHAR_1: lpm r24,Z+ ; załaduj bajt z generatora
rcall lcd_wr ; wyślij przez SPI (procedura z listingu 1)
dec r25 ; zmniejsz licznik bajtów
brne LCD_CHAR_1 ; kolejny bajt
pop r31
pop r30
ret
; koniec
lcd_gotoXY: ; R22 = pozycja X, R24 = pozycja Y
cbi DC_PORT,DC_PIN ; ustawienie trybu COMMAND
ori r24,0x40
; dodaj kod komendy “Set Y address”
rcall lcd_wr
; wyślij do LCD
ldi r24,6
mul r24,r22
; pomnóż pozycję X przez 6
mov r24,r0
ori r24,0x80
; dodaj kod komendy “Set X address”
rcall lcd_wr
sbi DC_PORT,DC_PIN ; przywrócenie trybu DATA
ret
; koniec
ASCIITAB:
#include „ascii.def”
; dołączenie generatora znaków z zewnętrznego pliku.
80
Elektronika Praktyczna 7/2003
32590646.001.png
K U  R S
List. 3. Procedura wysyłająca plik graficzny na LCD
lcd_image:
; wyświetlenie obrazka na lcd
pamiÍci wideo wyúwietlacza, operowanie
na jego zawartoúci i†pÛüniejsza aktualiza-
cja zawartoúci pamiÍci wideo wyúwietla-
cza. Kopia pamiÍci wideo zajmuje doúÊ
duøo miejsca - 504 bajty pamiÍci RAM
mikrokontrolera - czyli prawie ca³¹ do-
stÍpn¹ wewnÍtrzn¹ pamiÍÊ mikrokontro-
lera AT90S8515 lub po³owÍ pamiÍci
z†ATmega8 czy ATmega161. Oczywiúcie
pod³¹czaj¹c do naszego mikrokontrlera ze-
wnÍtrzn¹ pamiÍÊ RAM lub stosuj¹c je-
den z†wyøszych modeli ATmega posiada-
j¹cy 2†lub 4†kB wewnÍtrznego RAM-u,
pozbywamy siÍ tego k³opotu.
Pozostaje drugi problem, czyli iloúÊ
i†czasoch³onnoúÊ wymaganych do tego ce-
lu obliczeÒ. Do datkowo synchronizacja
zawartoúci kopii pamiÍci wideo z†zawar-
toúci¹ pamiÍci kontrolera wyúwietlacza
jest rÛwnieø czasoch³onna przy za³oøeniu
kaødorazowej aktualizacji zawartoúci ca³e-
go wyúwietlacza lub skomplikowana przy
prÛbie wybiÛrczej aktualizacji fragmentÛw
pamiÍci wideo. Najlepszym wyjúciem
z†omawianej sytuacji bÍdzie napisanie od-
powiednich procedur w†jÍzyku wyøszego
poziomu, czyli np. w†C.
cbi DC_PORT,DC_PIN
ldi r24,0x40
; zeruj licznik kolumn (pozycja x=0)
rcall lcd_wr
ldi r24,0x80
; zeruj licznik wierszy (pozycja y=0)
rcall lcd_wr
sbi DC_PORT,DC_PIN
ldi r21, 252 ; tu wstawiamy ilość bajtów / 2 do wysłania
; w zależności od wysokości obrazka
; 8->42, 16->84, 24->126, 32->168, 40->210
; 48->252
ldi r30,lo8(IMAGE) ; adres danych obrazka w pamięci FLASH
ldi r31,hi8(IMAGE)
SENDIMG:
LPM r24,Z
; pobierz bajt z flash
rcall lcd_wr
; wyślij bajt do LCD
adiw r30,1
; zwiększ adres
LPM r24,Z
; pobierz bajt z flash
rcall lcd_wr
; wyślij bajt do LCD
adiw r30,1
; zwiększ adres
dec r21
; zmniejsz licznik
brne SENDIMG
ret
IMAGE:
#include „IMAGE.DAT”
; zawartość obrazka
CD-EP7/2003B. Aby przekonwertowaÊ bit-
mapÍ o†rozmiarach 84 piksele w†pozio-
mie i 8, 16, 24, 32, 40 lub 48 pikseli
w†pionie wystarczy uruchomiÊ program
bmpconv.exe , podaj¹c jako parametr na-
zwÍ pliku do konwersji. PamiÍtajmy, øe
jest to program DOS-owy, wiÍc d³ugoúÊ
nazwy pliku nie moøe przekraczaÊ 8
znakÛw + 3 znaki rozszerzenia. W†wyni-
ku dzia³ania programu otrzymamy plik
binarny out.bin , ktÛry moøna za³adowaÊ
prosto do pamiÍci wyúwietlacza. Przyk³a-
dow¹ procedurÍ wysy³aj¹c¹ tak przygoto-
wany plik pokazano na list. 3 . Na po-
cz¹tku zerowane s¹ liczniki kolumn
i†wierszy poprzez wys³anie do kontrolera
komend 0x40 i†0x80 (przy niskim pozio-
mie na D/C), co oznacza, øe bÍdziemy
wyúwietlaÊ obraz pocz¹wszy od lewego
gÛrnego rogu ekranu. NastÍpnie do licz-
nika pÍtli wpisujemy potrzebn¹ liczbÍ
bajtÛw do wys³ania podzielon¹ przez 2,
a†to ze wzglÍdu na to, aby licznik mÛg³
siÍ zmieúciÊ w†pojedynczym 8-bitowym
rejestrze. Dalej do rejestru Z (R31:R30)
wpisujemy adres komÛrki pamiÍci Flash,
od ktÛrego rozpoczynaj¹ siÍ dane obraz-
ka. No i†pozosta³a juø tylko pÍtla pobie-
raj¹ca kolejne bajty z†pamiÍci Flash i†wy-
sy³aj¹ca je do LCD poprzez interfejs SPI.
W†kaødym obiegu pÍtli wysy³ane s¹ 2
bajty oraz zwiÍkszany jest wskaünik da-
nych - rejestr Z. Jeúli chcielibyúmy wy-
sy³aÊ obrazek z†pamiÍci RAM, zamiast
z†pamiÍci Flash, wystarczy instrukcjÍ
LPM r24, Z
zamieniÊ na
LD r24, Z+;
oraz pomin¹Ê instrukcjÍ
adiw r30,1
poniewaø moøna tu wykorzystaÊ automa-
tyczne zwiÍkszanie wskaünika w†instrukcji
LD r24,Z+.
poziomego. Ta procedura jest rÛwnie
prosta jak poprzednie. Najpierw musimy
okreúliÊ miejsce, gdzie bÍdzie siÍ zaczy-
na³ nasz pasek postÍpu, czyli standar-
dowo zapisaÊ dane do licznikÛw kolumn
i†wierszy. NastÍpnie wywo³ujemy poka-
zan¹ na list. 4 procedurÍ lcd_bar , poda-
j¹c w†rejestrze R24 stopieÒ zape³nienia
(d³ugoúÊ zape³nionego paska w†pikse-
lach), a†w†rejestrze R22 ogÛln¹ d³ugoúÊ
ca³ego bargrafu. Uaktualnienie pozycji
paska polega na kolejnym wywo³aniu tej
procedury ze zmienion¹ zawartoúci¹ re-
jestru R24 wraz z†wczeúniejszym usta-
wieniem pozycji paska na tak¹ jak za
pierwszym razem.
Uniwersalny sterownik LCD
z†Nokii
Jeden z†cz³onkÛw forum dyskusyjne-
go poúwiÍconemu odtwarzaczom MP3
yampp napisa³ swoj¹ wersjÍ uniwersal-
nego sterownika wyúwietlaczy LCD
z†Nokii, posiadaj¹c¹ moøliwoúÊ zapala-
nia i†gaszenia pojedynczych pikseli, ry-
sowania linii oraz wyúwietlania znakÛw
i†ca³ych stringÛw . Program ten przezna-
czony jest do skompilowania bezp³at-
Zapalanie pojedynczych pikseli
i†rysowanie linii
Niestety w†tym miejscu
koÒczy siÍ wszystko co krÛt-
kie, ³atwe i†przyjemne, a†za-
czynaj¹ siÍ prawdziwe ìscho-
dyî. I†to z†dwÛch powodÛw.
Po pierwsze, aby zapaliÊ po-
jedynczy piksel, musimy
zmieniÊ jeden bit z†bajtu od-
wzorowuj¹cego 8 pionowych
pikseli, a†nie moøemy odczy-
taÊ z†pamiÍci wideo wyúwiet-
lacza poprzedniej jego zawar-
toúci. Jedynym wyjúciem z†sytuacji jest
przechowywanie w†pamiÍci RAM steru-
j¹cego mikrokontrolera kopii zawartoúci
List. 4. Procedura odpowiadająca za wyświetlenie bargrafu
lcd_bar:
; wyświetlenie paska postępu
mov r25,r24
ldi r24,0b01111111
; wygląd początku paska
sbi DC_PORT,DC_PIN
; ustaw tryb wysyłania danych
rcall lcd_wr
; narysuj początek bargrafu
LCD_BAR_2: ldi r24,0b01011101 ; wygląd zapełnionego fragmentu paska
tst r25
; sprawdź czy rysujemy zapełniony
Bargrafy, czyli paski postÍpu
Kolejnym elementem, ktÛry moøemy
wyúwietliÊ na naszym LCD, jest pasek
postÍpu pokazuj¹cy procent wykonania
jakiejú operacji. Pasek ten bÍdzie
umieszczony na wyúwietlaczu poziomo,
podobnie jak jedna linijka tekstu, wiÍc
bÍdziemy pracowaÊ w†trybie adresowania
brne LCD_BAR_1
; skok jeśli tak
ldi r24,0b01000001
; załaduj wygląd pustego paska
inc r25
; korekta r25
LCD_BAR_1: dec r25
; zmniejsz licznik zapełnionych
rcall lcd_wr
; wyślij R24 do LCD
dec r22
; zmniejsz licznik długości paska
brne LCD_BAR_2
; pętla
ldi r24,0b01111111
; wygląd końca paska
rjmp lcd_wr
; wyślij do LCD i wyjdź z procedury
Elektronika Praktyczna 7/2003
81
32590646.002.png
K U  R S
nym kompilatorem AVR-GCC i†przezna-
czony dla mikrokontrolera ATmega8.
Oczywiúcie moøe zostaÊ zaadaptowany
do umieszczenia w†innym typie mikro-
kontrolera AVR, byle by posiada³ odpo-
wiedni¹ iloúÊ pamiÍci RAM. Kod ürÛd-
³owy tego sterownika publikujemy na
CD-EP7/2003B.
Postaram siÍ pokrÛtce przedstawiÊ je-
go moøliwoúci i†sposÛb wywo³ywania za-
wartych w†nim funkcji. Sterownik sk³a-
da siÍ z†pliku nag³Ûwkowego No-
kiaLCD.h , zawieraj¹cego deklaracje kilku
wymaganych sta³ych, definicjÍ sposobu
pod³¹czenia wyúwietlacza do mikrokont-
rolera - czyli deklaracjÍ wykorzystanych
pinÛw mikrokontrolera, oraz prototypy
dostÍpnych funkcji. W³aúciwy kod pro-
gramu znajduje siÍ w†pliku NokiaLCD.c
i†zawiera wszystkie procedury niezbÍdne
do obs³ugi wyúwietlacza wraz z†inicjali-
zacj¹ i†obs³ug¹ interfejsu SPI oraz tabli-
cÍ generatora znakÛw.
Oto opis dostÍpnych funkcji sterow-
nika:
- LcdInit() - s³uøy ona do zainicjo-
wania interfejsu SPI mikrokontrolera
oraz pod³¹czonego wyúwietlacza. Po
zakoÒczeniu dzia³ania tej funkcji wy-
úwietlacz ma odpowiednio ustawione
rejestry wewnÍtrzne, znajduje siÍ
w†trybie adresowania poziomego - po-
niewaø wszystkie funkcje korzystaj¹
w³aúnie z†tego trybu. Inicjalizacja ze-
ruje zawartoúÊ cienia pamiÍci wideo
jak rÛwnieø i†sam wideo-RAM wy-
úwietlacza. Powinna byÊ uruchomiona
jako jedna z†pierwszych funkcji ca³ego
programu, poniewaø ustawia funkcje
pinÛw mikrokontrolera oraz podaje
prawid³owy sygna³ RESET do wy-
úwietlacza.
- LcdClear() - wyzerowanie zawartoúci
cienia pamiÍci wideo. Aby wyczyúciÊ
rÛwnieø zawartoúÊ wyúwietlacza, nale-
øy po LcdClear() wywo³aÊ funkcjÍ
LcdUpdate() .
- LcdUpdate() - powoduje aktualizacjÍ
zawartoúci pamiÍci wideo wyúwietlacza
zgodnie z†zawartoúci¹ cienia w†mikro-
kontrolerze. Aktualizowany jest tylko
obszar, w†ktÛrym by³y dokonane jakie-
kolwiek zmiany od czasu poprzedniej
aktualizacji.
- LcdContrast(byte contrast) - usta-
wienie kontrastu wyúwietlacza. War-
toúÊ bajtu contrast musi zawieraÊ siÍ
pomiÍdzy 0x00 a†0x7f, lecz jak napi-
sa³em wczeúniej, uøyteczny zakres wy-
nosi od 0x20 do 0x58.
- LcdGotoXY(byte x, byte y) - usta-
wienie pozycji wyúwietlania na LCD.
List. 5. Procedura obsługi programowego interfejsu SPI napisana w asemblerze 8051
; P1.4 -> SCE
; P1.5 -> MISO - nieużywany dla LCD
; P1.6 -> MOSI czyli SDIN wyświetlacza
; P1.7 -> SCLK
LCD_WR: CLR P1.4
; SCE = L
MOV R2,#08H
; licznik, 8 bitów do wysłania z ACC
SPIL: RLC A
; przesuń bit do carry
MOV P1.6,C
; wystaw carry na pin P1.6 (SDAT)
SETB P1.7
; SCLK = L
NOP
CLR P1.7
; SCKL = L
MOV C,P1.5
; Pobranie bitu z magistrali - zbędne
; w przypadku współpracy z LCD
DJNZ R2,SPIL
; zmniejsz licznik i wróć do pętli
SETB P1.4
; SCE = H
RET
Koordynaty bazowane s¹ na czcionce
o†podstawowej wielkoúci, czyli zakres
X†wynosi od 1†do 14, a†zakres Y†od
1†do 6. Funkcja ta nie zmienia zawar-
toúci licznikÛw kolumn i†wierszy, a†je-
dynie ustawia odpowiedni offset aktu-
alnego adresu w†kopii pamiÍci wideo.
- LcdChr(LcdFontSize size, byte ch)
- wyúwietlenie znaku ASCII o†wielkoú-
ci okreúlonej parametrem size w†miej-
scu aktualnej pozycji wyúwietlania.
Mamy do dyspozycji dwie wielkoúci
czcionki. Standardow¹ 5x7 punktÛw,
ktÛr¹ okreúla sta³a FONT_1X lub war-
toúÊ 1, oraz podwÛjnej wielkoúci, po-
grubion¹ czcionkÍ oznaczon¹ sta³¹
FONT_2X lub wartoúci¹ 2. Funkcja ta
automatycznie zwiÍksza aktualn¹ pozy-
cjÍ wyúwietlania. Aby zobaczyÊ zmia-
ny, musimy po niej wywo³aÊ funkcjÍ
LcdUpdate() .
- LcdStr(LcdFontSize size, byte
*dataPtr) - wyúwietlenie stringu
z†pamiÍci RAM mikrokontrolera zaczy-
naj¹cego siÍ od adresu dataPtr. Pozo-
sta³e parametry jak dla funkcji
LcdChr .
- LcdPixel(byte x, byte y, LcdPi-
xelMode mode) - wyúwietlenie poje-
dynczego piksela. Parametry X i†Y
okreúlaj¹ pozycjÍ na wyúwietlaczu,
a† mode oznacza tryb pracy. WartoúÊ X
musi siÍ mieúciÊ w†przedziale od 0†do
83, a†Y w†przedziale od 0†do 47.
W†zaleønoúci od trybu, piksel na da-
nej pozycji moøe zostaÊ zapalony, zga-
szony lub zmieniony - czyli jeúli by³
wczeúniej zapalony, to zostanie zga-
szony i†na odwrÛt. Sta³e opisuj¹ce
tryb to odpowiednio PIXEL_ON , PI-
XEL_OFF i† PIXEL_XOR . Aby zobaczyÊ
zmiany, musimy po niej wywo³aÊ fun-
kcjÍ LcdUpdate() .
- LcdLine(byte x1, byte y1, byte
x2, byte y2, LcdPixelMode mode) -
narysowanie linii zaczynaj¹cej siÍ
w†punkcie o†wspÛ³rzÍdnych x1 , y1
i†koÒcz¹cej siÍ w†punkcie o†wspÛ³rzÍd-
nych x2 , y2 . Dopuszczalne wartoúci po-
zycji, jak rÛwnieø tryb mode - tak jak
dla funkcji LcdPixel . Aby zobaczyÊ
zmiany musimy po niej wywo³aÊ fun-
kcjÍ LcdUpdate() .
Pozosta³e funkcje widoczne wewn¹trz
pliku NokiaLcd.c s¹ wewnÍtrznymi fun-
kcjami sterownika.
sprawdziÊ jego dzia³anie bez wczeúniej-
szego budowania i†oprogramowywania
ca³ego systemu opartego na mikrokont-
rolerze. Jest na to prosta, a†przy tym
skuteczna metoda. Pod³¹cz swÛj wy-
úwietlacz bezpoúrednio do z³¹cza drukar-
kowego w†swoim PC. No prawie bezpo-
úrednio, poniewaø sygna³y logiczne na
z³¹czu LPT komputera s¹ zgodne ze
standardem TTL 5V, a†wyúwietlacz po-
trzebuje napiÍÊ o†wartoúci 3,3 V. Ko-
nieczny bÍdzie wiÍc konwerter pozio-
mÛw zbudowany na przyk³ad w†oparciu
o†uk³ad 74LVC245 (jego schemat publi-
kujemy na CD-EP7/2003B, w†programie
Parallel to SPI ). Do tego odpowiednie
oprogramowanie, zasilacz 3,3 V†i†juø mo-
øemy podziwiaÊ dzia³aj¹cy wyúwietlacz.
Na CD-EP7/2003B publikujemy pro-
gram napisany przez kolejnego uøytkow-
nika forum dotycz¹cego yamppa (to na-
prawdÍ jest kopalnia wiedzy), umoøli-
wiaj¹cy sterowanie takim wyúwietlaczem
z†poziomu aplikacji MS Windows ( rys.
10 ). Program ten nie posiada zbyt roz-
budowanych funkcji, lecz pozwala na
zainicjowanie wyúwietlacza, regulowanie
kontrastu, ustawienie odpowiedniego try-
bu, wyúwietlanie tekstÛw oraz konwersjÍ
i†wyúwietlanie obrazkÛw. Dodatkowo po-
zwala on na tworzenie, edycjÍ i†zapisy-
wanie wzorÛw czcionek generatora zna-
kÛw w†postaci definicji db do pÛüniej-
szego wykorzystania we w³asnych pro-
gramach. Kolejn¹ moøliwoúci¹ tego pro-
gramu jest sterowanie pod³¹czonego
w†podobny sposÛb dekodera MP3, jakim
jest uk³ad VS1001, a†wiÍc odtwarzanie
plikÛw MP3. Schemat pod³¹czenia wy-
úwietlacza LCD lub VS1001 uzyskamy
po wybraniu z†menu View opcji Sche-
matics... .
Na zakoÒczenie, øycz¹c wszystkim
Czytelnikom udanych eksperymentÛw
z†opisywanymi wyúwietlaczami, przedsta-
wiam zapowiedzian¹ wczeúniej procedu-
rÍ obs³ugi programowego interfejsu SPI
napisan¹ w†asemblerze mikrokontrolera
z†rodziny 8051 - czyli np. na tzw.
ìma³egoî AT89C2051 ( list. 5 ). Bajt do
wys³ania ³adujemy do akumulatora i†wy-
wo³ujemy funkcjÍ przez ACALL LCD_WR .
Jeúli zastosujemy j¹ do obs³ugi innego
uk³adu komunikuj¹cego siÍ poprzez SPI,
to po powrocie w†akumulatorze otrzyma-
my bajt odczytany z†tego uk³adu. Ponie-
waø kontroler naszego LCD nie ma ta-
kiej moøliwoúci, zawartoúÊ akumulatora
moøemy zignorowaÊ lub nawet usun¹Ê
instrukcjÍ MOV C,P1.5 .
Romuald Bia³y
Rys. 10
Nokia LCD + PC? Czemu nie!
Zapewne wielu CzytelnikÛw zainte-
resowanych wykorzystaniem opisanych
wyúwietlaczy bÍdzie chcia³o szybko
82
Elektronika Praktyczna 7/2003
32590646.003.png 32590646.004.png
Zgłoś jeśli naruszono regulamin