Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Systemy Czasu Rzeczywistego Programowanie wyświetlacza graficznego LCD laboratorium: 01 autor: mgr inż. Paweł Pławiak Kraków, 2015
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 2 Spis treści Spis treści...2 1. Wiadomości wstępne...3 1.1. Wyświetlacz graficzny LCD...3 1.2. Przykładowy kod...4 1.3. Schemat podpięcia...7 1.4. Pseudokod...7 1.5. Zagadnienia do przygotowania...8 2. Przebieg laboratorium...9 2.1. Zadanie 1. Na ocenę 3.0 (dst)...9 2.2. Zadanie 2. Na ocenę 4.0 (db)...9 2.3. Zadanie 3. Na ocenę 5.0 (bdb)...9
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 3 1. Wiadomości wstępne Pierwsza część niniejszej instrukcji zawiera podstawowe wiadomości teoretyczne dotyczące omawianego tematu. Poznanie tych wiadomości umożliwi prawidłowe zrealizowanie praktycznej części laboratorium. 1.1. Wyświetlacz graficzny LCD Zestaw ewaluacyjny ZL15AVR wyposażono w złącze umożliwiające dołączenie do zestawu wyświetlacza graficznego o organizacji 128x64 piksele ze sterownikiem KS0107/KS0108 (oznaczenie GLCD12864). Regulacja kontrastu wyświetlacza jest możliwa poprzez potencjometr P1 (zworka JP4 DISPLAY w pozycji GRAPH). Linie sterujące wyświetlaczem dostępne są na złączu Con12/LCD_GRAPH. Sterownik KS0108A, potrafi obsługiwać 64 kanały wyjścia i jest dedykowany dla wyświetlaczy graficznych LCD. Urządzenie składa się z pamięci RAM wyświetlacza, 64 bitowego zatrzasku danych, 64 bitowego sterownika i dekodera logiki. Posiada wbudowaną pamięć RAM do przechowywania wyświetlanych danych przenoszonych z 8 bitowego mikrokontrolera. Sterownik umożliwia generowanie sygnałów na matrycy wyświetlacza ciekłokrystalicznego odpowiadających przechowywanym danym. Obsługa wyświetlacza polega na zainicjowaniu wyświetlacza, następnie należy wyczyścić ekran oraz wyświetlić oczekiwany tekst lub obrazek. Podczas testowania napisanych programów proszę sprawdzić ustawienie zworki oraz wyregulować kontrast. Zgodnie z biblioteką sterownika odpowiednie złącza wyświetlacza graficznego należy podłączyć do portów PA i PC. Szczegółowe informacje na temat obsługi sterownika KS0108 znajdują się w nocie katalogowej na stronie - http://dl.btc.pl/kamami_wa/ks0108.pdf Szczegółowe informacje na temat złącza wyświetlacza graficznego znajdują się w dokumentacji zestaw ewaluacyjny ZL15AVR - http://dl.btc.pl/kamami_wa/zl15avr.pdf
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 4 UWAGA Przed wgraniem programu do pamięci mikrokontrolera należy w programie KamPro przejść na kartę Fuse Bits, odznaczyć bit JTAGEN i zapisać nową konfigurację bitów, klikając przycisk Write. Dopiero wówczas można przejść na kartę Memory programming w celu wgrania pliku hex. 1.2. Przykładowy kod Sterownik KS0108: #include "KS0108.h" #include "font5x8.h" // Reference to MCU-specific external functions extern void GLCD_InitalizePorts(void); extern void GLCD_WriteData(unsigned char); extern void GLCD_WriteCommand(unsigned char, unsigned char); extern unsigned char GLCD_ReadData(void); extern unsigned char GLCD_ReadStatus(unsigned char); unsigned char screen_x = 0, screen_y = 0; // screen coordinates // Initialization interface and LCD controller void GLCD_Initialize(void) unsigned char i; GLCD_InitalizePorts(); for(i = 0; i < 3; i++) GLCD_WriteCommand((DISPLAY_ON_CMD ON), i); // Sets screen coordinates and address void GLCD_GoTo(unsigned char x, unsigned char y) unsigned char i; screen_x = x; screen_y = y; for(i = 0; i < KS0108_SCREEN_WIDTH/64; i++) GLCD_WriteCommand(DISPLAY_SET_Y 0,i); GLCD_WriteCommand(DISPLAY_SET_X y,i); GLCD_WriteCommand(DISPLAY_START_LINE 0,i);
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 5 GLCD_WriteCommand((DISPLAY_SET_Y (x % 64)), (x / 64)); GLCD_WriteCommand((DISPLAY_SET_X y), (x / 64)); // Sets text coordinates and address void GLCD_TextGoTo(unsigned char x, unsigned char y) GLCD_GoTo(x*6,y); // Clears screen void GLCD_ClearScreen(void) unsigned char i, j; for(j = 0; j < KS0108_SCREEN_HEIGHT/8; j++) GLCD_GoTo(0,j); for(i = 0; i < KS0108_SCREEN_WIDTH; i++) GLCD_WriteData(0x00); // Writes char to screen memory void GLCD_WriteChar(char chartowrite) char i; chartowrite -= 32; for(i = 0; i < 5; i++) GLCD_WriteData(GLCD_ReadByteFromROMMemory((char *)(font5x8 + (5 * chartowrite) + i))); GLCD_WriteData(0x00); // Write null-terminated string to screen memory void GLCD_WriteString(char * stringtowrite) while(*stringtowrite) GLCD_WriteChar(*stringToWrite++); // Write null-terminated string to screen memory void GLCD_WriteStringXY(char * stringtowrite, char x, char y) GLCD_GoTo(x,y); while(*stringtowrite) GLCD_WriteChar(*stringToWrite++);
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 6 // Sets or clears pixel at (x,y) void GLCD_SetPixel(unsigned char x, unsigned char y, unsigned char color) unsigned char tmp; GLCD_GoTo(x, y/8); tmp = GLCD_ReadData(); GLCD_GoTo(x, y/8); tmp = GLCD_ReadData(); GLCD_GoTo(x, y/8); if(color) tmp = (1 << (y%8)); else tmp &= ~(1 << (y%8)); GLCD_WriteData(tmp); // Displays bitmap at (x,y) and (dx,dy) size void GLCD_Bitmap(char * bmp, unsigned char x, unsigned char y, unsigned char dx, unsigned char dy) unsigned char i, j; for(j = 0; j < dy / 8; j++) GLCD_GoTo(x,y + j); for(i = 0; i < dx; i++) GLCD_WriteData(GLCD_ReadByteFromROMMemory(bmp++)); // End of file KS0108.c
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 7 1.3. Schemat podpięcia Zworka: JP4 (DISPLAY) - 1-2 (=GRAPH) Wyświetlacz graficzny LCD: D0 (LCD_GRAPH/con12) - PA0 (con15) D1 (LCD_GRAPH/con12) - PA1 (con15) D2 (LCD_GRAPH/con12) - PA2 (con15) D3 (LCD_GRAPH/con12) - PA3 (con15) D4 (LCD_GRAPH/con12) - PA4 (con15) D5 (LCD_GRAPH/con12) - PA5 (con15) D6 (LCD_GRAPH/con12) - PA6 (con15) D7 (LCD_GRAPH/con12) - PA7 (con15) RS (LCD_GRAPH/con12) - PC0 (con17) RW (LCD_GRAPH/con12) - PC1 (con17) E (LCD_GRAPH/con12) - PC2 (con17) CS1(LCD_GRAPH/con12) - PC4 (con17) CS2(LCD_GRAPH/con12) - PC3 (con17) 1.4. Pseudokod Obsługa wyświetlacza graficznego LCD wyświetlanie tekstu i obrazu na przemian. int main(void) zadeklarowanie zmiennej do opóźnienia inizjalizacja LCD do
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 8 czyszczenie ekranu wyświetlanie oczekiwanego tekstu for() opóźnienie wyświetlanie obrazu for() opóźnienie while(1); return 0; 1.5. Zagadnienia do przygotowania Przed przystąpieniem do realizacji laboratorium należy zapoznać się z zagadnieniami dotyczącymi: o wyświetlacza graficznego LCD o sterownika KS0108 Literatura: [1] Rafał Baranowski, Mikrokontrolery AVR ATmega w praktyce [2] Nota katalogowa sterownika KS0108 - http://dl.btc.pl/kamami_wa/ks0108.pdf [3] Dokumentacja zestawu ewaluacyjnego ZL15AVR http://dl.btc.pl/kamami_wa/zl15avr.pdf [4] Instrukcje do poprzednich ćwiczeń laboratoryjnych
01. Systemy Czasu Rzeczywistego Wyświetlacz graficzny LCD 9 2. Przebieg laboratorium Druga część instrukcji zawiera zadania do praktycznej realizacji, które demonstrują zastosowanie technik z omawianego zagadnienia. Pod wskazanym linkiem umieszczono bibliotekę czcionek (font5x8.h), przykładowy obrazek kamami (kamami.h) oraz sterownik KS0108-AVR (KS0108-AVR.c) http://www.iti.pk.edu.pl/index.php/pl/dydaktyka/materia%c5%82ydydaktyczne/sw/49-lab-5-programowanie-wy%c5%9bwietlacza-graficznego-lcd.html Natomiast na stronie: http://en.radzio.dxp.pl/bitmap_converter/ można znaleźć darmowy program konwertujący obrazek bitmapowy do macierzy z danymi (możliwej do wyświetlenia na graficznym LCD). 2.1. Zadanie 1. Na ocenę 3.0 (dst) Proszę napisać program wyświetlający zadany tekst. 2.2. Zadanie 2. Na ocenę 4.0 (db) Proszę napisać program wyświetlający na zmianę zadany tekst i obrazek. 2.3. Zadanie 3. Na ocenę 5.0 (bdb) Proszę napisać program wyświetlający obrazek przesuwający się w lewo przez 10 sekund., a następnie w prawo przez 10 sekund.