巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)
在做嵌入式产品时按键是最常用的输入信号了,按键多的时候我们可以实现很多的功能,有时候资源不够,但又需要实现较多的功能时,这就需要按键复用了,常常一个按键包含短按,长按,或者双击,N击,赋予不同的功能,这和具体项目有关。我们通常做的方法是识别I/O引脚电平,然后加以适当防抖处理,那么简单的按键单击功能就可以实现了。但当功能复杂时,这种处理方法就显得比较捉襟见肘了。比如:
1>想同时实现单击,和双击?
这时候就要加入一些时间检测。
2>同时短按和长按?
这时也要加入时间检测,在进一步,我想检测到长按时按键按下的过程中程序并没有一直停在按键检测循环里,而是一直在运行,识别到长按后,立刻执行相应动作。
3>同时实现短按,长按,以及多击(双击及以上)?
这个感觉就比较复杂了,其实原理都差不多,这里我们需要额外使用一个计数更新定时器,来作为时间检测。如果我们用的是操作系统的话,那么就可以创建一个按键扫描任务,每间隔固定时间扫描一次按键,然后获取按键值打包成消息发送出去。具体过程我不多说,原理很简单,主要是实现方法,大家看我的代码就会很明白了。
G_My_Key为全局变量。
如有描述不详或错误之处,大家一起讨论,谢谢!
巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)相关推荐
- 双偶幻方的c语言算法,单偶阶、双偶阶幻方的巧妙填法
单偶阶.双偶阶幻方的巧妙填法 单偶阶.双偶阶幻方的巧妙填法 人气:150 ℃时间:2019-12-07 19:18:09 优质解答 一.双偶幻方的解法 能被4整除的n阶幻方叫双偶幻方,如8阶.12阶. ...
- 按键检测框架单击-双击-连按
说明 本示例用的stm32 按键是接地有效 特别设置按键拉高 按键事件循环50ms一次调用 电路图 按键检测思路 按键按下检测:检测当前本状态是否和上一次状态一致,不一致消抖完成的情况下,当前电平和按 ...
- STM32独立按键实现单击双击长按功能
目录 前言 一.按键功能定义 二.使用步骤 1.按键初始化 2.按键扫描函数(重点) 总结 前言 在使用STM32或其他单片机开发项目时,经常需要用到独立按键进行控制. 通常一个独立按键需要使用一个I ...
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
看了一个晚上,结合了马潮老师的书,才搞懂这个程序,确实经典!原文: 题目:多功能按键设计.利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按. (amobbs.com 阿莫电子论坛 ...
- STM32学习笔记(一)stm32c8t6实现按键的单击、连击、长按。
记录一下自己学习的过程 1.硬件连接 用的是c8t6的最小系统板,通过面包板连接按键,将PB11口用作按键输入.同时还连接了一块oled的屏方便查看现象. 2.代码部分 核心思想和代码总体框架来自博客 ...
- 编写一个用户类(Sysuser),属性包括用户名、真实姓名、年龄、出生日期、密码,类方法中包含单独修改用户年龄、判断用户名和密码、显示用户信息功能,在用户测试类中(TestSysuser),根据用户输
#本关任务: 编写一个用户类(Sysuser),属性包括用户名.真实姓名.年龄.出生日期.密码,类方法中包含单独修改用户年龄.判断用户名和密码.显示用户信息功能,在用户测试类中(TestSysuser ...
- access give to翻译_法律英语中access to的巧妙译法
access to , 大家都知道,其最基本的意思是 1. 接近或进入的机会:接近或进入的权利: 2. 接近:进入: 3. 通往 ...... 的道路 但是, 我们会发现, 当其用在特定语言环境中时, ...
- [AHK]为通达信软件定义快捷键(发送按键法)
#SingleInstance force;为通达信软件定义快捷键#IfWinActive, ahk_class TdxW_MainFrame_Class ahk_exe TdxW.exeSpace: ...
- bios密码解锁软件_YOGA14S解锁BIOS后进阶玩法—包含性能提升10%—20%
自从看联想YOGA14S可以解锁BIOS之后,可玩性就高了很多.爬了几天贴,自己也实践了一下. 给大家做一个总结. 目录: 一.解锁BIOS 二.如何修改显存 三.降低内存延时 四.修改内存时序 五. ...
- 自制导航App(包含地图、定位、自定义marker、路线制定、模拟导航等功能)
高德地图路线导航制作 转载请注明出处:https://blog.csdn.net/Dreamer_man/article/details/104193832 由于公司项目需求,特地去官网,重新温习了一 ...
最新文章
- Django项目知识点(五)
- sqlite性能优化
- 学会用taro封装一个组件
- 2-jQuery - AJAX load() 方法【进阶篇】
- 如何学习matlab 知乎,知乎日报
- HDU 1686 Oulipo【kmp求子串出现的次数】
- WinAPI【远程注入】利用远程线程注入DLLDelphi版
- 倒计时2天!1024 程序员节全日程曝光,105 场深度演讲点燃数字经济新时代
- 【Oracle】创建角色
- HDU 4293 Groups (线性dp)
- android原生系统怎么下载地址,安卓全机型原生官方ROM下载地址
- insightface 的学习与使用
- pycharm 自定义区域折叠代码
- 什么是即时通讯?即时通讯的发展
- 使用 AES 对称加密算法对视频文件进行加密解密(C++ 及 Java 实现)
- php话费充值接口,手机话费充值接口
- Cannot find module lint-staged 解决办法
- python修改误差棒的样式_matplotlib可视化番外篇bar()--带误差棒的柱状图
- DirectUI学习笔记(1)
- Android使用https链接