多个按键连按处理.doc
文本预览下载声明
多个按键的连按处理技巧2006年07月28日 星期五 下午 10:40《多个按键的连按处理技巧》
在设计中,常常用UP键和DOEN来调节参数。这种键在处理时,要考虑连按的问题。而且希望键连续按下的时间越长,动作的响应速度越快(即加速度处理)
在连按的处理过程中,要考虑3个时间常数:
1、连按响应时间常数(首次值),该值用于区分连按/单按。
a)当按键闭和的时间该参数时,判为单按;
b)当按键闭和的时间该参数时,判为连按;
2、连按缓冲时间常数(最大值)。
在连按操作刚开始时,按键响应速度较慢,这个参数就是用于决定每次动作之间的最大时间。
3、连按缓冲时间常数(最小值)
在连按的过程中,响应的速度越来越快,但也不能无限快。这个参数就是用于决定每次动作之间的最小时间。
还有一个要考虑的问题是,可能并不是所有按键都具有连按功能。这时,可用一个标志位来区分。在读键子程序中返回键值的同时,也返回这个标志,告诉键盘监控程序是否要做连按处理。
下面的一段例程中,可以识别单按/连按,并可处理加速度问题。只要在主程序中调用即可。程序中的延时用现实程序来代替。
;********************************
;按键处理模块
;********************************
;时间常数定义
KEY_T == 250 ;连按响应时间常数(首次值)
KEY_TMAX == 120 ;连按缓冲时间常数(最大值)
KEY_TMIN == 30 ;连按缓冲时间常数(最小值)
;********************************
KEYWK:
MOV A,@KEY_T
MOV KEY_JS,A ;连按计数器置初值
BC TT1,KEY ;清连按标志
MOV A,@KEY_TMAX-KEY_TMIN
MOV KEY_JSJS,A ;连按加速计数器置初值
CALL READKEY ;读键
JBS R3,C ;有键按下跳
RET
FCALL MOVLCD ;显示延时
CALL READKEY ;读键
JBS R3,C ;确实有键按下跳
RET
;====确实有键按下
MOV KEY_BUF,A ;保存键值
KEY1:
FCALL MOVLCD ;显示延时
CALL READKEY ;读键
JBS R3,C ;键未释放跳
JMP KEY5
;====连按判断
JBS TT1,KEY_EN ;连按功能有效跳
JMP KEY1 ;禁止连按跳
JBC TT1,KEY ;不是连按跳
JMP KEY2
DJZ KEY_JS ;连按计数器-1=0跳
JMP KEY1
BS TT1,KEY ;置连按标志
JMP KEY1
;====连按处理
KEY2:
CALL DOKEY ;执行按键功能
MOV WK_MODE,A ;刷新模式
;连按加速计数器-1
DJZ KEY_JSJS
JMP $+2
INC KEY_JSJS
;连按计数器置延时值
MOV A,@KEY_TMIN
ADD A,KEY_JSJS
MOV KEY_JS,A ;连按计数器置延时值
KEY4:
FCALL MOVLCD ;显示延时
DJZ
显示全部