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.

Podobne dokumenty