独立键盘识别及数码管显示实验
独立键盘识别及数码管显示实验
一、 实验目的
掌握单片机I/O口的输入检测的方法、独立按键的识别方法、键盘消抖等。
学会实时程序的调试技巧。
二、 实验原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。
三、 实验内容
用数码管的前两位显示一个十进制数,变化范围为00-59,开始时显示00,每按下s2键一次,数值加1;每按下s3键一次,数值减1;每按下s4键一次,数值归零;按下s5键一次,利用定时器功能使数值开始每秒自动加1,再次按下s5键,数值停止自动加1,保持显示原数。
图1 实验板键盘电路原理图
四、 实验步骤
1、 按实验要求在Keil中创建项目,编辑、编译程序。
2、 将编译生成的目标码文件(后缀为.Hex)传入实验板中。
3、 在实验板上运行程序,观察实验运行结果并记录。
五.实验结果
shi equ 30h
gew equ 31h
wei bit p2.7
duan bit p2.6
org 0000h
jmp main
key1 bit p3.4
key2 bit p3.5
key3 bit p3.6
key4 bit p3.7
org 000bh
jmp time0
org 0040h
main: mov p3,#0ffh
mov tmod,#01h
mov th0,#(65536-50000)/256
mov tl0,#(65536-50000)mod 256
setb ea
setb et0
mov dptr,#table
mov r2,#0
mov shi,#0
mov gew,#0
setb wei
mov p0,#0ffh
clr wei
m1: jb key1,m2
call delay
jb key1,m2
inc r2
cjne r2,#60,i1
mov r2,#0
i1: jnb key1,$
m2: jb key2,m3
call delay
jb key2,m3
cjne r2,#0,i2
mov r2,#60
i2: dec r2
jnb key2,$
m3: jb key3,m4
call delay
jb key3,m4
mov r2,#0
jnb key3,$
m4: jb key4,m5
call delay
jb key4,m5
cpl tr0
jnb key4,$
m5: call display
jmp m1
display: mov a,r2
mov b,#10
div ab
mov shi,a
mov gew,b
setb wei
mov p0,#0feh
clr wei
setb duan
mov a,shi
movc a,@a+dptr
mov p0,a
clr duan
call delay1ms
mov a,gew
setb wei
mov p0,#0fdh
clr wei
setb duan
mov a,gew
movc a,@a+dptr
mov p0,a
clr duan
delay: mov r4,#20
dl0: mov r7,#249
djnz r7,$
djnz r4,dl0
ret
delay1ms:mov r5,#2
dl: mov r6,#249
djnz r6,$
djnz r5,dl
ret
time0: mov th0,#(65536-50000)/256
mov tl0,#(65536-50000)mod 256
inc r3
cjne r3,#20,tt1
mov r3,#0
inc r2
cjne r2,#60,tt1
mov r2,#0
tt1: reti
table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end