7011


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 wy˜wietlacz 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.



Wyszukiwarka

Podobne podstrony:
7011
7011
praca-magisterska-7011, 1a, prace magisterskie Politechnika Krakowska im. Tadeusza Kościuszki
7011
7011
7011
7011
7011
zetor 7011

więcej podobnych podstron