目录

一、长按与短按

二、单击与双击


一、长按与短按

在按键按下的时候,即key_down下降沿开始计时。给定一个计时时间,如果在这个计时时间之内检测到了key_up上升沿,即按键松开,则为短按。如果在这个定时时间内没有检测到key_up上升沿,则为长按。

uint8_t Key_Scan(void)
{uint8_t val=0;if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)==0)val =1;if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)==0)val =2;if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2)==0)val =3;if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)==0)val =4;return val;}void key_proc(void)
{if(uwTick - key_uwTick<50)return ;key_uwTick = uwTick;key_val = Key_Scan();key_down = key_val & (key_old^key_val);key_up = ~key_val & (key_old^key_val);key_old = key_val;if(key_down){key_time_uwTick = uwTick;}if(uwTick-key_time_uwTick<1000) // 短短{switch(key_up){case 1:ucled =0xff;break;case 2:ucled =0x0;break;}}else    // 长按{switch(key_val){case 1:ucled =0;break;case 2:ucled =0x01;break;}}
}

注:按键返回值一定要初始化为0。

二、单击与双击

在第一次按键按下的key_down下降沿开始计时,给定一个计时时间,如果在这个计时时间之内检测到了key_up上升沿(代表按键松开),则为短按。如果在这个定时时间内没有检测到key_up上升沿,则为长按。

void key_proc(void)
{if(uwTick - key_uwTick<50)return ;key_uwTick = uwTick;key_val = Key_Scan();key_down = key_val & (key_old^key_val);key_up = ~key_val & (key_old^key_val);key_old = key_val;if(key_up)//当第一次按键按下抬起时{key_temp=key_up;  //记录按键按下抬起后的键值if(key_down_num == 0){key_down_num = 1;  //记录第一次按键已经按下key_time_uwTick = uwTick; // 开始计时}else   //如果检测到双击后的第二次上升沿 将按键按下次数清理 以便于判断下一次按键的单击-双击key_down_num=0; }if(key_down_num == 1)//当第一次按下并抬起时{if(uwTick - key_time_uwTick >= 1000)  //当按键按下1s时间后没有检测到第二次按键按下-单击{switch(key_temp){case 1:ucled =1;break;case 2:ucled =0;break;}key_down_num =0; // 清零 以便下一次判断按键类型}else  //按键在1s内检测到按键按下-双击{switch(key_down){case 3:ucled = 1;break;case 4:ucled = 0;break;   }}}
}

独立按键之长按、短按、单击、双击相关推荐

  1. STM32-蓝桥杯嵌入式之三行按键检测(按键的长、短,单击、双击)

    STM32-蓝桥杯嵌入式之三行按键检测(按键的长.短,单击.双击) 目录 STM32-蓝桥杯嵌入式之三行按键检测(按键的长.短,单击.双击) 一.检测按键下降沿分析 二.检测按键上升沿分析 三.按键检 ...

  2. 单片机独立按键模块(含短按,长按,连发功能)

    最近看了很多按键扫描的文章,发现各有长处,后来自己花了一点时间做了一个单片机独立按键扫描的模块,此模块优点颇多,支持短按,长按,连发功能,只要配置相关结构体就可以实现这些功能,唯一的缺点是不支持多按键 ...

  3. 蓝桥杯电子类单片机组模块——独立按键(长按与短按)

    蓝桥杯单片机组对按键模块的考察不仅仅会涉及到普通的按键扫描,还有可能设计到一些按键的高级用法:按下与松开.长短按等. 现在,我们介绍一下按键"长短按"功能的实现方法. 1.要使用独 ...

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

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

  5. 按键的拓展:长按短按 (2)

    上一篇文章中,按键的长按短按是按照 短按--第一次长按--第二次长按,按顺序来的. 但是今天重读考题发现,考察的不是按顺序先短按,后长按一个一个来:而是对按下时间长短有一个判断:比如说:只要按下按键, ...

  6. 51单片机独立按键长按与短按(长按触发连发功能)以及双击功能

    独立按键的长按.短按与双击的判断,运用了状态的分析,短按和长按的区别为按键按下的时间不同所以从短按状态到长按状态的条件为按键按下的时间超过设定的长按时间,而二者的共同点为:按键只按下一次.而双击与前者 ...

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

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

  8. 三行代码按键消抖 独立按键 矩阵按键 长按 短按 双击

    九层妖塔 起于垒土 直接跳转到三行代码 三行代码按键消抖 独立按键 矩阵按键 长按 短按 双击 一.基本理论 0.按键的常见名词:  ①按键抖动  ②按键稳定闭合时间 1.按键的扫描: 2.按键的消抖 ...

  9. 单片机基础:详解独立按键实现单击、双击、长按

    文章目录 前言 一.明确需求 二.需求的实现过程,采用分层思想去实现(分层思想可参考网上资料去了解) 1.低层按键(I/0)扫描函数,即低层按键设备驱动,只返回无键.短按和长按.具体双击不在此处判断. ...

最新文章

  1. java jsch_java使用JSCH实现SFTP文件管理
  2. 有没有将深度学习融入机器人领域的尝试?有哪些难点?
  3. oracle视图能增删改,oracle视图的增删改
  4. vue ...mapMutations 的第一个参数默认为 数据对象state
  5. 知识图谱 (知识计算推理)
  6. 计算机求职意向范文,自我评价与求职意向范文3篇
  7. NET CMS 大全
  8. c语言中sizeof是一个标准库函数,对C语言中的sizeof的介绍分析
  9. 如何获取foreach循环当前迭代的索引?
  10. 2021高考河北省艺术类成绩查询,2021河北省艺术类高考专业考试成绩有关规定
  11. 基于Springboot的理财系统
  12. 多个if-else语句执行顺序、if-else与if-else if-else不同执行顺序、switch执行顺序
  13. 版本号后面的字母含义
  14. XML的四种解析方式
  15. 华东师范大学夏令营复习计划总结
  16. 手机背景图片被删除怎么恢复
  17. 投资理财-基金基本术语概念整理
  18. 同样是VPS,为什么RAKsmart更受欢迎
  19. 2020年国内外值得关注的15家PaaS平台与SaaS厂商!
  20. 医咖会免费STATA教程学习笔记——单因素方差分析

热门文章

  1. 在家享受专业跑道,安全跑步高效健身,华为智选赤兔跑步机H1体验
  2. app测试中,安卓和IOS有哪些区别(持续补充ing)
  3. bigemap手机版app如何加载矢量数据
  4. Scrapy爬取豆瓣读书全站
  5. 当Excel遇到在线表格,看如何轻松解决办公难题 ?
  6. ffmypeg 视频处理类库使用方法
  7. 手把手教你如何电脑安装android,怎么在电脑上玩android游戏?安卓模拟器怎么安装?...
  8. 全网热议的云原生技术到底什么?看完这25点你就知道了
  9. Maven插件之versions-maven-plugin
  10. Word VBA自动排版(2)-通过自动查找替换去除叠字