Wyświetlacz alfanumeryczny LCD. 1.Wiadomości podstawowe
Transkrypt
Wyświetlacz alfanumeryczny LCD. 1.Wiadomości podstawowe
K.I.K. , Laboratorium Systemów Mikroprocesorowych, Ćwiczenie numer 5, Wyświetlacz alfanumeryczny LCD 1 POLITECHNIKA CZĘSTOCHOWSKA, WYDZIAŁ INŻYNIERII MECHANICZNEJ I INFORMATYKI KATEDRA INŻYNIERII KOMPUTEROWEJ Laboratorium Systemów Mikroprocesorowych Ćwiczenie nr 5: (SAB80C537) TEMAT: Wyświetlacz alfanumeryczny LCD. 1.Wiadomości podstawowe W urządzeniach powszechnego użytku bardzo często wykorzystywany jest do komunikacji z użytkownikiem wyświetlacz LCD. Za jego pomocą możliwe jest przekazywanie czytelnych informacji o stanie procesu czy urządzenia. Wyświetlacze alfanumeryczne mają możliwość wyświetlania oprócz cyfr także liter według tablicy kodów ASCII. Ponadto możliwe jest zdefiniowanie kilku dodatkowych znaków – na przykład polskich liter lub innych specjalnych symboli. Najczęściej spotykane są wyświetlacze typu 2x16 – mogące wyświetlać dwa wiersze po 16 znaków (liter) w każdym. Mimo istnienia wielu różnych odmian takich wyświetlaczy sterowanie jego pracą jest zawsze takie samo – wynika ono z przyjętego przez wielu producentów standardu. Z punktu widzenia programisty sterowanie LCD ogranicza się do użycia czterech rodzajów komend: 1) odczyt danej z pamięci wyświetlacza, 2) zapis danej do pamięci wyświetlacza, 3) odczyt stanu pracy wyświetlacza, 4) zapis rozkazu sterującego. *Szczegółowy opis sterowania można znaleźć w dokumentacji dotyczącej sterownika LCD – patrz również załączony plik. Uwaga, proponuje się skorzystanie z gotowej biblioteki procedur CRT_LIBR.ASM zawierającej min. zestaw podstawowych procedur obsługi LCD. Pracę z wyświetlaczem LCD należy rozpocząć od jego zainicjowania polegającego na wysyłaniu określonych przez producenta komend (rozkazów sterujących) do wyświetlacza. Procedura LCD_INIT. Po zainicjowaniu wyświetlacz zachowuje się jak ekran komputera (o nieco ograniczonych możliwościach) pracujący w trybie tekstowym. W standardowym trybie pracy dane zapisywane do pamięci wyświetlacza są interpretowane jako kody ASCII znaku przeznaczonego do wyświetlania i pojawiają się w miejscu wcześniejszego ustawienia kursora. Uwaga, po dojściu kursora do końca linii nie pojawia się on na początku drugiej linii jak można by się tego spodziewać. Dlatego jeśli chcemy kontynuować pisanie w następnej linijce należy samemu zadbać o przeniesienie kursora – patrz funkcja LCD_GO_XY. Po zapisaniu danej do wyświetlania wyświetlacz nie jest od razu gotowy do przyjmowania kolejnych danych. Gotowość wyświetlacza można sprawdzić odczytując jego stan i sprawdzając wartość odpowiednich bitów. Jeśli używamy procedur z modułu CRT_LIBR.ASM testowanie gotowości wyświetlacza jest już przez nie wykonywane - nie musimy się tym zajmować. Procedura drukująca znak ASCII w miejscu ustawienia kursora to LCD_PISZ_ZNAK. Wspomniana biblioteka zawiera również procedury: K.I.K. , Laboratorium Systemów Mikroprocesorowych, Ćwiczenie numer 5, Wyświetlacz alfanumeryczny LCD 2 LCD_PISZ_CIAG – drukowanie ciągu znaków. Ciąg musi być zak0ńczony zerem, a adres pierwszej litery ciągu wskazywany jest przez DPTR, ZAMIEN_NA_DEC – zamiana liczby całkowitej 8-bitowej na ciąg znaków. Liczba do zamiany powinna być podana w akumulatorze, w DPTR natomiast powinniśmy umieści adres pod którym ma zostać umieszczona pierwsza litera ciągu. Powstały ciąg zawsze będzie składał się z trzech znaków : 000..255. 2. Przykłady Przykład 1 Napisać program odczytujący wartość analogową za pomocą przetwornika AC i prezentujący wynik w postaci liczby na wyświetlaczu LCD. Należy skorzystać z modułu CRT_LIBR.ASM. Rozwiązanie $NOMOD51 $INCLUDE(REG517.INC) ;potencjometr lewy P7.7 ;potencjometr prawy P7.6 ;klawisze (od lewej do prawej) P5.5..P5.0 ;wyswietlacz LED 7 segmentowy podpiety do portu P1 ;######## POCZATEK PROGRAMU ############## ORG 8100h lcall lcd_init ;inicjalizacja I włączenie wyświetlacza LCD , ;po inicjalizacji – kursor jest ustawiony na początek pierwszej linii mov dptr,#napis ;adres ciągu znaków do wyświetlania lcall lcd_pisz_ciag ;wydrukowanie ciągu znaków na LCD petla: mov a,#40h lcall lcd_go_xy ;ustaw kursor na początek drugiej linii LCD lcall odczytaj_AD1 ;wynik w A mov dptr,#ciag ;adres, gdzie umieszczony zostanie wynik (ciąg tekstowy) lcall zamien_na_dec ;zawartość DPTR jest już ustawiona na adres ciągu wynikowego (#CIAG), więc nie ma potrzeba jej ponownie ustawiać lcall lcd_pisz_ciag ;wypisanie ciagu na LCD LJMP petla ;powtarzaj w nieskonczonej petli ;############################### odczytaj_AD1: CLR ADEX CLR ADM MOV ADCON1,#7 mov DAPR,#0 czekaj1: jb BSY, czekaj1 mov A,ADDAT ret $INCLUDE(CRT_LIBR.ASM) ;dołączenie bibliteki CRT_LIBR.ASM napis: db 'Test LCD - Przykład 1',0 ;UWAGA - zero na końcu ciągu jest konieczne! ciag: db ' ',0 ;miejsce w pamięci RAM na ciag znakow (wynik działania procedury ZAMIEN_NA_DEC) END 3. Program ćwiczenia 1. Napisać program wyświetlający wszystkie znaki (kody ASCII 0..127) na wyświetlaczu. Uwaga, ze względu na ograniczoną wielkość wyświetlacza znaki należy wyświetlać partiami po 16 znaków z oczekiwaniem na wciśnięcie klawisza pomiędzy poszczególnymi grupami znaków. 2. Wydrukować dowolny tekst na ekranie i sprawdzić możliwości konfiguracji pracy kursora (włączenie/wyłączenie). 3. Napisać program odliczający upływający czas w postaci hh:mm:ss. UWAGA – do odliczania dokładnych interwałów czasowych należy wykorzystać jeden z Timerów (np. T0). Program K.I.K. , Laboratorium Systemów Mikroprocesorowych, Ćwiczenie numer 5, Wyświetlacz alfanumeryczny LCD 3 może korzystać z przerwać generowanych przez timer lub tylko sprawdzać stan flagi przepełnienia (TF0). Uwaga należy przyjąć upraszczające założenie, że 133 cykle zliczone przez timer T0 odpowiadają odcinkowi czasu 100us. Aby więc timer T0 przepełniał się co 100 us należy przeładowywać go wartością (w trybie automatycznego przeładowywania) TH0 = 256-133 = 123. W programie należy użyć kilku zmiennych do odliczania kolejno: - L0 – licznik odliczający setki mikrosekund, zwiększany po każdym przepełnieniu T0, - L1 – licznik odliczający dziesiątki milisekund, zwiększany po osiągnięciu przez licznik L0 wartości L0=100 (L0 powinien być wtedy kasowany), - sekundy – licznik odliczający sekundy, zwiększany po osiągnięciu przez licznik L1 wartości L1=100, - minuty – licznik odliczający minuty (0..59), - ... itd. 4. Do programu z p. 3 dorobić procedurę alarmu reagującego na wybraną godzinę poprzez zapalenie wszystkich segmentów wyświetlacza 7-segmentowego LED. 5. Napisać procedurę drukującą dowolny tekst na LCD w trybie symulującym dalekopis (drukowanie po jednej literze z odstępem czasowym pomiędzy poszczególnymi literami). 4 Wnioski z ćwiczenia Opisać sposób sterowania wyświetlacza alfanumerycznego LCD. W jaki sposób możemy definiować własne znaki. Jaka jest przydatność wyświetlacza LCD do przedstawiania informacji liczbowej i znakowej. Opisać sposób realizacji poszczególnych zadań ćwiczenia.