按键检测与消抖
按键检测是做项目时经常遇到的问题很多时候缺乏经验容易顾此失彼。个人梳理了一下技术点水平有限不足之处希望指出希望能和大家共同进步。1.按键检测我们这里以默认低电平按键按下读取到高电平来叙述按键按下检测比较稳妥的是边沿读取即读取电平之间的切换单纯的读取电平容易受肌肉抖动影响故现在按下读取应该读取低电平变成高电平这一过程uint8_t key_last 0;//上次电平 uint8_t key_now 0; if(key_last 0 key_now 1) { }2.按键消抖手指按下的时候会有抖动所以应该消抖消抖延时时间一般在20ms左右。注意这里最好采用非阻塞延时否则会影响外设上的其他功能tick放在中断中执行我这里中断是1ms执行1次根据需要调整就可以。另外MS_TO_TICK(ms)可以根据需要灵活调整#define MS_TO_TICK(ms) ((ms) * 1) uint32_t data tick 0; /* 系统时间戳单位1ms */ uint32_t xdata data_return 0; uint16_t xdata now; /* 判断是否过了指定毫秒数 */ uint8_t elapsed_ms(uint32_t start, uint32_t ms) { now tick; if(now start) { data_return now - start; } if(now start) { data_return 0xFFFF - start now 1; } return (data_return MS_TO_TICK(ms)) ? 1 : 0; }3.单击和长按的功能逻辑大家最想看的还是整体代码这里采用switch-case的结构有些地方应该没有定义在上面定义一下即可typedef enum { KEY_IDLE, KEY_DEBOUNCE, KEY_PRESS, KEY_HOLD } State; uint8_t Key_Scan(void) { uint8_t key_now KEY_PIN; switch(State) { case KEY_IDLE: { // 上升沿检测按下 if(key_last 0 key_now 1) { debounce_tick tick; state KEY_DEBOUNCE; } } break; case KEY_DEBOUNCE: { // 必须保持稳定高电平 if(key_now 1) { if(elapsed_ms(debounce_tick, 20)) { press_tick tick; state KEY_PRESS; } } else { state KEY_IDLE; } } break; case KEY_PRESS: { // 下降沿松开 if(key_last 1 key_now 0) { state KEY_IDLE; if(!long_flag) { key_last key_now; return KEY_SHORT; } } // 长按判断持续状态不依赖边沿 if(elapsed_ms(press_tick, LONG_PRESS_MS)) { long_flag 1; return KEY_LONG; } } break; } key_last key_now; return KEY_NONE; }4.功能拓展其实还可以在这个架构上增加例如双击之类的功能如果有需要可以自己尝试增加功能代码仅供参考如有问题欢迎提出

相关新闻

Mermaid Live Editor:让代码秒变精美图表的魔法编辑器

Mermaid Live Editor:让代码秒变精美图表的魔法编辑器

Mermaid Live Editor:让代码秒变精美图表的魔法编辑器 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor…

2026/6/17 21:49:51阅读更多 →
任天堂Switch大气层系统:解锁游戏主机的无限潜能

任天堂Switch大气层系统:解锁游戏主机的无限潜能

任天堂Switch大气层系统:解锁游戏主机的无限潜能 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要彻底释放你的任天堂Switch游戏潜力吗?大气层系统(A…

2026/6/17 21:49:51阅读更多 →
深度解析:iortcw项目的现代化改造与性能优化实战指南

深度解析:iortcw项目的现代化改造与性能优化实战指南

深度解析:iortcw项目的现代化改造与性能优化实战指南 【免费下载链接】iortcw Merge of ioquake3 features and fixes into RTCW code bases 项目地址: https://gitcode.com/gh_mirrors/io/iortcw iortcw作为《重返德军总部》开源项目的现代化演进版本&#…

2026/6/17 21:49:51阅读更多 →
独立开发者全栈实战:从Soloent模式到高效产品构建

独立开发者全栈实战:从Soloent模式到高效产品构建

1. 项目概述:从“Soloent”看个人独立开发者的生存之道最近在圈子里,一个叫“Soloent”的词被频繁提起。它不是什么新框架,也不是某个开源库,而是一种状态,或者说,一种开发模式的代名词。简单来说&#xff…

2026/6/17 23:15:13阅读更多 →
禅道项目管理软件完整安装指南:从零开始部署敏捷项目管理平台

禅道项目管理软件完整安装指南:从零开始部署敏捷项目管理平台

禅道项目管理软件完整安装指南:从零开始部署敏捷项目管理平台 【免费下载链接】zentaopms Zentao is an agile(scrum) project management system/tool, Free Upgrade Forever!​ 项目地址: https://gitcode.com/gh_mirrors/ze/zentaopms 禅道项目管理软件是…

2026/6/17 23:15:13阅读更多 →
【大连理工大学主办】第十届交通工程与运输系统国际学术会议(ICTETS 2026)

【大连理工大学主办】第十届交通工程与运输系统国际学术会议(ICTETS 2026)

第十届交通工程与运输系统国际学术会议 2026 10th International Conference on Traffic Engineering and Transportation System (ICTETS 2026) 2026年9月18日-20日 | 中国 大连 第十届交通工程与运输系统国际学术会议(ICTETS 2026)将由大连理工大学…

2026/6/17 23:15:13阅读更多 →
复杂视觉场景的理解与即时反馈测试

复杂视觉场景的理解与即时反馈测试

复杂视觉场景的理解与即时反馈测试 在多模态AI落地应用中,“看得懂”远比“认得出”更难——尤其当图像包含遮挡、低光照、多目标交互、文字图表混合、或需结合常识推理时。本次评测聚焦复杂视觉场景的理解能力与端到端响应延迟,以真实开发者视角&#x…

2026/6/17 23:15:13阅读更多 →
金刚石压砧材料革命:CVD单晶金刚石的优势与制备挑战

金刚石压砧材料革命:CVD单晶金刚石的优势与制备挑战

CVD单晶金刚石压砧是通过化学气相沉积技术合成的高纯度、大尺寸单晶金刚石,用于高压物理实验中替代传统多晶金刚石,显著提升压力极限、光学透明度和热稳定性,是高压科学领域的革命性材料。1. **CVD单晶金刚石的优势**:相比传统多晶…

2026/6/17 23:15:13阅读更多 →
【案例教程】FVCOM流域、海洋水环境数值模拟方法及实践技术应用

【案例教程】FVCOM流域、海洋水环境数值模拟方法及实践技术应用

第一章FVCOM水动力相关理论 1、主流海洋数值模式特点介绍(FVCOM、POM、HYCOM等) 2、不同坐标系下FVCOM控制方程推导 3、FVCOM水动力相关理论 4、FVCOM水动力、温盐方程求解过程推导 5、FVCOM有限体积法介绍 第二章Linux系统下FVCOM运行环境搭建 1、虚拟机安装及配置详解…

2026/6/17 23:10:12阅读更多 →
飞书机器人接入 OpenClaw 完整落地部署指南(含安装包)

飞书机器人接入 OpenClaw 完整落地部署指南(含安装包)

OpenClaw 2.7.9 对接飞书机器人完整配置教程 本文讲解借助长连接模式打通 OpenClaw 与飞书的操作流程,配置完成后,可在飞书私聊、群组内发送指令,调用本地 AI 实现电脑自动化操作。整体流程分为飞书平台创建应用、权限配置、密钥填写三大环节…

2026/6/17 10:40:20阅读更多 →
嵌入式处理器技术演进与飞思卡尔实战解析:从架构选型到系统设计

嵌入式处理器技术演进与飞思卡尔实战解析:从架构选型到系统设计

1. 嵌入式处理器:从“大脑”到“神经系统”的进化 在电子设备无处不在的今天,我们很少会去思考一个智能设备是如何“思考”和“行动”的。无论是汽车引擎的精准控制、工厂机械臂的流畅运转,还是智能家居的自动响应,其背后都离不开…

2026/6/17 10:40:20阅读更多 →
如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南

如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南

如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地…

2026/6/17 10:40:20阅读更多 →