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

  • 第一个部分是说[单击],[长按]的程序;
  • 第二部分是讲[双击];
  • 第三部分是讲[三击],[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. 51单片机-独立按键控制led矩阵的左移和右移

    51单片机学习 独立按键 控制led灯光矩阵的左移和右移 开发板采用的是普中的A2学习开发板,具体的代码如下: typedef unsigned int u16; void delay(u16 tim ...

  9. Unity 代码检测单击,双击,拖放

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

随机推荐

  1. [转帖]紫光与群联联盟,长江存储NAND+群联主控+紫光品牌SSD可期

    紫光与群联联盟,长江存储NAND+群联主控+紫光品牌SSD可期 全国产的 SSD https://baijiahao.baidu.com/s?id=1620789429952097018&wf ...

  2. 小记---------maxwell 一个可以实时读取mysql二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafka,Redis,文件或其他平台的应用程序

    maxwell主要提供了下列功能     支持 SELECT * FROM table 的方式进行全量数据初始化     支持在主库发生failover后,自动回复binlog位置(GTID)     ...

  3. Python 之父 63 岁才退休,我 23 就中年危机。。

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 Python 之父 Guido van Rossum 在推特公布了自己从 Dropbox 公司离职的消息,并表示已经退休. ...

  4. 初步学习jquery学习笔记(五)

    jquery学习笔记五 jquery遍历 什么是遍历? 从某个标签开始,按照某种规则移动,直到找到目标标签为止 标签树 <div> <ul> <li> <sp ...

  5. P1142轰炸

    这是uva上的一道模拟题. 首先给出n(n<=700)个点的坐标(坐标在1*10^9)之内,询问走直线可以经过的点数.一开始我想到了一个类似于桶排序的方法来存坐标,但是要注意数组大小啊!第二次想 ...

  6. PythonDay12

    day12内置_函数 今日内容 生成器 推导式 内置函数一 生成器 什么是生成器?生成器的本质就是一个迭代器 迭代器是python自带的 生成器是程序员自己写的一种迭代器 生成器编写方式: 1.基于函 ...

  7. liunx 环境下安装 Eclipse C++

    第一步:首先安装JDK 进入JDK官网:https://www.oracle.com/technetwork/java/javase/downloads/index.html  下载对应的jdk 注意 ...

  8. Linux五大网络IO模型图解

    对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中.用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间 ...

  9. luogu P4076 [SDOI2016]墙上的句子

    luogu loj 题意看了我半天(逃 (应该是我语文太差了) 题意是要确定每一行和每一列的看单词的顺序,使得同时正着出现和反着出现在里面的单词数量最少,每行和每列的性质是这一行所有单词反过来的单词要 ...

  10. RS chap2:利用用户行为数据

    一.用户行为数据简介 1.用户行为在个性化推荐系统中分为两种: (1)显式反馈行为:包括用户明确表示对物品喜好的行为. (2)隐式反馈行为:不能明确反应用户喜好的行为. (3)显式反馈行为和隐式反馈行 ...