文档详情

多个按键连按处理.doc

发布:2017-05-10约3.47千字共3页下载文档
文本预览下载声明
多个按键的连按处理技巧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
显示全部
相似文档