一个按键的多次击键组合判别技巧

来源:本站
导读:目前正在解读《一个按键的多次击键组合判别技巧》的相关信息,《一个按键的多次击键组合判别技巧》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一个按键的多次击键组合判别技巧》的详细说明。
简介: 有时在设计中,往往要用一个按键来输入多种信息。如:单击/双击/三击、短击/长击、还有各种组合击键方式。可以用以下程序来做。

如果按键闭合时间<500MS,判断为一次短击(0);

如果按键闭合时间>500MS,判断为一次长击(1);

两次击键时间间隔应<700MS,如果按键释放后700MS内无键按下,则结束读键。

读键完毕返回一个键号值KEY_NUM。其意义如下:

KEY_NUM 意义

00000000 无键按下过

00000001 无意义

00000010 单次短击

00000011 单次长击

00000100 短击 + 短击

00000101 短击 + 长击

00000110 长击 + 短击

00000111 长击 + 长击

…… ……

10000000 7次短击

11111111 7次长击

上表中的KEY_NUM值的规律是,从左向右看,第一个"1"后面的每一位代表一次击键;"0"代表短击,"1"代表长击。掌握该规律后,我们可将任何一个8位的二进制数"翻译"成一种击键组合。例如:01010101,代表的是:短+长+短+长+短+长。

该程序最多可识别7次连续击键,共254种组合。但并非每个程序中用得上。在大多数程序中,能判断双击即可以了,这时可将程序中的ZHBIT定义为2。同理,如果要判断3次按键,将ZHBIT定义为3即可。

当ZHBIT="1"时,程序仅能判断一次击键,包括2种组合(短击/长击);当ZHBIT="2"时,程序还能判断两次击键,包括6(2+4)种组合(短击/长击/(短+短)/(短+长)/(长+短)/(长+长));以次类推,当ZHBIT="3"时,程序能判断三次击键,包括14(2+4+8)种组合。

ZHBIT 组合种类

1 2

2 2+4=6

3 2+4+8=14

4 2+4+8+16=30

5 2+4+8+16+32=62

6 2+4+8+16+32+64=126

7 2+4+8+16+32+64+128=254

下面这段程序摘自小匠的一个智能充电器程序(MCU是EM78P458),如下:

;********************************

;读键子程序

;出口: KEY_NUM =键号值

;中间: KEY_DL =计数器

;说明:

/*

短击:键按下时间<500MS

长击:键按下时间>500MS

两次按键间隔时间<700MS

键号定义:

KEY_NUM="00000000": 无键按下

KEY_NUM="00000001": 无意义

KEY_NUM="00000010": 单次短击

KEY_NUM="00000011": 单次长击

KEY_NUM="00000100": 短击 + 短击

KEY_NUM="00000101": 短击 + 长击

KEY_NUM="00000110": 长击 + 短击

KEY_NUM="00000111": 长击 + 长击

...

...

KEY_NUM="11111110": 长击 + 长击 + 长击 + 长击 + 长击 + 长击 + 短击

KEY_NUM="11111111": 长击 + 长击 + 长击 + 长击 + 长击 + 长击 + 长击

*/

ZHBIT EQU 2 ;按键组合位(选择范围1~7)

;********************************

READKEY:

CLR KEY_NUM ;清键号

JKOFF READKEYF ;键未按下跳

BS KEY_NUM,0 ;"1" -> 键号低位

;=================

READKEYA:

CLR KEY_DL ;清计数器

READKEYB:

CALL DL10MS

INC KEY_DL

MOV A,@50

SUB A,KEY_DL

JBC R3,C

JMP READKEYC ;计数器溢出跳

JKON READKEYB ;键未释放跳

BC R3,C ;C="0"

JMP READKEYD

;=================

READKEYC:

WDTC ;喂狗

JKON READKEYC ;键未释放跳

BS R3,C ;C="1"

READKEYD:

RLLC KEY_NUM ;键号左移一位,C -> 键号低位

JBC KEY_NUM,ZHBIT ;按键检测未完成继续

RET

;=================

CLR KEY_DL ;清计数器

READKEYE:

CALL DL10MS

INC KEY_DL

MOV A,@70

SUB A,KEY_DL

JBC R3,C

READKEYF:

RET ;计数器溢出返回

JKOFF READKEYE ;键未按下跳

JMP READKEYA ;再次检测

;=================

;键闭合跳(宏)

;=================

JKON MACRO ADDRESS

JBS R5,KEY ;键断开跳

FJMP ADDRESS ;键闭合跳

CALL DL10MS ;延时去抖动

JBS R5,KEY ;键断开跳

FJMP ADDRESS ;键闭合跳

ENDM

;=================

;键断开跳(宏)

;=================

JKOFF MACRO ADDRESS

JBC R5,KEY ;键闭合跳

FJMP ADDRESS ;键断开跳

CALL DL10MS ;延时去抖动

JBC R5,KEY ;键闭合跳

FJMP ADDRESS ;键断开跳

ENDM

提醒:《一个按键的多次击键组合判别技巧》最后刷新时间 2024-03-14 01:08:24,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一个按键的多次击键组合判别技巧》该内容的真实性请自行鉴别。