矩阵键盘识别实验
一、 实验目的
掌握单片机I/O口的输入检测的方法、矩阵按键的识别方法、键盘消抖等。
学会实时程序的调试技巧。
二、 实验原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。
三、 实验内容
实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0到F,6个数码管同时静态显示即可。
下图中按键s6-s218条线分别联接p3口相连,p3.0~p3.3控制1~4行,p3.4~p3.7控制1~4列。
四. 实验步骤
1、 按实验要求在Keil中创建项目,编辑、编译程序。
2、 将编译生成的目标码文件(后缀为.Hex)传入实验板中。
3、 在实验板上运行程序,观察实验运行结果并记录
五.实验结果
wei bit p2.7
duan bit p2.6
org 0000h
jmp main
org 0040h
main: mov p3,#0ffh
mov a,p3
setb wei
mov p0,#0ffh
clr wei
mov dptr,#table
m1: mov p3,#0feh
mov a,p3
cjne a,#0feh,s1
jmp s7
s1: call delay
mov a,p3
cjne a,#0feh,s2
jmp s7
s2: mov a,p3
cjne a,#0eeh,s3
mov r2,#0
jmp s8
s3: mov a,p3
cjne a,#0deh,s4
mov r2,#1
jmp s8
s4: mov a,p3
cjne a,#0beh,s5
mov r2,#2
jmp s8
s5: mov a,p3
cjne a,#7eh,s8
mov r2,#3
jmp s8
s8: mov a,p3
cjne a,#0feh,s8
call display
s7: nop
jmp m2
m2: mov p3,#0fdh
mov a,p3
cjne a,#0fdh,l0
jmp l0
l0: call delay
mov a,p3
cjne a,#0fdh,l2
jmp l7
l2: mov a,p3
cjne a,#0edh,l3
mov r2,#4
jmp l8
l3: mov a,p3
cjne a,#0ddh,l4
mov r2,#5
jmp l8
l4: mov a,p3
cjne a,#0bdh,l5
mov r2,#6
jmp l8
l5: mov a,p3
cjne a,#7dh,l8
mov r2,#7
jmp l8
l8: mov a,p3
cjne a,#0fdh,l8
call display
l7: nop
jmp m3
m3 : mov p3,#0fbh
mov a,p3
cjne a,#0fbh,a0
jmp a0
a0: call delay
mov a,p3
cjne a,#0fbh,a2
jmp a7
a2: mov a,p3
cjne a,#0ebh,a3
mov r2,#8
jmp a8
a3: mov a,p3
cjne a,#0dbh,a4
mov r2,#9
jmp a8
a4: mov a,p3
cjne a,#0bbh,a5
mov r2,#10
jmp a8
a5: mov a,p3
cjne a,#7bh,a8
mov r2,#11
jmp a8
a8: mov a,p3
cjne a,#0fbh,a8
call display
a7: nop
jmp m4
m4: mov p3,#0f7h
mov a,p3
cjne a,#0f7h,b0
jmp b0
b0: call delay
mov a,p3
cjne a,#0f7h,b2
jmp b7
b2: mov a,p3
cjne a,#0e7h,b3
mov r2,#12
jmp b8
b3: mov a,p3
cjne a,#0d7h,b4
mov r2,#13
jmp b8
b4: mov a,p3
cjne a,#0b7h,b5
mov r2,#14
jmp b8
b5: mov a,p3
cjne a,#77h,b8
mov r2,#15
jmp b8
b8: mov a,p3
cjne a,#0f7h,b8
call display
b7: nop
jmp m1
display:setb wei
mov p0,#0c0h
clr wei
setb duan
mov a,r2
movc a,@a+dptr
mov p0,a
clr duan
ret
delay: mov r4,#20
dl0: mov r7,#248
djnz r7,$
djnz r4,dl0
ret
table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
db 77h,7ch,39h,5eh,79h,71h
end