前面已经学习了单个按键的检测,今天我们来学学单个按键长按和短按的检测。利用一个按键实现数字增减操作。短按一次数码管数值加一,长按一次数码管数据减一。
一、长短按键的检测原理:
当检测到有按键按下时,启动定时器T0开始定时,置位按键按下标志位为1,设置定时器每10ms中断一次,在中断服务程序中让计数器R5的值加1。等待按键弹起,关掉定时器,清除按键按下标志位。然后根据R5的值乘以10ms得到按键按下去持续的时间,再用该时间和设定的阀值时间进行比较,如果小于阀值时间则判定为短按,否则为长按键。阀值可以更改,一般大于300ms认为是长按键,所以本实验设置阀值为300ms,当R5的值大于等于30时,就认为是长按键。
二、实验原理图
三、程序代码
/*********************************/
/*程序功能:主要用在按键较少的情况
该程序可以实现一个按键两种功能,短按一次
数码管数值加一,长按一次数码管数据减一
实现一个按键控制数据的增减
/*********************************/
keyold bit 20h.0 ;保存按键值
key bit p3.2 ;按键输入
LED bit p1.4 ;P1.4接LED
FMQ bit p2.4 ;蜂鸣器
DUAN equ P0 ;P0段码(共阳极)
WEI bit P2.0 ;位选端
org 0000h
ajmp main
org 000bh
;定时10ms
MOV TL0,#000H ;设置定时初值
MOV TH0,#0DCH ;设置定时初值
inc r5
reti
main:
ORL TMOD,#01H ;设置定时器模式
MOV TL0,#000H ;设置定时初值
MOV TH0,#0DC