单片机面试:按键一次却触发多次?机械抖动、外部中断和软件消抖怎么处理?

浏览量:18
时间: 2026-10-20 21:50:46

机械按键闭合或释放并不是理想的0→1单次跳变。触点会在很短时间内多次接触和分离,所以GPIO可能看到一串边沿。面试官问消抖,通常是在判断你有没有把真实波形、IRQ处理和状态机设计联系起来。

先看真实波形

示波器实测能看到一次按键动作包含多个高低跳变。抖动持续时间不是一个固定常数,会随开关结构、老化、按压力度和电气条件变化。

示波器实测机械按键抖动波形,可看到一次动作在毫秒级内产生多次高低跳变

软件消抖不是“固定延时”

外部中断不要直接把每个边沿都当成一次按键

中断可以只记录“发生了变化”并启动后续定时判断,避免在ISR里阻塞延时。

时间滤波要验证,不要背固定20ms

可以周期采样并要求连续若干次状态一致,或采用状态机判断稳定按下/稳定释放;阈值应通过器件规格和实测确定。

按下和释放都可能抖

如果应用既关心按下又关心松开,就要对两个方向分别验证,而不是只过滤一个边沿。

高可靠场景可硬件+软件一起做

RC、施密特输入能降低毛刺敏感度,软件再完成稳定状态判定,但硬件时间常数也不能大到让合法快速操作丢失。

面试参考回答

我会先确认输入脚是否有合适的上拉/下拉和施密特特性,再用示波器看实际按键波形。软件上不会在外部中断里直接delay消抖,而是把中断当成事件入口,通过定时器或周期任务判断输入是否连续稳定。消抖时间不使用固定经验值硬套,而是结合开关实测和产品允许的响应时间确定。对于需要长按、双击等功能,还会把“物理稳定状态”和“用户事件识别”分成两层。

可能继续问

  • 为什么在中断服务函数里直接延时不是好办法?

  • 连续采样法和“一段时间后再读一次”各有什么边界?

  • 长按、短按、双击功能应该和消抖逻辑放在同一层吗?

不要这样答

  • 回答只有“延时20ms再读一次”。

  • 忽略释放过程也会出现抖动。

  • 把抖动、多击识别和长按计时混在一个不可维护的if/else里。

凡亿电子工程师面试平台 · 面试回答以具体芯片手册、接口规范和项目条件为准。


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
单片机低功耗模式怎么配置?嵌入式面试唤醒源与功耗优化详解

分类:嵌入式单片机经验级别:1-3年难度:中级题型:原理+配置+调试本文概述:单片机低功耗设计是电池供电产品的核心技能。主流MCU通常提供三级低功耗模式:睡眠模... 详情>>

2026-08-14 11:24:45
模拟信号线和数字信号线在PCB上怎么隔离?电子面试要从串扰讲到隔离方法

分类:电子工程师面试题经验要求:中级难度:中高级题型:布线规范📖 本文概述模拟信号线与数字信号线的隔离是电子工程师面试高频题。本文从容性耦合和感性耦合的串扰机... 详情>>

2026-08-03 10:37:02
负压电源怎么产生?电荷泵与反压电路怎么选?电源工程师面试

电源设计中级技术基础题本文概述负压电源是电源设计里容易让人卡壳的题目:正压方案熟、负压就不知道从哪下手。面试官想听的是:你清不清楚负压的几种实现方式——电荷泵反... 详情>>

2026-09-03 13:53:06
FPGA怎么实现UART收发接口?波特率与采样怎么做?FPGA面试从状态机讲到串口协议

FPGA设计中级技术基础题本文概述UART是FPGA工程师最常被要求手写的接口之一,也是面试高频题。面试官想听的不是“调用现成IP”,而是你懂不懂UART的异步... 详情>>

2026-09-05 09:52:18
STM32定时器高级应用怎么做?嵌入式面试从PWM输出讲到编码器接口

嵌入式单片机中级技术基础题本文概述STM32定时器是外设中功能最丰富的模块之一,除了基本定时中断,还支持PWM输出、输入捕获、输出比较、单脉冲模式、编码器接口、... 详情>>

2026-08-31 14:33:46
开班信息