Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб 9Л.doc
Скачиваний:
1
Добавлен:
21.11.2019
Размер:
1.62 Mб
Скачать

Алгоритм виводу алфавітно-цифрової інформації на знако-цифрове табло (дисплей).

Для того, щоб вивести інформацію на дисплей у лабораторній роботі, потрібно задати код символу та місце його засвічування. В алгоритмі виводу алфавітно-цифрової інформації на знако-цифрове табло (блок схема наведена на Рис. 7) спочатку треба передбачити ввід адреси комірки, куди має бути встановлений символ. Адреса комірки набирається за допомогою пульта вводу двійкової інформації, заноситься в мікроконтролер та висвітлюється на світлодіодному індикаторі. Перевіряється натискуванням кнопки «Ввід». Якщо вивід даних на світлодіодний індикатор не відбувся, то операція повторюється спочатку, а якщо вивід даних відбувся, то далі вводяться значення кодів з пульта стенду у двійковій формі в регістр коду символу на табло. В контролері встановлюємо адреси старших розрядів світлодіодного індикатора. Далі копіюється вміст регістру адреси символу в регістр даних світлодіодного індикатора і виводяться дані на світлодіодний індикатор та знову перевіряється натискуванням кнопки «Ввід». Якщо перевірка не відбулася, то значення сигналів вводяться з пульта вводу двійкової інформації в регістр коду на дисплей, а якщо перевірка відбулася, то далі дані виводяться на табло. Якщо не було перевірки, то алгоритм виводу алфавітно-цифрової інформації на знако-цифрове табло починається спочатку, а якщо перевірка відбулася тоді відбувається вихід в меню сервісної програми.

Рис. 7 Блок - схема алгоритму виводу символів на дисплей

Програма, що реалізована в навчальному лабораторному стенді.

;++++++ Variable BIT declarations +++++++++++++++++++++++++++++++++++++++++++

DISP_EN BIT p1.1 ; Display Enable

DISP_R_W BIT p2.4 ; Display Read/Write signal

DISP_RS BIT p2.5 ; Display Register Select signal

;++++++ Display Init ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

mov a,#40d ; Delay 40 ms

call Delay_ms

mov b,#4d

DISP_Init_do:

mov a,#38h ; 2 - line, 5*8 - dots

call DISP_Control ; Init 4 commands

mov a,#5d ; Delay > 4,1 ms

call Delay_ms

djnz b,DISP_Init_do

mov a,#08h ; Display OFF

call DISP_Control

mov a,#01h ; Display Clear

call DISP_Control

mov a,#06h ; Entry Mode Set

call DISP_Control

mov a,#10d ; Delay 10 msec

call Delay_ms

mov a,#0Ch ; Display On

call DISP_Control

mov a,#02h ; Return Home

call DISP_Control

mov a,#084h ; Output string "LK DUIKT"

mov dptr,#DISP_Init_Data1

call DISP_Text

mov a,#0C1h ; Output string "LABORATORIJA CT"

mov dptr,#DISP_Init_Data2

call DISP_Text

jmp DISP_Init_END

DISP_Init_Data1:

db 0a7h,04bh,20h,0e0h,0a9h,049h,04bh,054h,00h ; "LK DUIKT"

DISP_Init_Data2:

db 0A7h,041h,0A0h,04Fh,050h,041h,054h,04Fh,050h,049h,0B1h,020h,0E1h,054h,00h ; "LABORATORIJA CT"

DISP_Init_END:

;------ end Display Init ----------------------------------------------------

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++ dusplay ++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++ LAB_NUM_4 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

LAB_NUM_4:

push acc

mov a,#01h ; Display Clear

call DISP_Control

mov a,#085h ; Output string "Robota"

mov dptr,#Zagolovok4 ;

call DISP_Text ;

mov a,#0C3h ; Output string "z dusplejem"

mov dptr,#Zagolovok41 ;

call DISP_Text ;

mov a,#03d

call Delay_sec

mov a,#01h ; Display Clear

call DISP_Control

;------------------------test program----------------------------------------

c1: call Read_Key_In

mov Symbol_A,KEYREG

mov LEDDR,Symbol_A

mov CFGA,#09h ;#90h

mov CFGD,#40h

mov a,#06h

call Write_LED

jnb BUT_CNT,c5

jnb BUT_ENT,c02

jmp c1

c02:

mov a,255d

call Delay_ms

c2: call Read_Key_In

mov Symbol_C,KEYREG

mov LEDDR,Symbol_C

mov CFGA,#10h ;#90h

mov CFGD,#00h

mov a,#05h

call Write_LED

jnb BUT_CNT,c5

jnb BUT_ENT,c4

jmp c2

c4: mov a,Symbol_A

call DISP_Control

mov a,Symbol_C ;

call DISP_Write

mov a,255d

call Delay_ms

jmp c1

;----------------------end test program------------------------------------

c5:

mov LEDDR,#00h ; clear LED

call Write_LED_H ;

call Write_LED_L ;

mov a,#01h ; Display Clear

call DISP_Control

jb BUT_INC,ISO1

call big_str1

ISO1:

jmp c6

Zagolovok4:

db 050h,04fh,0a0h,04fh,054h,041h,00h ; 'Robota'

Zagolovok41:

db 0a4h,020h,0e0h,0a5h,043h,0a8h,0a7h,045h,045h,04dh,00h ; 'z dusplejem'

c6:

pop acc

ret

;------ end LAB_NUM_4 -------------------------------------------------------

Підпрограми, що реалізовані в навчальному лабораторному стенді.

DISP_Control

;++++++ DISP_Control +++++++++++++++++++++++++++++++++++++++++++++++++++

; a = code control (DISP_R_W = 0, DISP_RS = 0) ; 01h - Clear Display (Очищення дисплею)

; 02h - Return Home Cursor (Повернення курсора в початкове положення)

; (04-07)h - Entry Mode Set (вибрати тип курсора)

; (08-0F)h - Display ON/OFF (Вкл.\Викл. дисплея)

; (20-38)h - Function Set (Функціональні встановлення, керуючі коди) ; (40-7F)h - Set CG RAM Address

; (80-FF)h - Set DD RAM Address

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Підпрограма здійснює налаштування режиму виводу інформації на рідинно-

кристалічний індикатор (табло)

вхідний параметр : акумулятор повинен містити байт, що відповідає

певному режиму виводу

(див. документацію по опису індикатора)

Приклад:

DISP_Control:

push acc

clr DISP_R_W ; DISP_R_W = 0

clr DISP_RS ; DISP_RS = 0

mov p0,a ; Запис керуючого коду

setb DISP_EN ; 0 -> 1

clr DISP_EN ; 1 -> 0

anl a,#0FCh

jnz DISP_Control_ND

mov a,#2d ; Затримка > 1,6 ms

call Delay_ms

DISP_Control_ND:

mov a,#37d ; Затримка 43 us (20 MHz)

djnz acc,$

pop acc

ret

Використовує підпрограму: Delay_ms ;_____________________________________________________________________________

DISP_Write

;++++++ DISP_Write ++++++++++++++++++++++++++++++++++++++++++++++++++++

; a = code of symbol (DISP_R_W = 0, DISP_RS = 1) +

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Підпрограма здійснює вивід символу на рідинно-кристалічний індикатор

(табло) за поточною позицією курсора або за

попередньо встановленою (підпрограмою DISP_Control)

адресою DD RAM

вхідний параметр : акумулятор повинен містити байт, що відповідає

коду символа,,що виводиться

(див.документацію по опису індикатора)

Приклад:

DISP_Write:

push acc

clr DISP_R_W ; DISP_R_W = 0

setb DISP_RS ; DISP_RS = 1

mov p0,a ; Write Data to DD/CG RAM

setb DISP_EN ; 0 -> 1

clr DISP_EN ; 1 -> 0

mov a,#37d ; Затримка 43 us (20 MHz)

djnz acc,$

pop acc

ret

;_____________________________________________________________________________

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]