(79)【按键】[独立按键] - 1: 单击,双击,三击以及N击

时间:2022-09-02 23:09:53

此按键程序的实现的功能是单个独立按键的[单击],[长按],[双击],[三击]以及[多击]。本文分为三个部分,

  • 第一个部分是说[单击],[长按]的程序;
  • 第二部分是讲[双击];
  • 第三部分是讲[三击],[N击];

    一、 [单击]、[长按]程序

    1. 简单介绍本按键程序的单击和长按

    首先说一下单击,长按的响应情况,就是按多久算单击或者长按,按下按键马上返回有效键值,还是释放之后返回有效键值等等,下面说下它在什么情况下返回有效的【单击】和【长按】。

    首先看一张时序图:

  • aaarticlea/png;base64,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" alt="" />
  • 注:
    T1:是单击的按键消抖时长,这里预设的是30ms,也可以根据需求自行定义;
    T2:是单击时,按键释放的有效时间段,提前或者超过这个时间段释放的按键都再是单击了。提前释放则是无效键值,超过后释放则是长按。
    T3:是长按时长,按键超过此时长,则为长按。这里的预设值是3s,同样可根据需求自行更改。
    【单击】:按键按下超过消抖时长T1(30ms),并且在T2时间段内释放按键,按键一释放,马上返回有效按键值—【单击】。
    注意:单击是释放后,才返回有效按键值,不释放时,是无效按键值。

    【长按】:按键按下的时间超过预设的长按时长T3(3s) ,马上返回有效按键值—【长按】;
    注意:长按是只要按下的时间超过预设的长按时长,马上返回有效键值。但是,如果按键一直按着不释放,则只返回一次有效按键值,不重复返回,直到释放之后,才开始重新读取键值。
    2. 按键程序的架构

    按键程序可以分为四个部分,

    第一部分:判断有无按键按下;
        第二部分:按键是否有效(按键消抖);
        第三部分:确定有效按键的种类(单击还是长按);
        第四部分:等待按键释放。

    3. 按键程序的源代码以及注释
    以下是key.c 的源代码:

     //============================ key.c ===================
    
     #define KEY_INPUT           P1.0    // 按键IO
    
     #define KEY_STATE_0         0       // 按键状态
    #define KEY_STATE_1 1
    #define KEY_STATE_2 2
    #define KEY_STATE_3 3 #define LONG_KEY_TIME 300 // LONG_KEY_TIME*10MS = 3S
    #define SINGLE_KEY_TIME 3 // SINGLE_KEY_TIME*10MS = 30MS #define N_KEY 0 // no click
    #define S_KEY 1 // single click
    #define L_KEY 10 // long press unsigned char key_driver(void)
    {
    static unsigned char key_state = ; // 按键状态变量
    static unsigned int key_time = ; // 按键计时变量
    unsigned char key_press, key_return; key_return = N_KEY; // 清除 返回按键值 key_press = KEY_INPUT; // 读取当前键值 switch (key_state)
    {
    case KEY_STATE_0: // 按键状态0:判断有无按键按下
    if (!key_press) // 有按键按下
    {
    key_time = ; // 清零时间间隔计数
    key_state = KEY_STATE_1; // 然后进入 按键状态1
    }
    break; case KEY_STATE_1: // 按键状态1:软件消抖(确定按键是否有效,而不是误触)。按键有效的定义:按键持续按下超过设定的消抖时间。
    if (!key_press)
    {
    key_time++; // 一次10ms
    if(key_time>=SINGLE_KEY_TIME) // 消抖时间为:SINGLE_KEY_TIME*10ms = 30ms;
    {
    key_state = KEY_STATE_2; // 如果按键时间超过 消抖时间,即判定为按下的按键有效。按键有效包括两种:单击或者长按,进入 按键状态2, 继续判定到底是那种有效按键
    }
    }
    else key_state = KEY_STATE_0; // 如果按键时间没有超过,判定为误触,按键无效,返回 按键状态0,继续等待按键
    break; case KEY_STATE_2: // 按键状态2:判定按键有效的种类:是单击,还是长按
    if(key_press) // 如果按键在 设定的长按时间 内释放,则判定为单击
    {
    key_return = S_KEY; // 返回 有效按键值:单击
    key_state = KEY_STATE_0; // 返回 按键状态0,继续等待按键
    }
    else
    {
    key_time++; if(key_time >= LONG_KEY_TIME) // 如果按键时间超过 设定的长按时间(LONG_KEY_TIME*10ms=200*10ms=2000ms), 则判定为 长按
    {
    key_return = L_KEY; // 返回 有效键值值:长按
    key_state = KEY_STATE_3; // 去状态3,等待按键释放
    }
    }
    break; case KEY_STATE_3: // 等待按键释放
    if (key_press)
    {
    key_state = KEY_STATE_0; // 按键释放后,进入 按键状态0 ,进行下一次按键的判定
    }
    break; default: // 特殊情况:key_state是其他值得情况,清零key_state。这种情况一般出现在 没有初始化key_state,第一次执行这个函数的时候
    key_state = KEY_STATE_0;
    break;
    } return key_return; // 返回 按键值
    }
  • 原文地址:https://blog.csdn.net/pillarpeng/article/details/50963127

(79)【按键】[独立按键] - 1: 单击,双击,三击以及N击的更多相关文章

  1. AD按键-矩阵按键-独立按键:

    原理:利用数组分压+AD采集: 优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来):可备用作为AD基准输入. 缺点:不能做成组合按键(或者电阻要精确选择):且离IO ...

  2. Android系统中自定义按键的短按、双击、长按事件

    在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...

  3. FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖

    ###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...

  4. 【C51】单片机独立按键与矩阵按键

    独立按键 首先既然是检测输入,对于当然要用到拉电阻,来检测引脚电平变化变化.51单片机中,除了P0口外,P2,P3,P4都是内置上拉电阻的准双向IO口,一般 的 51 P0引脚都外接了上拉电阻,当然也 ...

  5. C51 独立按键 个人笔记

    独立按键类似于一个开关,按下时开关闭合 防抖 硬件防抖 软件防抖 通过延时,滤掉抖动的部分 电路图 普中科技的开发板,独立按键电路图如下 判断按键按下 因此判断是否按下开关的方法是看引脚是否为低电平( ...

  6. MCU 51-4 独立按键&编码按键

    独立按键: 按键的按下与释放是通过机械触点的闭合与断开来实现的,因机械触点的弹性作用,在闭合与断开的瞬间均有一个抖动的过程,抖动必须清除. 按键按下一次,数码管数值加1: #include<re ...

  7. MCU软件最佳实践——独立按键

    1. 引子 在进行mcu驱动和应用开发时,经常会遇到独立按键驱动的开发,独立按键似乎是每一个嵌入式工程师的入门必修课.笔者翻阅了许多书籍(包括上大学时候用的书籍)同时查阅了网上许多网友的博客,无一例外 ...

  8. Unity 代码检测单击&comma;双击&comma;拖放

    今天小伙伴问我如何自己写一段代码检测 单击 双击 和 拖放.于是就写了这段代码O(∩_∩)O~ 代码如下: using UnityEngine; using System.Collections; p ...

  9. iOS 开源一个高度可定制支持各种动画效果&comma;支持单击双击&comma;小红点,支持自定义不规则按钮的tabbar

    TYTabbarAnimationDemo 业务需求导致需要做一个tabbar,里面的按钮点击带有动画效果,tabbar中间的按钮凸出,凸出部分可以点击,支持badge 小红点等,为此封装了一个高度可 ...

随机推荐

  1. Task Runner Explorer for vs2015找不到啊

    https://visualstudiogallery.msdn.microsoft.com/8e1b4368-4afb-467a-bc13-9650572db708/view/ 编译typescri ...

  2. SQL Server网络地址备份

    SQL Server网络地址备份 Ø  软件系统: SQL Server 各版本 1.问题描述: 在XX客户做SQL Server 到Oracle 数据迁移时,当时由于客户的SQL Server200 ...

  3. 理解Java(StringBuffer和StringBuilder)

    StringBuffer可实现同步,StringBuilder线程不安全. 翻译自Java API英文文档 本质 StringBuffer 和 StringBuilder 均表示一个可变字符序列 这个 ...

  4. 华为OJ之最长公共子串

    题目描述: 对于两个给定的字符串,给出他们的最长公共子串. 题目分析: 1,最长公共子串(LCS)实际上是最长公共子序列的一种特殊情况,相当于是求连续的最长子序列.我们今天先解决这个特殊情况,后续博文 ...

  5. China Azure中部署Kubernetes&lpar;K8S&rpar;集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  6. Service Fabric基本概念: Node&comma; Application&comma; Service&comma; Partition&sol;Replicas

    作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节中,为大家简明扼要的介绍了微软针对现代分布式系统在Azure上实现的相关服务组件.紧接上文内容,本节将为大家介绍Azur ...

  7. Webwork【05】请求跳转前 xwork&period;xml 的读取

    个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...

  8. SQL 注入,永不过时的黑客技术

    SQL 注入,永不过时的黑客技术 TalkTalk的信息泄漏事件导致约15万人的敏感信息被暴露,涉嫌造成这一事件的其中一名黑客使用的并不是很新的技术.事实上,该技术的「年纪」比这名15岁黑客还要大两岁 ...

  9. django的restfulapi

    Django Rest framework 的流程大概是这样的 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显 ...

  10. easyui datagrid行编辑中数据联动

    easyui的datagrid中行内编辑使用数据联动.即:当编辑产品编号时,该行的产品名称自动根据产品编号显示出来. 在编辑中获取当前行的索引 function getRowIndex(target) ...