按键检测与消抖
按键检测是做项目时经常遇到的问题很多时候缺乏经验容易顾此失彼。个人梳理了一下技术点水平有限不足之处希望指出希望能和大家共同进步。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/22 23:44:06阅读更多 →
任天堂Switch大气层系统:解锁游戏主机的无限潜能

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

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

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

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

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

2026/6/23 1:08:42阅读更多 →
OpenClaw 四大部署方式深度对比:Docker/Podman/Nix/Ansible 实战指南

OpenClaw 四大部署方式深度对比:Docker/Podman/Nix/Ansible 实战指南

1. OpenClaw 是什么,以及为什么它的安装方式值得单独写一篇长文OpenClaw 这个名字在最近半年的开发者社区里出现频率陡增,但和很多新兴开源项目一样,它没有一个被广泛接受的“官方中文定义”。从 GitHub 仓库的 README、Issue 讨论区、以及实…

2026/6/23 4:31:44阅读更多 →
第20章:RAG进阶——切分、召回、重排与答案校验

第20章:RAG进阶——切分、召回、重排与答案校验

1. 项目背景 业务场景 第12章搭建的基础RAG系统已经运行了一个月,技术知识库从500份文档增长到了3000份。但用户投诉开始增多: 维修工程师老张搜索"液压系统压力不稳定",系统返回的前三条结果是"轮胎气压检查"“润滑油压力”“水管压力测试”——全不…

2026/6/23 4:31:44阅读更多 →
嵌入式调试器组件交互与拖放操作实战指南

嵌入式调试器组件交互与拖放操作实战指南

1. 嵌入式调试器组件交互操作深度解析 在嵌入式开发的日常里,调试器就是我们的“第三只眼”和“第二双手”。它不仅仅是用来设个断点、看看变量值那么简单。一个高效的调试器,其价值往往体现在各个组件窗口之间能否丝滑地“对话”与“协作”。今天&#…

2026/6/23 4:31:44阅读更多 →
高效自动化工具:深入解析开源项目的5大核心特性

高效自动化工具:深入解析开源项目的5大核心特性

高效自动化工具:深入解析开源项目的5大核心特性 【免费下载链接】biliTickerBuy b站会员购购票辅助工具 项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy biliTickerBuy是一款开源的B站会员购自动化工具,专为技术开发者和有一定…

2026/6/23 4:31:44阅读更多 →
Gemini 3 Flash:企业级多模态AI工作流的工程化实践

Gemini 3 Flash:企业级多模态AI工作流的工程化实践

1. 项目概述:这不是又一个“更快的模型”,而是企业级AI工作流的重新定义Gemini 3 Flash 这个名字一出来,很多人第一反应是:“哦,又一个推理速度更快的轻量版模型”。但如果你真这么想,就完全错过了它背后最…

2026/6/23 4:31:44阅读更多 →
当C盘变红时,Windows Cleaner如何成为你的系统救星

当C盘变红时,Windows Cleaner如何成为你的系统救星

当C盘变红时,Windows Cleaner如何成为你的系统救星 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾经历过这样的场景:正在紧急处理…

2026/6/23 4:26:44阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/22 6:01:42阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/22 5:42:46阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →