Тема: Зчитування інформації з матричної клавіатури.
Мета: Вивчити взаємодію контролера із засобами вводу даних, вивід даних на засоби відображення інформації.
Порядок виконання роботи:
1. Вивчити алгоритми зчитування даних із клавіатури.
2. Розробити алгоритм індивідуального завдання до початку заняття.
3. Розробити програму і скомпілювати її.
4. Завантажити програму в стенд, переконатись в правильності її роботи, при негативному результаті виявити допущені помилки і виправити їх. Повторити завантаження програми в стенд.
Рисунок 5.1 – Схема для лабораторної роботи №5
Короткі теоретичні відомості
Зчитування із клавіатури відбувається методом сканування по рядках. Для здійснення зчитування із першого стовпця потрібно записати в порт Р2 адресу 0EFh, і зчитати дані із старшого півбайта порту Р0. Для цього необхідно задати напрям передачі даних буфера DD6 на прийом інформації (встановити вивід DIR в логічний нуль), це значення задається портом мікроконтролера Р3.6. Для роботи на прийом від шини до контролера встановити P3.6 в логічний 0. При цьому якщо натиснута кнопка із першого рядка, то значення порту Р0.0 буде рівне логічному 0, якщо натиснута кнопка із другого рядка, то Р0.1=0 і т.д. Для зчитування із другого стовпця в порт Р2 записується адрес 0DFh, третього – 0BFh.
|
|
Зчитування із рядків клавіатури слід проводити не частіше ніж через 50мс, через те, що для будь-якого механічного контакту характерне явище вібрації контактної пари, протягом якої контакт декількаразово розмикається-замикається, протягом приблизно 8-12мс.
Приклад програми для лабораторної роботи №5
Програма зчитує дані з клавіатури і засвічує відповідний світлодіод.
dat Equ R0
adr Equ R1
Temp1 Equ R2
Temp2 Equ R3
;key1 Equ R4
;key2 Equ R5
stec Equ 0x02
Org 0x000
jmp run
Cseg
org 0x033
run:
stovb1:
mov adr, #01100000b
mov P2, adr
clr p3.6
mov a, p0
next0:
jb p0.0, next1
call svit8
jmp run
next1:
jb p0.1, next2
call svit5
jmp run
next2:
jb p0.2, next3
call svit2
jmp run
next3:
jb p0.3, stovb2
call gas1
jmp run
stovb2:
mov adr, #01010000b
mov P2, adr
clr p3.6
mov a, p0
next02:
jb p0.0, next12
call svit7
jmp run
next12:
jb p0.1, next22
call svit4
jmp run
next22:
jb p0.2, next32
call svit1
jmp run
next32:
jb p0.3, stovb3
call svit7
call svit6
call svit5
call svit4
call svit3
call svit2
call svit1
jmp run
stovb3:
mov adr, #00110000b
mov P2, adr
clr p3.6
mov a, p0
next03:
jb p0.0, next13
call svit6
jmp run
next13:
jb p0.1, next23
call svit3
jmp run
next23:
jb p0.2, next33
call svit2
call svit3
call svit4
call svit5
call svit6
call svit7
call svit8
jmp run
next33:
jb p0.3, stovb1
call gas1
jmp run
svit1:
mov dat,#01111111b
mov adr,#00000111b
call writ
call ldelay
Ret
svit2:
mov dat,#10111111b
mov adr,#00000111b
call writ
call ldelay
Ret
svit3:
|
|
mov dat,#11011111b
mov adr,#00000111b
call writ
call ldelay
Ret
svit4:
mov dat,#11101111b
mov adr,#00000111b
call writ
call ldelay
Ret
svit5:
mov dat,#11110111b
mov adr,#00000111b
call writ
call ldelay
Ret
svit6:
mov dat,#11111011b
mov adr,#00000111b
call writ
call ldelay
Ret
svit7:
mov dat,#11111101b
mov adr,#00000111b
call writ
call ldelay
Ret
svit8:
mov dat,#11111110b
mov adr,#00000111b
call writ
call ldelay
Ret
gas1:
mov dat,#11111111b
mov adr,#00000111b
call writ
call ldelay
Ret
Writ:
setb P3.6
mov P0, dat
mov P2, adr
nop
mov P2, #0x00
Ret
Delay:
mov Temp1, #0xFF
loop:
dec Temp1
mov Temp2, #0xFF
djnz Temp2, $
cjne Temp1, #0x00, loop
Ret
Ldelay:
call delay
call delay
call delay
call delay
call delay
call delay
call delay
call delay
call delay
call delay
RET
END