首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何实现按键短按、长按检测

原理图中有一个NC的C5,但是实际板子上我却没有找到它,可能是版本不一致。...尤其是这里的BLE应用,在中断服务函数中执行时间会引起蓝牙连接中断,所以这里不能这么用,我实际测试当按键按快一点就很容易引起蓝牙连接中断。...以上介绍了使用中断的方式来判断按键短按,可以看到它判断的依据是按键按下(由高电平变到低电平)这个状态。下面在方法二的基础上我们来实现长按的检测,判断长按的依据是按下后持续的维持一段时间低电平。...START_LONGCHECK_TIMER ); } return (events ^ START_LONGCHECK_TIMER); } 实现的逻辑是:当检测短按时...它兼顾了去抖和短按/长按的检测,并且长按可以判断出长按按下/长按弹起。短按检测到弹起时认为是短按动作。另外如果想同时支持多个长按,也很方便添加。

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

C语言 | 文件读写检测

“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...ferror函数 C语言提供一些函数用来检测输入输出函数调用时可能出现的错误。 一般形式 ferror(fp) //如果ferror返回值为0(假),表示为出错;如果返回一个非零值,表示出错。...应该立即调用clearerr(fp),使ferror(fp)的值变成0,以便再进行下一次的检测

1.3K20

STM32按键状态机3——增加双击与功能优化

上篇文章:STM32按键状态机2——状态简化与增加长按功能,介绍了将按键检测增加长按功能,并将按下抖动与松开抖动共用一个抖动状态来表示,其状态图如下: 仔细研究这个状态图,其它还存在一些问题: 短按状态...,只要按下去,不需要等按键再释放,就会触发短按事件。...对于需要按下再松开作为一次短按的应用来说,此状态图也不满足需求 长按状态,必须先经过短按状态,即长按按键,会先触发一个短按,再触发一个长按。...如果实际应用中需要分别使用短按和长按,则此状态图不满足要求 本篇,就来解决上述两个问题,并再增加一个按键双击检测,实现一个功能更全面的按键检测。...1 增加双击检测 增加一个双击检测,需要增加两个状态: 等待再次按下 确认第2次按下 同时,之前的“短按状态”和“长按状态”分别改为“确认按下”和“确认长按”。

70510

驱动库分享整理(1)——用于单片机中的小巧多功能按键支持库

0x1abin/MultiButton  官网 https://zhuanlan.zhihu.com/p/128961191 比较详细的移植文档 2==、 FlexibleButton:是一个基于标准C语言的小巧灵活的按键处理库...,支持单击、连击、短按、长按、自动消抖,可以自由设置组合按键,可用于中断和低功耗场景。...核心的按键扫描代码仅有三行,没错,就是经典的 三行按键扫描算法。使用C语言标准库API编写,也使得该按键库可以无缝兼容任意的处理器平台,并且支持任意 OS 和 non-OS(裸机编程)。...2、移植只需修改key_app.c,具体修改地方已在注释中注明,主要是按键初始化函数和提供按键状态函数。主要移植文件为key.c,key_app.c和ringbuff.c。      ...具体过程:就是检测相应按键,只有按键在松开后才被认为是一次有效按键,每次按键只执行一次用户相应的操作。 本按键扫描程序可轻松支持这两种模式。

93810

基于事件型表驱动法菜单框架之小熊派简易气体探测器实战项目开发(上)

废话不多说,先上视频,配合个人简单的讲解,看看具体的展示效果: 关于表驱动,之前也分享过一篇文章: C语言表驱动法编程实践(精华帖,建议收藏并实践) 两年前,我也曾在Github上开源过一个基于结构体数组的表驱动菜单框架...2、核心框架结构 先来看下这个框架的核心数据结构与操作方法,位于该项目的menu.h、menu.c menu.h typedef void (*menu_op_func)(uint8_t); typedef...项目基于开源软件定时器multi_timer进行维护管理: (1)Key_Timer定时器用于按键短按的扫描 (2)DataTime_Timer定时器用于实时时钟显示 (3)Test_Timer定时器用于核心检测逻辑实现...3.1、按键交互逻辑 其中,在主页面中,通过短按按键可以横向切换菜单项,通过短按右键可以进入菜单项,分别为: 测试(核心检测逻辑) 上传(未实现) 版本(查看版本信息) 在不同页面中,可以根据界面提示退出回到主菜单...在测试页面任一状态下,长按左键直接显示安全,短按右键退出回到主菜单。

89420

【问题】按键长按短按demo

大意如下:识别独立按键的长按,短按,通过长按和短按来控制LED的显示方式,短按点亮LED,长按让LEd闪烁。...既然是最简单的方式,就不去考虑程序的结构性,时效性,不用中断,不用定时器,就用最最简单的延时方式去检测按键。...//后续通过判断这个累加值的大小判断长按还是短按 while(!...简单分析一下,采用最简单演示二次检测法去识别按键是否按下,如果按键被按下后,采用while()等待按键释放,在等待的过程中采用10ms延时等待后去循环的对变量实现加1计数。...等到按键释放后再去判断等待过程中的计数值,在本例中,计数值大于120就认为是长按发生,不然就认为是按键短按。这里的计数值为120,实测时间约为2.5左右。 总结 ?

68020

嵌入式C语言实现事件型按键驱动

本项目是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。...; 2.初始化按键对象,绑定按键的GPIO电平读取接口read_button_pin() ,后一个参数设置有效触发电平 button_init(&button1, read_button_pin, 0,...if(timer_ticks == 5) { timer_ticks = 0; button_ticks(); } } 2、特性 本项目使用C语言实现,基于面向对象方式设计思路...3、按键事件 事件 说明 PRESS_DOWN 按键按下,每次按下都触发 PRESS_UP 按键弹起,每次松开都触发 PRESS_REPEAT 重复按下触发,变量repeat计数连击次数 SINGLE_CLICK...单击按键事件 DOUBLE_CLICK 双击按键事件 LONG_PRESS_START 达到长按时间阈值时触发一次 LONG_PRESS_HOLD 长按期间一直触发 4、示例 #include "button.h

27410

JK405R-SOP16录音芯片ic方案的常见问题集锦包含录音长度功耗以及外挂spiflash2

答疑KT405R是一颗专用于录音的芯片,芯片内置30秒的语音空间,直驱扬声器,也可以设置dac输出外挂功放2、支持按键控制,也可以扩展IO触发控制3、操作也是很简单,短按播放,长按录音,抬起停止录音4、...芯片支持订制各种功能,非常的灵活KT405R是一颗专用于录音的芯片,芯片内置30秒的语音空间,直驱扬声器,也可以设置dac输出外挂功放2、支持按键控制,也可以扩展IO触发控制3、操作也是很简单,短按播放...功耗是4mA==》芯片一旦检测到5秒没有任何操作,自动进入超低功耗待机,待机电流2uA==》一旦有外部信号触发,芯片就唤醒,全速跑,并且处理触发的信号问题44、KT405R支持多段录音吗?...答疑因为芯片的内置空间非常的有限,只能录30秒 .而有些场合不够,所以增加了外挂spiflash外挂spiflash是自适应的,芯片上电检测到外挂的spiflash,就自动切换到外挂模式 。...没检测到就自动使用内置的空间外置根据容量来,25Q80.,是1MByte,大概录70秒 ,其他容量的可以自行换算一下问题66、KT405R的dac输出,和直驱扬声器?

13110

c语言智能车跑道检测程序,基于金属检测的智能循迹小车设计

3 软件系统的设计 3.1 检测与控制算法 上电后,先检测传感器返回的数值并保存,不同环境下传感器返回的数值会不同。...5 结 语 本文设计利用LDC1000电感数字转换器,使其工作在高频反射式电涡流传感器状态,对金属进行检测,运用STM32和STC51两种芯片,触发外围模块,实现小车的循迹和硬币检测。...20. [2] 吕云芳,陈帅帅,郝兴森,等.基于C51高级语言程序控制的智能循迹小车设计与实现[J].实验室研究与探索,2015,34(3):142?145. L?...Design of intelligent tracking car based on STC90C52 [J]....发布者:全栈程序员栈,转载请注明出处:https://javaforall.cn/134417.html原文链接:https://javaforall.cn

87720

利用状态机编程学习触摸屏

用中断检测PENIRQ引脚,当产生下降沿中断时就去读取坐标。但是触摸屏也会象按键一样发生抖动,会产生很多上升沿或下降沿,会引起误判。...这里我们使用状态机的方式去处理,使用状态机还有一个好处就是可以很方便的去判断长按,短按,双击等状态。   ...当触摸屏有触点按下时,PENIRQ 引脚会输出低电平,直到没有触摸的时候,它才会输出高电平;而且 STM32 的中断只支持边沿触发(上升沿或下降沿),不支持电平触发,在触摸屏上存在类似机械按键的信号抖动...如果在PRESSED状态再来检测可以检测触摸是否是一直被按下,这时候可以判断长按或短按。...  u8 touch_dectect(void); //用状态机编程进行处理   2. touch.c文件   //用状态机编程处理触摸屏操作   //检测:触摸屏的按下和释放   #define

59120

c语言之——整型的隐式转换与溢出检测

溢出检测 我们可以通过下面的方式来检测溢出: if(a > INT_MAX - b) { printf("overflow\n"); } 我们利用整型的最大值减去其中一个数,然后与另一个数进行比较...当然,我们还可以通过下面的方式来检测: if((unsigned int)a + (unsigned int)b > INT_MAX) { printf("overflow\n"); } 将两个数都先转换成无符号数进行计算...尽量避免 虽然我们有方法来检测溢出,但是我们建议的是尽量去避免溢出的发生。...当然对于不可避免的可能发生溢出的情况,我们需要进行检测并进行后处理,而非忽略。 总结 对于整型隐式转换和溢出相关内容,我们做一个总结: 避免有符号数和无符号数直接进行算术运算。

1.4K30

WIFI DTU产品设计与实现(基于STM32F103+QT配置上位机案例设计分享)

缺点: 1、对于初学或者无模组 SDK 经验的开发者来说不太友好,正所谓专业的人做专业的事,想 要随时上手任何一款通信模组的 SDK 短时间内很难上手,模组的SDK 多种多样,有用C语言开发的,有用 C...++开发的,Lua 语言开发的等等,复杂多化。...STATE_D.ESP32_State == DTU_PassthroughMode)//系统配置模式灯显示 { LED_SetColor(0, 1, 1); //设置颜色为紫色 } 当用户短按按键时...,进入系统存储配置检测模式,此时判断在系统初始化时读取FLASH的参数的参数,如果没有相应的参数,则用户需要长按按键切换到配置模式进行参数设置。...\r\n"); DEBUG("可以长按进入配置模式\r\n"); DEBUG("配置成功后短按退出配置模式\r\n");

1.6K30
领券