wyswietlacze graficzne bascom cz1


K  C I K B A S C O M O W Y
Obsługa wyświetlaczy
graficznych w Bascom,
część 1
W tym odcinku przedstawimy
dwa przykłady obsługi
wyświetlaczy graficznych
o rozdzielczości 128*64
pikseli, z kontrolerami typu
KSx i T6963C. Obsługa
wyświetlacza z kontrolerem
SED jest identyczna jak
wyświetlacza z kontrolerem
KSx, więc i z tego typu
wyświetlaczami nie powinno
być problemów.
Wyświetlacze graficzne są co- ułatwiają zawarte w nim narzędzia, ra i ich konfiguracji. Dodatkowo
raz tańsze i z tego względu da się którymi są: Graphic Converter  większość wyświetlaczy graficznych
zauważyć ich coraz częstsze wy- umożliwia dokonanie konwersji pli- potrzebuje ujemnego napięcia dla
korzystywanie. Nie są to elementy ku z grafiką na postać akceptowaną układu regulacji kontrastu. Zatem
trudne w obsłudze, w porównaniu przez wyświetlacz oraz Font Editor przedstawiamy także sposób dołą-
z popularnymi wyświetlaczami alfa-  umożliwia przygotowanie własne- czenia wyświetlaczy do mikrokon-
numerycznymi dają większe możli- go lub modyfikację istniejącego pli- trolera, jego konfiguracji oraz wy-
wości. Na wyświetlaczu graficznym ku z fontami (znakami), które moż- tworzenia ujemnego napięcia dla
można wyświetlić nie tylko znaki na wyświetlić na wyświetlaczu gra- obwodów regulacji kontrastu.
alfanumeryczne dowolną, przygoto- ficznym. Przedstawimy dwa przy-
waną czcionką, ale także elementy kłady. Pierwszy, będzie dotyczył Wyświetlacze z kontrolerem
graficzne. Obsługa wyświetlaczy gra- wyświetlacza graficznego ze ste- KSx
ficznych w Bascom tak, jak wyświe- rownikiem KSx w ramach, którego Wyświetlacze z kontrolerem
tlaczy alfanumerycznych jest dosyć zaprezentujemy działanie instrukcji KS0107B lub KS0108B mają 8 bito-
prosta. Bez większych problemów rysujących linie, koła, wyświetlają- wy interfejs komunikacyjny, 8192
można z tego typu wyświetlaczami cych znaki z zaimportowanego pli- bitową pamięć RAM oraz są zasila-
budować dosyć ambitne urządzenia. ku z fontami oraz wyświetlającymi ne napięciem 5 V. Na rys. 1 przed-
Przykładowo, w przypadku mierni- grafikę (również z prostą animacją). stawiono schemat blokowy wyświe-
ka temperatury, można zmierzoną Narysowany zostanie także wykres tlacza JM12864a, który wykorzysta-
temperaturę w określonym czasie funkcji trygonometrycznych sin oraz no w ramach tego przykładu. Może
wyświetlać dodatkowo na wykresie. cos. Drugi przykład będzie prezen- on zawierać kontroler KS0107B lub
W Bascomie jest możliwość obsługi tował aspekty obsługi wyświetlacza KS0108B, ma rozdzielczość 128x64
wyświetlacza z trzema popularnymi z kontrolerem T6963C. W ramach pikseli oraz podświetlenie za po-
sterownikami: KS0107B, KS0108B tego przykładu zostanie przedsta- mocą diod LED. Warto wiedzieć,
lub T6963C oraz SED. wiony program realizu-
Bascom oferuje wiele instrukcji, jący analogowy zegar
które ułatwiają obsługę wyświetla- (ze wskazówkami) z da-
czy graficznych. Dostępne są in- townikiem. Jak można
strukcje, które umożliwiają zapale- się spodziewać i jak się
nie wybranego piksela, narysowanie okaże, realizacja tego
linii, okręgu lub wyświetlenie gra- typu zegara w Bascom,
fiki. Dla wyświetlaczy graficznych może być w miarę pro-
nie posiadających własnego genera- sta. W wyświetlaczach
tora znaków, możliwe jest załącze- graficznych, których ob-
nie w programie pliku z fontami, sługa odbywa się za
którego znaki można na nich wy- pomocą Bascoma, może
świetlać. Dodatkowo, w Bascomie, być problem dołączenia Rys. 1. Schemat blokowy wyświetlacza LCD ze
pracę z wyświetlaczami graficznymi ich do mikrokontrole- sterownikiem KS0107B
Elektronika Praktyczna 8/2005
79
K  C I K B A S C O M O W Y
List. 1.
 Przyklad obslugi wyswietlacza graficznego JM12864A (128*64) z kontrolerem KS0107B lub KS0108B
 W programie pokazano dzialanie instrukcji przeznaczonych dla wyswietlaczy graficznych jak:
 wyswietlenie tekstu, rysowanie linii, okregu, punktu na podstawie ktorego obliczone i narysowane zostaly wykresy SIN oraz COS
 Poprzez wyswietlenie dwoch roznych bitmap pokazana zostala prosta animacja.
 Marcin Wiazania
 marcin.wiazania@ep.com.pl
$lib  glcdKS108.lib  zalaczenie biblioteki obslugujacej wyswietlacz z kontrolerem KS
$lib  FP_Trig.lib  zalaczenie biblioteki funkcji trygonometrycznych
$crystal = 4000000  wartosc czestotliwosci oscylatora taktujacego mikrokontroler
$regfile =  m8def.dat  wskazanie pliku z definicjami rejestrow dla mikrokontrolera ATmega8
Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portb , Ce = 0 , Ce2 = 1 , Cd = 4 , Rd = 3 , Reset = 2 , Ena-
ble = 5  konfiguracja rodzaju oraz wyprowadzen wyswietlacza graficznego
 port danych dolaczony do Portd
 linia CS1 dolaczona do Portb.0
 linia CE2 dolaczona do Portb.1
 linia CD dolaczona do Portb.4
 linia RD dolaczona do Portb.3
 linia RESET brak
 linia ENABLE dolaczona do portb.5
$eeprom  poczatek zapisu danych do pamieci EEPROM
Rys2:  etykieta wskazujaca na rysunek 2
$bgf  rysunek2.bgf  zapis do EEPROM podczas programowania plik rysunek2.bgf
$data  poczatek pamieci programu mikrokontrolera
Declare Sub Rys_fun(byval R As Byte , Byval Poz As Byte)  procedura rysujaca funkcje trygonometryczne - par poz wskazuje na
pozycje na LCD a par R na rodzaj funkcji tryg
Dim I As Byte  zmienna licznikowa
Dim S As Word  zmienna licznikowa
Dim W As Single  zmienna pomocnicza przy obliczaniu wartosci funkcji tryg
Dim Y As Integer  zmienna wskazujaca pozycje Y wyswietlacza
Dim X As Word  zmienna wskazujaca pozycje X wyswietlacza
Cls  czyszczenie LCD
Setfont Font8x8  wybranie rodzaju fontu (czcionki) dla wyswietlacza graficznego
Lcdat 2 , 22 ,  Elektronika  wyswietlenie tekstu
Lcdat 3 , 27 ,  Praktyczna  wyswietlenie tekstu
Lcdat 5 , 40 ,  Bascom , 1  wyswietlenie tekstu
Lcdat 6 , 52 ,  AVR , 1  wyswietlenie tekstu
Line(10 , 5) -(118 , 5) , 1  wyswietlenie linii - rysowanie prostokatu
Line(118 , 5) -(118 , 51) , 1  wyswietlenie linii - rysowanie prostokatu
Line(118 , 51) -(10 , 51) , 1  wyswietlenie linii - rysowanie prostokatu
Line(10 , 51) -(10 , 5) , 1  wyswietlenie linii - rysowanie prostokatu
For I = 14 To 120 Step 10  petla wykonywana az I bedzie wieksze od 120
Circle(i , 58) , 4 , 1  rysowanie kilku okregow
Next I  zwiekszenie o jeden wartosci I
Wait 2  czekaj 2 sekundy
Cls  czysci LCD
Lcdat 1 , 1 ,  sin(x) , 1  wyswietlenie nazwy rysowanej funkcji
Call Rys_fun(1 , 19)  rysowanie funkcji sin(x)
Lcdat 5 , 1 ,  cos(x) , 1  wyswietlenie nazwy rysowanej funkcji
Call Rys_fun(0 , 51)  rysowanie funkcji con(x)
Wait 2  czekaj 2 sekundy
Cls  czyszczenie LCD
Do  poczatek nieskonczonej petli Do-loop
Showpic 0 , 0 , Rys1  wyswietlenie rysunku z pamieci programu umieszczonego pod etykie-
ta Rys1
I = Rnd(256)  w I zapisywana wartosc losowa od 0 do 255
Waitms I  czekaj czas okreslony wartoscia I
Waitms 100  czekaj 100 ms
Showpice 0 , 0 , Rys2  wyswietlenie rysunku z pamieci EEPROM umieszczonego pod etykieta
Rys2
I = Rnd(256)  w I zapisywana wartosc losowa od 0 do 255
Waitms I  czekaj czas okreslony wartoscia I
Waitms 100  czekaj 100 ms
Loop
End  koniec programu
Sub Rys_fun(byval R As Byte , Byval Poz As Byte)  poczatek proceduty rysujacej funkcje sin i cos
For S = 0 To 640 Step 2  petla wykonywana az S osiagnie wartosc 640, S zmienia sie co 2
W = S  przypisanie wartosci S do W
W = Deg2rad(w)  zamiana stopni zapisanych w W na radiany
If R = 1 Then  jesli R = 1 to
W = Sin(w)  obliczenie wartosci funkcji sin
Else  w przeciwnym razie
W = Cos(w)  obliczenie wartosci funkcji cos
End If
W = W * 9  zwiekszenie o 9 wartosci obliczonej funkcji
Y = Int(w)  zwrocenie do Y wartosci calkowitej obliczonej funkcji
Y = Poz - Y  obliczenie pozycji rysowania funkcji
X = S / 5  obliczenie wartosci wspolrzednej X
Line(x , Y) -(x , Y) , 1  rysowanie obliczonego punktu na LCD
Next I  zwiekszenie o jeden wartosci I
End Sub  koniec procedury
$include  font8x8.font  zalaczenie pliku ze znakami dla LCD
 $include  font16x16.font  zalaczenie innego pliku ze znakami dla LCD
Rys1:  etykieta wskazujaca na rysunek 1
$bgf  rysunek1.bgf  zapis do rysunku rysunek2.bgf do pamieci programu programowania
że wyświetlacz tego typu nie ma mie do obsługi tego typu wyświe- świetlacza są liniami danych, nato-
własnego generatora znaków  moż- tlacza wykorzystać można gotowe miast linie E, R/W, RS, /CS1, /CS2
na go zrealizować na drodze pro- instrukcje, więc trzeba nie wie- są liniami kontrolnymi. Wykorzysty-
gramowej. Ekran tego wyświetlacza dzieć, w jaki sposób odbywa się wany wyświetlacz ma podświetle-
jest podzielony na dwie części, jego obsługa. Na rys. 3 przedsta- nie, którego prąd jest ograniczany
z których każda dzielona jest na 8 wiono schemat dołączenia wyświe- przez rezystor R1. Od wartości
tak zwanych stron, co przedstawio- tlacza graficznego JM12864a do mi- tego rezystora zależy jasność pod-
no na rys. 2. Ponieważ w Basco- krokontrolera. Linie D0...D7 wy- świetlenia. By wyświetlacz działał
Elektronika Praktyczna 8/2005
80
K  C I K B A S C O M O W Y
na przykład MA- wyświetlacza z kontrolerem KSx,
X 6 8 0 , k t ó r e g o który nie ma wejścia zerującego,
schemat aplikacyj- a instrukcja konfiguracyjna wymaga
ny przedstawiono podania linii Reset, należy podać
w dalszej części nieużywaną linię mikrokontrolera.
a r t y k u ł u . N a Dalej w programie po dyrektywie
list. 1 przedsta- $eeprom zapisywany jest w pamię-
wiono przykład ci EEPROM mikrokontrolera pierw-
konfiguracji i wy- szy rysunek graficzny, który będzie
korzystania in- wyświetlany. Jest on identyfikowany
strukcji umożli- etykietą Rys2. W programie jest do-
wiających obsługę stępna jedna procedura, która w
Rys. 2. Organizacja pamięci obrazu w sterowniku KS0107B wyświetlacza gra- zależności od parametrów rysuje na
ficznego z kontro- wyświetlaczu wykres funkcji sin
poprawnie, na wejście obwodu re- lerem KSx. Na początku programu lub cos. Utworzonych zostało także
gulacji kontrastu (V ), należy podać załączone zostają biblioteki glcdK- 5 zmiennych, z których jedna jest
ee
ujemne napięcie bliskie  10 V. Ta- S108.lib wymagana do obsługi wy- typu Single, co było wymagane
kie napięcie wytwarzane przez świetlacza z kontrolerem KSx oraz przy obliczaniu funkcji trygonome-
przetwornice zawartą w układzie FP_Trig.lib, która jest biblioteką trycznych. Pierwszą instrukcją od-
U2 jest podawane poprzez poten- funkcji trygonometrycznych, wyko- noszącą się do wyświetlacza jest
cjometr regulacji kontrastu P1. Naj- rzystywanych w programie. Wy- instrukcja Cls, która czyści jego
prostszym, choć nie jedynym spo- świetlacz graficzny można skonfigu- ekran. Ponieważ wyświetlacz zarów-
sobem uzyskania napięcia ujemnego rować instrukcją Config Graphlcd. no z kontrolerem KS, jak i SED
 10 V jest zastosowanie przetworni- Jako pierwszy parametr należy po- nie ma wbudowanego generatora
cy pojemnościowej, której niewielka dać typ wyświetlacza połączony znaków, więc został on w Basco-
wydajność prądowa w tym przy- z jego rozdzielczością. Wykorzysty- mie zrealizowany programowo. In-
padku w zupełności wystarcza. Jest wany wyświetlacz miał rozdziel- formacje o znakach są przechowy-
dostępnych wiele różnych scalo- czość 128*64 pikseli, a ponieważ wane w odrębnych plikach z roz-
nych przetwornic pojemnościowych. jego obsługa jest podobna do ob- szerzeniem .font. W Bascom można
W taką przetwornice wyposażony sługi wyświetlaczy z kontrolerem znalezć dwa takie przykładowe pli-
jest popularny i dosyć tani układ SED, więc należy taki typ wyświe- ki ze znakami o wielkości 8x8
interfejsowy (U2), który wykorzysta- tlacza wybrać. Tak więc pierwszy i 16x16 pikseli. W przykładowym
no w tym przykładzie. Przetworni- parametr skonfigurowano jako programie, w jego końcowej części,
ca zawarta w MAX232 wytwarza 128*64sed. W Bascomie możliwa zaimportowano dyrektywą $include
napięcia ok. ą10 V. Na linii V (k. jest obsługa wyświetlaczy graficz- plik font8x8.font, w którym są zna-
6) jest dostępne napięcie  10 V, ny ch o roz dz i e l cz o ś ci ac h do ki o wielkości 8x8 pikseli. Bascom
które poprzez P1 jest podawane na 240*128 pikseli. Pozostałe parame- ma dodatkowy program Font Editor
linie V wyświetlacza. Oczywiście try instrukcji konfiguracyjnej doty- (rys. 4), którym można tworzyć
ee
do wytworzenia ujemnego napięcia czą linii portów komunikujących fonty z własnymi znakami jak
można wykorzystać inne układy jak się z wyświetlaczem. W przypadku i modyfikować już istniejące. W
Rys. 3. Sposób dołączenia wyświetlacza JM12864A do mikrokontrolera
Elektronika Praktyczna 8/2005
81
K  C I K B A S C O M O W Y
niu 2 sekund, ekran LCD jest
czyszczony oraz wywoływana jest
dwa razy procedura Rys_fun, która
rysuje funkcję sin oraz cos. Pierw-
szy parametr określa, która funkcja
ma być rysowana. Przy wartości 1,
rysowana jest funkcja sin(x), a przy
0 funkcja cos(x). Drugi parametr
określa pozycję (w pionie) rysowa-
nej funkcji na wyświetlaczu. Dodat-
kowo, przez zastosowanie instrukcji Rys. 5. Program Graphic Converter
Lcdat, narysowane funkcje zostały
podpisane. Procedura Rys_fun, rysu- i EEPROM, służy dyrektywa $bgf,
Rys. 4. Widok okna programu Font jąca funkcję sin lub cos, ma prostą której parametrem jest plik z grafi-
Editor budowę. Obliczanie wartości wy- ką w formacie BGF. Po odczekaniu
branej funkcji odbywa się w pętli w programie kolejnych 2 sekund,
celu używania zaimportowanego For, wykonywanej aż S osiągnie ekran LCD jest czyszczony i pro-
pliku ze znakami, należy go usta- wartość 640. W pierwszej kolejno- gram przechodzi do wyświetlania
wić jako domyślny poprzez użycie ści, wartość S (która reprezentuje w nieskończonej pętli zapisanych
instrukcji Setfont, w której parame- stopnie) po przepisaniu do W za- rysunków. Do wyświetlenia rysunku
trem jest nazwa fontu. W tego mieniana jest na radiany za pomo- z pamięci Flash służy instrukcja
typu wyświetlaczach (z kontrolerem cą funkcji Deg2rad. W zależności Showpic. Jej dwa pierwsze parame-
KSx i SED) do wyświetlenia tekstu od parametru R obliczana jest war- try określają współrzędne x, y gór-
służy instrukcja Lcdat. Pierwszymi tość funkcji sin lub cos. Obliczona nego lewego rogu rysunku. Ostat-
dwoma parametrami tej instrukcji wartość funkcji po przemnożeniu nim jej parametrem jest etykieta
są pozycje tekstu, przy czym para- zamieniana jest na wartość całko- pod którą znajduje się wyświetlany
metr pierwszy odnosi się do pozy- witą, a po skalowaniu i obliczeniu rysunek. Do wyświetlenia drugiego
cji poziomej w pikselach, a drugi pozycji jest za pomocą instrukcji rysunku, który został zapisany w
do pionowej, ale nie w pikselach, Line (która w tym przypadku rysu- pamięci EEPROM, służy instrukcja
lecz w liniach. Trzecim parametrem je tylko jeden punkt) wyświetlana Showpice, która ma identyczne pa-
jest tekst (stała) lub zmienna, któ- w postaci punktu. Po wykonaniu rametry jak Showpic. Etykietą in-
rej zawartość ma być wyświetlana. procedury Rys_fun dla sin oraz strukcji Showpice będzie Rys2, czy-
Ostatni, opcjonalny parametr, okre- cos, zostaną narysowane dwie sinu- li rysunek zapisany w pamięci
śla czy tekst będzie odwrócony soidy, z których jedna będzie prze- EEPROM. Rysunki są wyświetlane
tzn. znaki będą przedstawiane sunięta względem drugiej o 90 naprzemiennie w pętli z opóznie-
przez zgaszone piksele a nie przez stopni. Na wyświetlaczu graficznym niem w pewnym sensie losowanym
zapalone. Przy braku tego parame- można także wyświetlić dowolny przez funkcję Rnd. Wartość losowa-
tru lub gdy ma wartość 0, znaki rysunek, który jest zapisany w pa- na może wynosić od 0 do 255 ms.
będą wyświetlane normalnie, a przy mięci EEPROM lub Flash mikro- Poprzez wyświetlanie naprzemien-
1 będą wyświetlane z inwersją. W kontrolera. W przykładzie zapisano nie dwóch nieco różniących się ry-
przykładzie, dwa teksty zostają wy- dwa rysunki różniące się szczegóła- sunków uzyskano  postać losowo
świetlone bez inwersji, a dwa ko- mi. Poprzez naprzemienne wyświe- poruszającą ustami. Dla wyświetla-
lejne z inwersją. Instrukcja Line tlanie tych rysunków uzyskano pro- czy graficznych z kontrolerem KSx
umożliwia narysowanie linii. Pierw- stą animację wyświetlanej postaci. i SED dedykowane są jeszcze in-
sze dwa parametry określają współ- Pierwszy rysunek, o czym była strukcję Glcdcmd oraz Glcddata. In-
rzędne x, y początku linii, a kolej- mowa, został zapisany w pamięci strukcja Glcdcmd umożliwia wysła-
ne dwa  współrzędne x, y jej EEPROM mikrokontrolera, natomiast nie do wyświetlacza rozkazu, a in-
końca. Ostatni parametr określa ko- drugi w pamięci Flash, zaraz za strukcja Glcddata danej. Oczywiście
lor linii. Przy wartości 0, linia jest danymi dotyczących fontu. Rysunek wszystkie przedstawione dane w
reprezentowana przez zgaszone pik- zapisany z pamięci Flash identyfi- tym punkcje odnoszą się także do
sele, a przy 1 przez zapalone. W kowany jest przez etykietę Rys1. wyświetlaczy graficznych z kontro-
przykładzie, za pomocą instrukcji Załączane pliki graficzne powinny lerem SED, przy wykorzystaniu
Line został narysowany prostokąt mieć rozszerzenie .bgf. W Bascom którego zamiast biblioteki glcdK-
otaczający wyświetlony tekst. W znajduje się program Graphic Co- S108.lib należy załączyć bibliotekę
pętli For, wykonywanej aż I osią- nverter (rys. 5), który umożliwia glcdsed.lib. Przyłączenie wyświetla-
gnie wartość większą od 120, wy- konwersje plików graficznych zapi- cza graficznego z kontrolerem SED
konywana jest kilkakrotnie instruk- sanych w formacie BMP na format do mikrokontrolera jest podobne
cja Circle, która rysuje okrąg. BGF. Należy pamiętać, że konwerto- jak wyświetlacza z kontrolerem
Pierwsze dwa parametry określają wana bitmapa powinna być czar- KSx, z tym, że należy dodatkowo
współrzędne x, y środka okręgu, no biała i mieć wielkość zgodną wykorzystać nieużywaną w tym
trzeci parametr jest promieniem, z wielkością ekranu wyświetlacza. przypadku linię Reset.
a ostatni tak, jak w przypadku Line W tym przypadku powinna to być Marcin Wiązania, EP
określa kolor. Przy kolorze o warto- bitmapa o wielkości 128x64 pikseli. marcin.wiazania@ep.com.pl
ści 1, okrąg będzie reprezentowany Do dołączenia pliku z grafiką, za-
przez zapalone piksele. Po odczeka- r ó w n o d o p a m ię c i F l a s h j a k
Elektronika Praktyczna 8/2005
82


Wyszukiwarka