Podstawy Systemów Mikroprocesorowych
Imię i Nazwisko : Duda Grzegorz, Szub Krzysztof |
Symbol grupy ED 5.4 |
||||||
Data wyk. Ćwiczenia 1997-12-01 |
Symbol ćwiczenia: 10 |
Temat zadania: : Wyświetlacz siedmio-segmentowy, wyświetlacz alfanumeryczny LCD. |
|||||
|
ZALICZENIE |
|
|
Ocena |
Data |
Podpis |
|
Celem ćwiczenia jest zapoznanie się ze sposobem działania oraz komunikacją między
mikrokontrolerem a wyświetlaczem: siedmio-segmentowym oraz alfanumerycznym LCD
1. Przykład przedstawia statyczne sterowanie wyświetlaczem 7 - segmentowym,
Tabela wykonywania programu nr1.
|
DPL |
DPH |
P2
|
na wyświetlaczu |
stan początkowy |
00H |
00H |
0BCH |
|
|
30H |
0FFH |
0BCH |
EEEEEE |
|
38H |
0FFH |
0BCH |
ER ; F1; F4 |
Dokładny adres urządzenia w DPTR - 0FF30H oraz 0FF38H
Modyfikacja programu1 polegająca na adresowaniu rejestrowym bufora wyboru wskaźnika oraz bufora danych wskaźnika.
Sposób wpisywania kodu wskaźnika oraz kodu wybranych segmentów pozostaje nie zmieniony a więc dokonuje się przez adresowanie pośrednie rejestrów banku aktywnego.
;************************************************************************************************
;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 00001001B ;wybrane wskaźniki - 1i4
COD EQU 01011011B ;wybrane segmenty
LJMP START
ORG 100H
START:
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 wybrane segmenty
CLR SEG_ON ;włącz wyświetlacz 7-segm
SJMP $
;************************************************************************************************
Tabela wykonywania programu nr1 (po zmodyfikowaniu).
|
DPL |
DPH |
P2
|
na wyświetlaczu |
stan początkowy |
00H |
00H |
0BCH |
|
|
30H |
0FFH |
0BCH |
|
|
38H |
0FFH |
0BCH |
FFF |
Dokładny adres urządzenia DPTR - FF 38H ; BC30H i BC38H ;
Przykład ten przedstawia sekwencyjny sposób wyświetlania liczb na wyświetlaczach 7 - segmentowym.
Zastosowanie pętli LOOP oraz LOOP_ DISP z czasem przetrzymania 1s, powoduje, że na wyświetlaczu świecą się kolejno wskaźniki od 1 do 7 .
;***********************************************************************************************
;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:
SETB SEG_ON ;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 nr 5
;************************************************************************************************
;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
;************************************************************************************************
Na wyświetlaczu LCD ukazują się maksymalnie w jednej linii tylko 16 znaków widocznych oraz dodatkowo 24 znaki, których nie widać z powodu ograniczonych możliwości wyświetlacza. Znaki niewidoczne na ekranie są dostępne poprzez przesuwanie kursora po ekranie. Wpisanie 41 znaku powoduje automatyczne przejście kursora do linii następnej wyświetlacza i podobnie jak w przypadku pierwszej linii widoczne jest 16 początkowych znaków. Wynika to z tego, że wyświetlacz jest obsługiwany przez sterownik HD 44780, który obsługuje 2 linie po 40 znaków.