Politechnika Lubelska w Lublinie |
Laboratorium podstaw systemów mikroprocesorowych |
||
|
Ćwiczenie nr 10 |
||
Józwik Tomasz Krzysztof Kadłubowski |
Semestr V |
Grupa ED 5.4 |
Rok akademicki 1997/98 |
Temat ćwiczenia: Wyświetlacz 7-segmentowy i alfanumeryczny LCD. |
Data wykonania 05.12.97 |
Ocena: |
Wykonanie ćwiczenia :
;************************************************
;LEKCJA 6 - WYŚWIETLACZ 7-SEGMENTOWY
;PRZYKŁAD 1 - ZAPIS DO PORTU - PEŁNY ADRES
SEG_ON EQU P1.6 ;włączenie wyświetlacza 7-segm.
;Pełne adresy urządzeń we/wy systemu DSM-51
F_CSDS EQU 0FF30H ;bufor wyboru wskaźnika
F_CSDB EQU 0FF38H ;bufor danych wskaźnika
;Stałe używane w programie
DISPLAY EQU 00010101B ;wybrane wskaźniki - 1, 3, 5
COD EQU 01111001B ;wybrane segmenty E,F,H
COD1 EQU 01110001B
COD2 EQU 01110110B
LJMP START
ORG 100H
START:
SETB SEG_ON
MOV DPTR,#F_CSDS ;adres bufora
;wyboru wskaźnika
MOV A,#DISPLAY
MOVX @DPTR,A ;wpisz wybrane wskaźniki
MOV DPTR,#F_CSDB ;adres bufora
;danych wskaźnika
MOV A,#COD
MOVX @DPTR,A ;wpisz segmenty litery E
CLR SEG_ON ;włącz wyświetlacz 7-segm
MOV A,#10
LCALL DELAY_100MS
SETB SEG_ON ;wyłącz wyświetlacz
MOV A,#COD1 ;segmenty litery F
MOVX @DPTR,A
CLR SEG_ON
MOV A,#10
LCALL DELAY_100MS
SETB SEG_ON
MOV A,#COD2
MOVX @DPTR,A ;segmenty litery H
CLR SEG_ON
MOV A,#10
LCALL DELAY_100MS
SJMP START
Program ten pokazuje sposób adresowania buforów wyboru wskaźnika I danych wyświetlacza 7-segmentowego za pomocą 16-bitowego rejestru DPTR. Po uruchomieniu programu na wyświetlaczu pojawią się litery E,F,H.
;************************************************
;LEKCJA 6 - WYŚWIETLACZ 7-SEGMENTOWY
;PRZYKŁAD 2 - ZAPIS DO PORTU - ADRES 8-BITOWY
SEG_ON EQU P1.6 ;włączenie wyświetlacza 7-segm.
;Stałe używane w programie
DISPLAY EQU 00010101B ;wybrane wskaźniki - 2i5
COD EQU 01111111B ;wybrane segmenty
LJMP START
ORG 100H
START:
MOV R0,#CSDS ;adres bufora
;wyboru wskaźnika
MOV R1,#CSDB ;adres bufora
;danych wskaźnika
MOV A,#DISPLAY
MOVX @R0,A ;wpisz wybrane wskaźniki
MOV A,#COD
MOVX @R1,A ;wpisz wybrane segmenty
CLR SEG_ON ;włącz wyświetlacz 7-segm
SJMP $
Program wykorzystuje do adresowania buforów 8-bitowe rejestry R0 i R1 zamiast 16-bitowego DPTR.
;************************************************
;LEKCJA 6 - WYŚWIETLACZ 7-SEGMENTOWY
;PRZYKŁAD 3 - PRZEGLĄDANIE WYŚWIETLACZA
;************************************************
SEG_ON EQU P1.6 ;włączenie wyświetlacza 7-segm.
;Stałe używane w programie
ONE EQU 006H ;kod cyfry 1
TWO EQU 05BH ;kod cyfry 2
THREE EQU 04FH ;kod cyfry 3
FOUR EQU 066H ;kod cyfry 4
FIVE EQU 06DH ;kod cyfry 5
SIX EQU 07DH ;kod cyfry 6
SEVEN EQU 007H ;kod cyfry 7
;Pamięć wewnętrzna RAM
DISPLAY EQU 30H
;**************************************
LJMP START
ORG 100H
START:
MOV DISPLAY,#ONE ;wpisz kody cyfr
MOV DISPLAY+1,#TWO ;dla kolejnych
MOV DISPLAY+2,#THREE ;wskaźników
MOV DISPLAY+3,#FOUR
MOV DISPLAY+4,#FIVE
MOV DISPLAY+5,#SIX
MOV DISPLAY+6,#SEVEN
LOOP_DISP: ;ustawienie danych do
;wyświetlania na 1-szym
;wskaźniku
MOV R0,#DISPLAY ;adres pobierania kodów
MOV R2,#7 ;licznik-il. wskaźników
MOV R3,#00000001B ;wybór wskaźnika
;-kod 1 z 8
LOOP:
;wyłącz poprzedni
;wskaźnik
MOV R1,#CSDS ;adres wyboru wskaźnika
MOV A,R3 ;aktualny wskaźnik (1z8)
MOVX @R1,A ;wpisz nr wskaźnika
RL A ;obrót w lewo - numer
MOV R3,A ;następnego wskaźnika
;(kod 1 z 8)
MOV R1,#CSDB ;adres danych wskaźnika
MOV A,@R0 ;kod aktualnego wskaźnika
MOVX @R1,A ;wpisz kod segmentów
INC R0 ;adres pobierania kodu
;dla następnego wskaźnika
CLR SEG_ON ;włączenie wskaźnika
MOV A,#10 ;czas 1s - świecenie
LCALL DELAY_100MS ; jednego wskaźnika
DJNZ R2,LOOP ;kolejne świecenie
;siedmiu wskaźników
SJMP LOOP_DISP ;zacznij od wskaźnika 1
Program wyświetla kolejne liczby po wygaszeniu poprzedniej . Czas świecenia jednego segmentu wynosi 1s
;************************************************
;LEKCJA 9 - WYŚWIETLACZ ALFANUMERYCZNY LCD
;PRZYKŁAD 1 - WYPISYWANIE ZNAKU
;************************************************
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV R0,#LCDWD ;adres wpisywania danych
;na wyświetlacz LCD
MOV R1,#LCDRC ;adres odczytu stanu
;wyświetlacza LCD
LOOP:
LCALL WAIT_KEY ;pobierz klawisz
ADD A,#30H ;zamiana kodu klawisza
MOV R2,A ;na kod znaku LCD
BUSY:
MOVX A,@R1 ;odczyt stanu
JB ACC.7,BUSY ;oczekiwanie na BUSY=0
MOV A,R2 ;wysłanie kodu znaku
MOVX @R0,A ;do wyświetlacza LCD
SJMP LOOP
Program powoduje wyświetlania na wyświetlaczu LCD znaku pobranego z klawiatury, który wykorzystywany jest jako sygnał sterujący dla sterownika wyświetlacza LCD. Po wprowadzeniu 16 znaków kursor znika z wyświetlacza ponieważ wyświetlacz LCD wyposażony jest w uniwersalny sterownik LCD tzn. bez względu na to jakim wyświetlaczem steruje zapamiętuje 80 znaków - 2 razy po 40 znaków I dlatego po 16-tym znaku aż do 40 nie wyświetla a jedynie je zapamiętuje (wyświetlacz badany może wyświetlać 2 razy po 16 znaków).
;************************************************
;LEKCJA 9 - WY—WIETLACZ ALFANUMERYCZNY LCD
;PRZYKťAD 3 - DEFINIOWANIE ZNAKU
;************************************************
LJMP START
ORG 100H
START:
MOV R0,#LCDWC ;adres wpisu instrukcji
MOV R1,#LCDRC ;adres odczytu stanu
MOV A,#48H ;ustaw adres generatora
LCALL WRITE ;znaków dla znaku 1
INC R0 ;adres wpisu danych
MOV DPTR,#LITERA ;adres definicji litery
MOV R3,#8 ;licznik bajtów definicji
LOOP: ;wpisz definicję litery
;do generatora znaków LCD
CLR A
MOVC A,@A+DPTR ;odczyt kolejnego bajtu
LCALL WRITE ;zapis do generatora zn.
INC DPTR ;modyfikacja adresu
DJNZ R3,LOOP ;przepisanie 8 bajtów
DEC R0 ;adres wpisu instrukcji
MOV A,#1 ;kasuj dane wyświetlacza
LCALL WRITE
MOV A,#0FH ;włącz wyświetlacz, kursor
LCALL WRITE ;i mruganie kursora
MOV A,#06H ;ustaw kierunek przesuwu
LCALL WRITE ;kursora
INC R0 ;adres wpisu danych
MOV DPTR,#TEXT ;adres tekstu do
;wyświetlenia na LCD
WRITE_TXT: ;wpisz tekst na LCD
CLR A
MOVC A,@A+DPTR ;pobranie znaku tekstu
JZ TEXT_END ;bajt=0 - koniec tekstu
LCALL WRITE ;wpis na wyświetlacz
INC DPTR ;modyfikacja adresu
SJMP WRITE_TXT ;wpisz kolejny znak
TEXT_END:
SJMP $ ;koniec programu
;**************************************
;Podprogram wpisu danych lub instrukcji
;na wywietlacz LCD
;Zakłada prawidłowe adresy w R0 i R1
WRITE:
MOV R2,A ;przechowanie danych
BUSY:
MOVX A,@R1 ;odczytanie stanu
JB ACC.7,BUSY ;oczekiwanie na BUSY=0
MOV A,R2 ;odtworzenie danych
MOVX @R0,A ;wysłanie danych
RET
;**************************************
;Tabela bajtów definiujących literę 'ź'
LITERA:
DB 00001000B
DB 00010000B
DB 11111111B
DB 00000010B
DB 00001000B
DB 00100000B
DB 01111111B
DB 00000000B
;**************************************
TEXT:
DB 'Lu',1,'na guma',0
W programie wykorzystano możliwość definiowania znaku niedostępnego w standardowej matrycy znaków.
Literę definiujemy jako mapę ośmiu bajtów, z których każdy zawiera jedną linię matrycy wyświetlacza.
Znak ten zapamiętany jest w pamięci CG_RAM. Znak umieszczono w komórkach pamięci 08H..0FH.