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