Image39 (8)

Image39 (8)



Programowanie

znaków użytkownika. Dla zwiększenia wygody pisania programu poniżej znajduje się makro LCDSPECNF, które zwraca wartość true, jeśli funkcja led GetSpec zwróciła znak alternatywny (nie znalazła żądanego wpisu w tablicy).

Dwie pomocnicze funkcje, które pojawiają się na początku listingu 84, zostaną wykorzystane już niedługo. Ich zadaniem jest sprawdzenie, czy podany znak jest znakiem specjalnym, oraz przeliczenie kodu znaku specjalnego na jego kolejny numer (czyli kolejną pozycję w tablicy z listingu 82). Jeśli zechcesz przydzielić inny obszar znakom specjalnym, jedynie te funkcje będą wymagać zmiany.

Następnym elementem zajmującym się znakami użytkownika jest funkcja w idoczna na listingu 85. Odpowiada ona za analizę bufora tekstu i wybranie znaków specjalnych, które mają zostać wysłane do wyświetlacza. Zauważ, że licznik cnt zlicza wszystkie różne znaki specjalne, jakie zostały znalezione w buforze, nawet jeśli jest ich więcej niż można jednocześnie wyświetlić. Ponieważ funkcja zwraca wspomniany licznik na koniec swojego działania, mamy informację o tym, czy cały obraz zostanie prawidłowo wyświetlony. Aktualnie program z tego nie korzysta, ale taka możliwość istnieje.

Zestaw funkcji obsługi znaków specjalnych zamyka pokazana na listingu 86 funkcja zapisująca wybrane dane do wyświetlacza. Robimy to najprościej jak się da: na wstępie ustawiamy adres w wyświetlaczu na początku obszaru danych użytkownika, a następnie przesyłamy kolejno wfzory wybranych znaków.

Wysyłanie bufora znaków do wyświetlacza

W tym momencie potrzebna nam jest jeszcze jedynie możliwość wysłania tekstu na wyświetlacz. Odpowiednia funkcja znajduje się na listingu 87. Dane na ekran wysyłane są pojedynczymi liniami. Przed rozpoczęciem wysyłania linii kursor jest ustawiany na jej początek. Następnie pobierane są kolejne znaki, wykonywany jest test, czy mamy do czynienia ze znakiem specjalnym - jeśli tak, jest on przekształcany na indeks znaku specjalnego albo na znak alternatywny, zgodnie z działaniem funkcji IcdGetSpec. Uzyskany kod znaku jest wysyłany do wyświetlacza.

Zwracani Twoją uwagę na wykorzystaną tutaj możliwość podania, bezpośrednio, wartości zwracanej przez funkcję, jako argument kolejnej funkcji. Do funkcji lcd_GetSpec zostanie przesłany wynik funkcji !cd_Spec2Index.

Zakończenie modułu Icd

To było naprawdę trudne, mamy juz za sobą. Od teraz będzie już „z górki”. Stworzymy funkcję grupującą wszystko co konieczne, aby wyświetlić prawidłowy obraz na wyświetlaczu. Pokazuje ją listing 88. Kolejno przygotowujemy tutaj tablicę znaków specjalnych, wybrane znaki wysyłamy do wyświetlacza, wygaszamy kursor (zachowujemy jedynie stan włączenia / wyłączenia całego wyświetlacza), odświeżamy tekst, umieszczamy kursor na wybranej pozycji oraz odtwarzamy jego star..

Wydaje się może, że procesor ma bardzo dużo roboty. Jednak praktyka wykazuje, że obliczenia wykonywane są bardzo szybko. Najwięcej czasu zajmuje sam dostęp do wyświetlacza. Będziesz miał okazję przekonać się, że dzięki temu, że wyświetlacz nie jest czyszczony, a nowe dane są wpisywane bezpośrednio na poprzednie, nie zauważymy żadnego migotania, które widoczne jest czasami w prostszych rozwiązaniach.

Ostatnią już funkcją, którą musimy dodać do pliku Icd.c, jest led_Get File widoczna na listingu 89. Umożliwia ona dostanie się do wskaźnika na naszą zmienną FILE Jest to niezbędne do działania funkcji biblioteki stdio. Warto zauważyć, że dzięki temu, że funkcja ta została zdefiniowana jako inline,

Listing 88Pełne odświeżenie wyświetlacza.

void Icd Update(void)

{

led PrepereSpecO; lcdJJpdateCGRAMO; lcd_SendInstr(LCDC_ON | (lcd_status & LCDJ5TATUS DISP)); lcd_UpdateTextQ; lcd_UpdateCurFosO i led UptJUiLtf Status O i

}


Listing 89 - Dostęp do „pliku" z zewnątrz.

1nl1ne file* -cd_GetKiie(void) {

return icd_fLCD; ł


ABC... C

Sterowanie przebiegiem pętli

Instrukcje break i continue służą, między innymi, do kontrolowania działaniu pętli. Ich działanie ćobrze opisuje przykładowy obrazek z ramki. Wymienione instrukcje w przypadku umieszczenia w pętli odnoszą się zawizc właśnie dc niej. Nie chodzi tutaj o wyskoczenie poza klamerkę. Kod jak poniżej także spowoduje wyskoczenie z pętli

for(;;)

(


i F(0—fun<c()) zapiszO;

// wyskok z pętli for break;


na dwanaście Ol


a-H-J


Przykład: listing 84 i 86


Ił pętia powinni wyitooać się 10 razy. Zmiami a będzie zmieniam i od Odo9.


Wyobraźmy tobie sytuacja gdy aic chocmy aOy wstoic 3 aył»


1nt a;

for (a«J! kio ; *«+)

( łlM 1f(ł — S) contlnc«;

f 1f(0 I- ZcofcCoo(a)) ^ ^ broik;


■powoduje pnejkK na koniec pftti W tym miejscu wykonana zostań c lnarulcji pętli (wstoić s zostanie zwiększona) Następni: wykonany zoitarie ikok do tratowana warank. pętli W efbkcic dla a riwnega 3 nas funkcja nic KMUni.


J W tym miejscu, katany przerwać ptfłc w momencie gdy z jalocg* powodu oraza funkcja zwróci winutt urną u/ zero. W loa »po*ób na przykład funkcja małe sygnalizować, U nie m jut wiooej zadał do wykonania. Procesor rozpocznie wykonywanie instrukcji

W. oilggpgłL-


Listing 86 - Zapis wzorów maków do pamięci wyświetlacza.

VOid led UpdateCGRAM(V0idJ

{

// Ustawiam adres

// w module na początek definicji znaków:

Lcd_ScndInotr (lCDC__CCA) ; jintO_t o;

for(d-0; d<ELEMS(icd spec); a+-0 (

// Oxff oznacza koniec danych

1f(icd_spec[a] =■ Oxff) break;

ff wskaźnik na początek danych wyglądu zna<u

jint8_t* pdata = lccal_lcdspec[lcd_spec[a]].matrix;

// Wysyłam kolejny indeks

uint8_t bait;

for(bait»0| bait<3; bai.t+-f)

Lcd^SenriCata (pgiu_read_byt".e(pdata4+));

Listing 87- Wypisywanie tekstu na ekranie.

void led JpdateText(void)

i

xf yj

char *pbuffcr ■ lcd_buffcrj // Przetwarzanie każdej linii oddzielnie for(y-0; y<LCD_SY; y++)

{

led SendInstrCLOC DDA | lcd_Line3tart(y));

// wysłanie wszystkich znaków z danej linii for(x-0; x<lcd_sx; x++)

{

uint8_t znak ■ *pbuffer++; if(lcd_Is3pec(znak))

znak ■ led_GecSpacClcd_Spec2Index(ziiok));

// znak gotowy do wysłania lcd_SendData(znak);

ł

48 Maj 2006 Elektronika dla Wszystkicl


Wyszukiwarka

Podobne podstrony:
CCI20140809040 DODATEK DO KSIĄŻKI PRZEGLĄDÓW Poniżej znajduje się program przeglądów dla modeli z s
CCI20140809041 DODATEK DO KSIĄŻKI PRZEGLĄDÓW Poniżej znajduje się program przeglądów dla modeli z s
Wiedza źródłem zwiększonych korzyści W centrum programu szkoleniowego znajduje się połączenie teorii
Opracowanie ekofizjograficzne podstawowe dla miasta Kostrzyn nad Odrą zagłębienia znajdujące się na
3 Studia pierwszego stopnia: ogólne informacje o przedmiotach W programach studiów znajdują się
Narzędzia Java Wszystkie narzędzia potrzebne do programowania w Javie znajdują się w bezpłatnym paki
Informatyka Europejczyka. iPodręcznik dla szkoty podstawowej, kl. IV-VICo znajduje się we wnętrzu
szacunku dla różnic światopoglądowych i kulturowych; Ponosi odpowiedział znajdujących się

więcej podobnych podstron