0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个按键的多次击键组合应该如何判别详细技巧程序概述

Wildesbeast 来源:未知 作者:佚名 2019-11-09 10:45 次阅读

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

如果按键闭合时间《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
责任编辑 LK

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    114

    文章

    3673

    浏览量

    79879
  • 按键
    +关注

    关注

    4

    文章

    221

    浏览量

    57421
收藏 人收藏

    评论

    相关推荐

    按键学习 按键漫谈+单个按键多次击键的检测方法

    非常好的按键学习资料,在此共享,为了照顾没E币的人,不浪费你们的E币,我打包起来了。三文件:按键漫谈.pdf+单个按键多次
    发表于 06-24 22:47

    单个按键多次击键的检测方法

    单个按键多次击键的检测方法
    发表于 08-19 23:33

    如何为单片机的按键锁防止多次触发?

    如何为单片机的按键锁防止多次触发
    发表于 10-30 08:21

    按键多次击键组合判别技巧汇编程序

    由于在学习用DS1302来做LED时钟时,发现开发板附的程序按键操作,很不灵活,后来在网上找到篇《
    发表于 06-08 15:00 2681次阅读

    基于状态机的单片机按键短按长按功能的实现

    本文主要介绍了基于状态机的单片机按键短按长按功能的实现,按键击键过程也是种状态的切换,也可以看着是
    发表于 12-28 08:43 1.9w次阅读
    基于状态机的单片机<b class='flag-5'>按键</b>短按长按功能的实现

    AM335XU-BooT程序分析详细的中文概述

    本文的主要内容是TI的产品AM335XU-BooT程序分析的详细中文概述
    发表于 04-24 16:33 29次下载
    AM335XU-BooT<b class='flag-5'>程序</b>分析<b class='flag-5'>详细</b>的中文<b class='flag-5'>概述</b>

    LCD仿真控制的详细介绍和程序资料概述

    本文档的主要内容详细介绍了LCD仿真控制和程序的资料概述
    发表于 06-11 08:00 5次下载
    LCD仿真控制的<b class='flag-5'>详细</b>介绍和<b class='flag-5'>程序</b>资料<b class='flag-5'>概述</b>

    PID程序算法的详细资料概述免费下载

    本文档的主要内容详细介绍的是PID程序算法的详细资料概述免费下载
    发表于 07-24 08:00 36次下载

    用两IO口检测5按键程序详细资料免费下载

    本文档的主要内容详细介绍的是用两IO口检测5按键程序详细资料免费下载。
    发表于 03-29 15:16 26次下载
    用两<b class='flag-5'>个</b>IO口检测5<b class='flag-5'>个</b><b class='flag-5'>按键</b>的<b class='flag-5'>程序</b><b class='flag-5'>详细</b>资料免费下载

    如何为单片机的按键锁防止多次触发实例资料和程序免费下载

    储存着两样信息,力度和键值。那么在我写的程序的项目要求是这样的,要求每个按键次只能触发次,并且触发的时候要发出不同的键码,通过音频解码盒将该键码值读出来,比如第
    发表于 08-14 17:32 0次下载
    如何为单片机的<b class='flag-5'>按键</b>加<b class='flag-5'>一</b><b class='flag-5'>个</b>锁防止<b class='flag-5'>多次</b>触发实例资料和<b class='flag-5'>程序</b>免费下载

    应该如何学习STM32资料概述

    本文档的主要内容详细介绍的是教你应该如何学习STM32资料概述
    发表于 11-08 14:45 25次下载
    <b class='flag-5'>应该</b>如何学习STM32资料<b class='flag-5'>概述</b>

    单片机C程序设计的六实例详细讲解

    本文档的主要内容详细介绍的是单片机C程序设计的5实例详细讲解包括了:按键程序编写的基础,模块化
    发表于 11-18 08:00 1次下载
    单片机C<b class='flag-5'>程序</b>设计的六<b class='flag-5'>个</b>实例<b class='flag-5'>详细</b>讲解

    RT-Thread大会:如何实现4按键的手势组合

    我有基于电极的非触摸程序,如何实现4按键的手势组合?   通过4路波形判断手势   即
    的头像 发表于 05-27 11:01 988次阅读
    RT-Thread大会:如何实现4<b class='flag-5'>个</b><b class='flag-5'>按键</b>的手势<b class='flag-5'>组合</b>?

    stm32单片机如何实现按键切换两程序

    ,非常实用。下面,我们将详细介绍如何在STM32单片机上实现按键切换两程序
    的头像 发表于 09-14 14:22 5115次阅读

    idea如何多次运行程序

    些实际的示例。 内容: 、使用循环结构 1.1 for循环 最常用的多次运行程序的方法之是使用循环结构。其中最常用的循环结构是for
    的头像 发表于 12-06 14:59 850次阅读