按键函数:实现单击、双击、长按

  1. 按键按下时长超过1.5S,认为是长按事件。
  2. 连续两次按下时间间隔不超过350ms,认为是双击事件。
  3. 除以上两条,按键按键都属于单击事件。

废话不多说,直接上代码。如有问题,欢迎评论区讨论。


/* 此函数是1ms运行一次 所以时间单位为1ms */
#define KEY_LP_TIME      1500  /* 长按时间       单位 ms                  */
#define KEY_DOUBLE_TIME  350   /* 两次按下间隔不超过此值为双击事件 */uint8_t  KEY1_LP_FLG;    /* 按键长按标志                   */
uint8_t  KEY1_PR_FLG;    /* 按键按下标志                   */uint8_t  Key1LtDelay;    /* 按键抬起消抖时间               */
uint8_t  Key1PrDelay;    /* 按键按下消抖时间               */
uint8_t  Key1PrCnt;      /* 按键按下次数计数 检测双击      */
uint16_t Key1PrTimeCnt;  /* 连续两次按下时长计数 检测双击  */
uint16_t Key1PrTime;     /* 按键按下时长计数 检测长按      */void Key1Scan(void){ //1ms扫描一次if(KEY1 == 0){Key1LtDelay = 0;if(!KEY1_PR_FLG){Key1PrDelay++;if(Key1PrDelay>20){Key1PrDelay = 0;KEY1_PR_FLG = 1;/********** User Code **********/Key1PrCnt++;                       /* 计数按下次数 */if(Key1PrCnt>2){ Key1PrCnt = 0; }  KEY1_LP_FLG = 0;Key1PrTime  = 0;/************* End *************/}          }}else{Key1PrDelay = 0;if(KEY1_PR_FLG){Key1LtDelay++;if(Key1LtDelay>20){Key1LtDelay = 0;KEY1_PR_FLG = 0;/********** User Code **********/KEY1_LP_FLG = 0;     /* 抬起按键轻触长按标志 *//* 当按键按下但是超过双击检测时间 未达到长按时间 此时认为是一个单击事件 */if(Key1PrTime >= KEY_DOUBLE_TIME){//单击事件}/************* End *************/              }}      }//长按检测if(KEY1_PR_FLG){if(!KEY1_LP_FLG){Key1PrTime++;if(Key1PrTime >= KEY_LP_TIME){Key1PrTime = 0; KEY1_LP_FLG = 1;  /* 长按1.5S 置位长按标志 *//********** User Code **********///长按事件/************ End *************/}}}//双击检测if(Key1PrCnt==1){ if(Key1PrTimeCnt < KEY_DOUBLE_TIME){ Key1PrTimeCnt++;   }else{if(!KEY1_PR_FLG){ //单击事件}Key1PrTimeCnt = 0;Key1PrCnt     = 0;}}else if(Key1PrCnt==2){if(Key1PrTimeCnt < KEY_DOUBLE_TIME){//双击事件}Key1PrCnt     = 0;Key1PrTimeCnt = 0;}
}

单个按键,实现单击+双击+长按相关推荐

  1. STM32独立按键实现单击双击长按功能

    目录 前言 一.按键功能定义 二.使用步骤 1.按键初始化 2.按键扫描函数(重点) 总结 前言 在使用STM32或其他单片机开发项目时,经常需要用到独立按键进行控制. 通常一个独立按键需要使用一个I ...

  2. 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按

    看了一个晚上,结合了马潮老师的书,才搞懂这个程序,确实经典!原文: 题目:多功能按键设计.利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按. (amobbs.com 阿莫电子论坛 ...

  3. Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按

    Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按 拖拽物体 using System.Collections; using System.Collections.Generic; ...

  4. 【按键你不知道的那些事】简单几句话实现按键按下下、长按、抬起、单击、双击动作

      闲来没事整理一下文档.这一篇我们来讲一讲按键的各种触发事件.   下面我给大家简单介绍一下有哪些按键检测的方式. 方式1 阻塞式检测按键 void KeyScan(void) {if(HAL_GP ...

  5. STC15单片机-按键检测单击、双击和长按(状态机)

    按键检测(状态机) 传统的按键检测 在单片机的应用中,利用按键实现与用户的交互功能是相当常见的,同时按键的检测也是很讲究的,众所周知,在有键按下后,数据线上的信号出现一段时间的抖动,然后为低,当按键释 ...

  6. Android 单击+双击+短按+长按 逻辑

    ACTION_DOWN事件 ->mPrivateHandler.sendEmptyMessageDelayed(SWITCH_TO_SHORTPRESS, TAP_TIMEOUT) 发延迟处理的 ...

  7. 记录C语言学习【单个按键之长按+短按】

    最近学习C语言,偶然看到一句话很是赞同. 学会了的境界: 境界1是自己看会了: 境界2自己独立做出来了: 境界3自己可以独立做出来,并描述出来了: 境界4可以把别人教会了. 初学单片机C语言,本按键程 ...

  8. STM32学习笔记(一)stm32c8t6实现按键的单击、连击、长按。

    记录一下自己学习的过程 1.硬件连接 用的是c8t6的最小系统板,通过面包板连接按键,将PB11口用作按键输入.同时还连接了一块oled的屏方便查看现象. 2.代码部分 核心思想和代码总体框架来自博客 ...

  9. 矩阵按键 进行单击建识别 灵敏度0.5s

    添加链接描述接着上篇文章,验证了矩阵键盘的识别,采用定时器加状态机进行判断 因为时间的关系,我没有调出来组合按键的识别,如有哪位大佬有新的想法,欢迎交流. .c文件 /* 模块名称 : 独立按键驱动模 ...

最新文章

  1. linux Json c++库
  2. Oracle 树操作(select…start with…connect by…prior)
  3. Python学习 - 之 数据封装和私有属性
  4. PhpCms V9调用指定栏目子栏目文章的两种方法
  5. 汉诺塔V - ACM解决方法
  6. chrome vue插件_不容错过的 Chrome 插件推荐合集-开发者必备篇
  7. 前端性能监控方案window.performance 调研(转)
  8. 终极算法——第二章:终极算法
  9. 邮件安全防护之反垃圾邮件开源软件ASSP
  10. 多次调用 BAPI 之后,最后一次性 COMMIT WORK,会有什么问题吗?
  11. Global Industry Analysts称全球MSS市场在2017年达到112亿美元
  12. presto日期转换及计算
  13. [转发]猎人与鸟---- 对人生很重要的一个寓言故事
  14. 关于background背景和img图片
  15. 保健用品行业智慧供应链管理系统:高度整合产业链资源,精细化企业供应商管理
  16. java基础----数据类型
  17. 1870899-46-9,DBCO-PEG5-acid,DBCO-PEG5-COOH,二苯并环辛炔-五聚乙二醇-羧酸
  18. 使用xxtea加密或者解密文件
  19. 邮箱正则表达式 带分号
  20. 各种效应001---乒乓效应在软件中的体现_孤岛效应

热门文章

  1. 2022年全球与中国室温硫化硅橡胶市场现状
  2. BTRFS - Performance
  3. 互联网是怎么形成的?
  4. html5 网络断开,网络连接频繁断开是怎么回事
  5. Wannafly挑战赛26 B-冥土追魂(枚举)
  6. 解决package jdk1.8-2000:1.8.0_171-fcs.x86_64 is already installed问题
  7. VPN服务器配置、路由服务器配置、视频服务器配置、DNS服务器配置、DHCP服务器配置、E-mail服务器配置、FTP服务器配置、Web服务器配置、证书服务器配置及管理
  8. <Zhuuu_ZZ>HIVE(十一)函数
  9. linux系统的云服务器挂软件方法,基于centos的Linux挂站教程
  10. hashmap的扩容机制,腾讯Android开发面试记录,系列篇