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

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

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

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

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

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

2026/6/25 1:45:20阅读更多 →
工业级多维聚合:银行级pandas生产实践指南

工业级多维聚合:银行级pandas生产实践指南

1. 项目概述:为什么多维聚合不是“加个groupby”就能搞定的事我在银行风控部门做过三年数据管道开发,后来跳槽到一家头部支付机构做BI平台架构。这期间最常被业务方拍着桌子问的一句话是:“上个月华东区餐饮类商户的交易金额中位数、手续费波…

2026/6/25 22:52:06阅读更多 →
【古人智慧】搞技术必须知道古代金句

【古人智慧】搞技术必须知道古代金句

最近读了一本书《盐铁论》,这是一本汉武帝跟大臣讨论如何治理国家的论策,同时还涉及到当时的儒家与法家的思想之争。 我摘抄了一些金句,很多都非常有启发跟借鉴意义。斗胆跟大家分享一下: 圣人因天时 智者因地财 上士取诸人 中士劳…

2026/6/25 22:52:06阅读更多 →
Tacent View:终极图像查看器,游戏开发者的专业纹理处理神器

Tacent View:终极图像查看器,游戏开发者的专业纹理处理神器

Tacent View:终极图像查看器,游戏开发者的专业纹理处理神器 【免费下载链接】tacentview An image and texture viewer for tga, png, apng, exr, dds, pvr, ktx, ktx2, astc, pkm, qoi, gif, hdr, jpg, tif, ico, webp, and bmp files. Uses Dear ImGui…

2026/6/25 22:52:06阅读更多 →
电商售后太难搞?实测AI智能体,全链路无人化处理的避坑与落地指南

电商售后太难搞?实测AI智能体,全链路无人化处理的避坑与落地指南

摘要 2026年,电商行业的竞争已从前端流量争夺转向后端服务效率的肉搏。面对海量咨询、跨系统退换货流程及资金结算合规等痛点,传统“人工机器人”模式已难以为继。本文立足2026年企业级AI服务视角,深度测评实在Agent在电商全链路售后场景下的…

2026/6/25 22:52:06阅读更多 →
【2026最新】NVM安装使用保姆级教程|告别Nodejs版本冲突,新手必看!

【2026最新】NVM安装使用保姆级教程|告别Nodejs版本冲突,新手必看!

NVM 是用于管理电脑本地 Node.js 运行环境的轻量级命令行工具,能兼容电脑上所有的 Node.js 版本。 有了 NVM,只要输入一行简单的命令,那么使用哪个版本的 Node.js 就可无缝切换到哪个版本的 Node.js,彻底解决掉 Node 版本冲突的问…

2026/6/25 22:52:06阅读更多 →
宝宝照片视频一键同步长辈|2026实测最优工具

宝宝照片视频一键同步长辈|2026实测最优工具

一、宝妈隔代分享宝宝影像常见痛点(一)核心痛点1.微信转发压缩画质,高清原图直接变模糊,长辈留存画质受损2.大批量发照片视频,刷屏聊天框,长辈翻找内容耗时费力3.手机内存爆满,不舍得删除宝宝素…

2026/6/25 22:47:06阅读更多 →
【人工智能】一文搞定到底什么是智能体

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

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

2026/6/25 9:39:54阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

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

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

2026/6/25 2:52:24阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

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

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

2026/6/25 9:01:34阅读更多 →
面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

上半年跳槽,面了十几家公司。说句实话,不是能力不行,是面试现场太容易崩了。 明明准备了一周,面试官换个问法脑子就一片白。面完之后那个懊悔——其实我会的。 后来开始试市面上的AI面试辅助工具。前前后后装了5款,踩…

2026/6/25 11:52:11阅读更多 →
Claude Code 提示词设计:从塑造“人格”到建立“状态机”

Claude Code 提示词设计:从塑造“人格”到建立“状态机”

当前 AI Agent 设计的核心痛点在于:大模型不缺写代码的能力,缺的是克制力、边界感和验证逻辑。Prompt 不再是用来塑造“人格”的,而是用来建立“状态机(State Machine)”和“行为门禁(Guardrails&#xff0…

2026/6/25 11:52:11阅读更多 →
MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MONKEYCODE 教程系列 MonkeyCode教程及推广系列 MC-037 自定义 Skill 开发:创建你的AI能力模块 >官网链接注册更放心哦https://monkeycode-ai.com/?ic019e0aed-c823-783c-b08a-4f030f891e4e 系列: 不爱土豆唯爱马铃薯 MonkeyCode 教程系列 字数: 约 1400 字…

2026/6/25 11:52:11阅读更多 →