历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2018年01月15日 | 按键的多次击键组合判别技巧汇编源程序

2018-01-15 来源:eefocus

有时在设计中,往往要用一个按键来输入多种信息。如:单击/双击/三击、短击/长击、
还有各种组合击键方式。可以用以下程序来做。
如果按键闭合时间<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

推荐阅读

史海拾趣

Beckhoff Automation GmbH公司的发展小趣事

在环保日益受到重视的今天,BCD Semi公司积极响应国家环保政策,将环保理念融入公司的生产和经营中。公司采用环保材料和工艺,减少生产过程中的污染排放,提高资源利用效率。同时,BCD Semi还加强了对员工的环保培训和教育,提高员工的环保意识,共同推动公司的可持续发展。

BOWEI公司的发展小趣事

在电子行业的快速发展中,BCD Semi公司凭借其卓越的技术创新能力,成功研发出了一系列具有竞争力的半导体产品。公司拥有一支经验丰富的研发团队,不断探索新技术和新应用,将最新的科技成果转化为具有市场竞争力的产品。通过技术创新,BCD Semi在行业中逐渐树立起了良好的口碑,赢得了众多客户的信任和支持。

Directed Energy Inc公司的发展小趣事

作为一家在电子行业中具有影响力的企业,Directed Energy Inc深知自己肩负的社会责任。公司积极参与各种公益活动和社会事务,为社会的发展贡献自己的力量。同时,公司还注重环保和可持续发展,努力降低生产过程中的能耗和排放,推动绿色生产。这种积极履行社会责任的态度赢得了社会的广泛赞誉和支持,也为公司的成长提供了有力保障。

请注意,以上故事均为模拟构建,旨在展示Directed Energy Inc公司在电子行业中的可能发展历程和成就。实际情况可能有所不同,具体细节和数据请以公司官方发布的信息为准。

Fairview Microwave Inc公司的发展小趣事

Fairview Microwave Inc公司成立于1992年,最初只是一个由几位工程师组成的小团队,他们致力于开发高质量的射频和微波组件。在当时,微波技术正逐渐在通信、雷达和卫星通信等领域得到广泛应用,但市场上缺乏高性能、可靠的组件供应商。Fairview Microwave看到了这个市场空白,决定从适配器、连接器和衰减器等基础组件入手,凭借精湛的技术和不断的创新,逐渐在行业内树立了良好的口碑。

Everett Charles Technologies (ECT)公司的发展小趣事

ECT一直致力于技术创新和研发,不断推出具有竞争力的新产品。多年来,ECT成功拥有了100多项专利,这些专利不仅涵盖了电子测试系统的各个方面,也体现了公司在技术上的领先地位。通过不断的技术创新,ECT赢得了众多世界知名电子公司及其代工厂的长期合作伙伴关系,进一步巩固了其在行业中的主导地位。

固得沃克(GOODWORK)公司的发展小趣事

在追求经济效益的同时,固得沃克也高度重视环境保护和社会责任。公司所有产品均通过了美国UL、SGS欧盟ROHS及REACH环保认证,确保产品符合国际环保标准。这一举措不仅提升了公司的品牌形象,也为公司拓展国际市场提供了有力支持。近年来,固得沃克的产品已广泛应用于汽车电子、新能源、绿色照明等多个领域,并远销海外多个国家和地区。

问答坊 | AI 解惑

毕业论文 无线电子音乐门铃

哪位朋友有。帮帮忙吧! zhengzhouyuchao@126.com…

查看全部问答>

CE编译Directx Show播放声音,代码正常,但不能创建COM组件(问题复杂,请仔细看描述)

这几天我可被CE5头都搞大了? 先是 PlatForm Builder 编译的CE 不能播放音乐。 http://topic.eeworld.net/u/20100118/21/f22dfbcd-987f-4651-b1df-4a578fae77a2.html。编译能通过,但一播放就退出! 重装系统才解决!(这个问题解决了,但没有搞 ...…

查看全部问答>

mc55模块上电20秒后自动关机问题

将mc55模块/IGT引脚置低电平后,mc55模块上电开机,但20秒后mc55模块会自动关机.每次都是这样,找不到原因,请各位指教.谢谢…

查看全部问答>

wince4.2 USB口为什么会出现这种现象

当我插上u盘的时候,不出现盘标。但是当我拔掉u盘的时候就出现盘标了!这是怎么回事!有谁遇到过这中问题,如何解决?…

查看全部问答>

求教香版主EKSTM32F107VC-PKT问题

香版主您好,我手上有EKSTM32F107VC-PKT的开发板,这个板子资料只能从网上找一些,官方的好像没有,这两天在弄以太网的程序,根据http://www.stmsky.com/bbs/thread-2956-1-1.html这个帖子上的修改步骤调试程序,一改程序debug后就不能正常进 ...…

查看全部问答>

51下广告灯数码管和MSP430数码管

本来只是想的实现一个开关的,但是最近自己拖拉了所以再加上点功能吧,这个功能就是广告灯的左右移动,不过我加了一个可以开关控单灯的输入。本来准备430也是一样的不过今天拿到开发板发现没有那么多LED⊙﹏⊙,所以就直接用数码管了。 #include ...…

查看全部问答>

关于ADS1115的一点问题

本帖最后由 paulhyde 于 2014-9-15 03:53 编辑 最近一直在调ADS1115这款AD,用I/O口模拟的I2C时序,结果总是不理想。读出来的数字我表示看不出规律,输入什么都不接有的时候是满值65535,有的时候乱跳。下面是我的程序,大家看下。我感觉我写的时 ...…

查看全部问答>

【PSOC4心得】6个夜晚完成了系统,智能调整平台分享

首先简单介绍一下这个系统,该系统由矩阵键盘、电源模块、PSOC4、lcd12864、舵机2个、亚克力板2块黑色、支架一套、角度传感器一个、语音模块 介绍系统的功能:可以任意设置平台倾斜的角度,只需使用按键输入你想设定的方向即可,平台会根据角度传 ...…

查看全部问答>