LABORATORIUM PODSTAW SYSTEMÓW MIKROPROCESOROWYCH
Imię i Nazwisko: Piotr Jurek & Tadeusz Klukowski |
Grupa: ED 5.1 |
||||
Data wyk. ćwicz. 7.12.98
|
Numer ćwiczenia 10 |
Temat ćwiczenia: Wyświetlacz 7-segmentowy. Wyświetlacz alfanumeryczny LCD. |
Ocena: |
ZADANIE NR.1
Na wyświetlaczu została wyświetlona litera E.
;************************************************
; WYŚWIETLACZ 7-SEGMENTOWY
; ZAPIS DO PORTU - PEŁNY ADRES
;************************************************
SEG_ON EQUP 1.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 - 1 i 4
COD EQU 01111001B ;wybrane segmenty (E)
LJMP START
OR 100H
START:
MOV MDPTR,#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 $
|
DPL |
DPH |
P2 |
P1 |
MOV |
00 |
00 |
BC |
FF |
MOV |
30 |
FF |
BC |
FF |
MOVX |
30 |
FF |
BC |
FF |
MOV |
30 |
FF |
BC |
FF |
MOV |
38 |
FF |
BC |
FF |
MOVX |
38 |
FF |
BC |
FF |
CLR |
38 |
FF |
BC |
FF |
SJMP |
38 |
FF |
BC |
BF |
Na wyświetlaczu została wyświetlona litera F.
Program taki sam jak wyżej, tylko stała COD EQU wynosi 01110001B.
|
DPL |
DPH |
P2 |
P1 |
MOV |
00 |
00 |
BC |
FF |
MOV |
30 |
FF |
BC |
FF |
MOVX |
30 |
FF |
BC |
FF |
MOV |
30 |
FF |
BC |
FF |
MOV |
38 |
FF |
BC |
FF |
MOVX |
38 |
FF |
BC |
FF |
CLR |
38 |
FF |
BC |
FF |
SJMP |
38 |
FF |
BC |
BF |
Na wyświetlaczu została wyświetlona litera H.
Program taki sam jak wyżej, tylko stała COD EQU wynosi 01110110B.
|
DPL |
DPH |
P2 |
P1 |
MOV |
00 |
00 |
BC |
FF |
MOV |
30 |
FF |
BC |
FF |
MOVX |
30 |
FF |
BC |
FF |
MOV |
30 |
FF |
BC |
FF |
MOV |
38 |
FF |
BC |
FF |
MOVX |
38 |
FF |
BC |
FF |
CLR |
38 |
FF |
BC |
FF |
SJMP |
38 |
FF |
BC |
BF |
ZADANIE NR.2
Na wyświetlaczu została wyświetlona litera E.
;************************************************
; WYŚWIETLACZ 7-SEGMENTOWY
; ZAPIS DO PORTU - ADRES 8 BITOWY
;************************************************
SEG_ON EQUP 1.6 ;włączenie wyświetlacza 7-segm.
;Stałe używane w programie
DISPLAY EQU 00001001B ;wybrane wskaźniki - 1 i 4
COD EQU 01111001B ;wybrane segmenty (E)
LJMP START
OR 100H
START:
MOV R0,#CSDS ;adres bufora
;wyboru wskaźnika
MOV R1,#CSDB ;adres bufora
;dane 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 $
|
DPL |
DPH |
P1 |
MOV |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOVX |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOVX |
00 |
00 |
FF |
CLR |
00 |
00 |
FF |
SJMP |
00 |
00 |
BF |
Na wyświetlaczu została wyświetlona litera F.
Program taki sam jak wyżej, tylko stała COD EQU wynosi 01110001B.
|
DPL |
DPH |
P1 |
MOV |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOVX |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOVX |
00 |
00 |
FF |
CLR |
00 |
00 |
FF |
SJMP |
00 |
00 |
BF |
Na wyświetlaczu została wyświetlona litera H.
Program taki sam jak wyżej, tylko stała COD EQU wynosi 01110110B.
|
DPL |
DPH |
P1 |
MOV |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOVX |
00 |
00 |
FF |
MOV |
00 |
00 |
FF |
MOVX |
00 |
00 |
FF |
CLR |
00 |
00 |
FF |
SJMP |
00 |
00 |
BF |
ZADANIE NR.4
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,#00000011B ;wybór wskaźnika
;-kod 1 z 8
MOV R4,#10
CLR SEG_ON
MOV R1,#CSDS
MOVX @R1,#00H
LOOP:
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
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)
PETLA:
MOV A,#100 ;czas 1s - świecenia
LCALL DELAY_MS ;dwóch wskaźników
DJNZ R4,PETLA
MOVX @R1,#00H
DJNZ R2,LOOP ;kolejne świecenie
;siedmiu wskaźników
SJMP LOOP_DISP ;zacznij od wskaźnika 1
ZADANIE NR.5
;************************************************
; WYŚWIETLACZ ALFANUMERYCZNY LCD
; 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
Po wprowadzeniu 16-tu znaków kursor znika z wyświetlacza. Natomiast po wprowadzeniu 40 znaków na wyświetlacz kursor pojawi się na dolnej linii wyświetlacza. Wynika to z tego, że wyświetlacz LCD wyposażony jest w sterownik , który pamięta 80 znaków (2 linie po 40 znaków). Tak więc wysłane na wyświetlacz znaki nie zginęły, a jedynie nie można było ich wszystkich wyświetlić na wyświetlaczu.