找回密码
 立即注册
查看: 911|回复: 11

怎么解决独立按键触发中断的抖动问题? | 已解决

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:436
  • 最近打卡:2025-05-02 12:44:58
已绑定手机

31

主题

142

回帖

1561

积分

金牌会员

积分
1561
发表于 2024-5-27 12:14:22 | 显示全部楼层 |阅读模式
本帖最后由 未元星系 于 2024-5-27 17:14 编辑

请教独立按键触发中断的抖动问题怎么解决?之前做了按键触发中断LED闪烁两下,实际闪烁3~4下。(下降沿触发)
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 2024-5-27 12:26:50 来自手机 | 显示全部楼层
软件防抖或者硬件防抖
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:436
  • 最近打卡:2025-05-02 12:44:58
已绑定手机

31

主题

142

回帖

1561

积分

金牌会员

积分
1561
发表于 2024-5-27 13:51:57 | 显示全部楼层
so*** 发表于 2024-5-27 12:26
软件防抖或者硬件防抖

请问软件防抖具体怎么做
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 2024-5-27 14:07:16 | 显示全部楼层
未元*** 发表于 2024-5-27 13:51
请问软件防抖具体怎么做

检测到按下按键后延时10ms(根据实际情况改变)左右再次检测按键是否处于按下状态如果按下执行程序,如果没有不执行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-02 07:55:51
已绑定手机

46

主题

1694

回帖

2544

积分

金牌会员

积分
2544
发表于 2024-5-27 14:09:13 | 显示全部楼层
先判断按键是否按下,如果有信号,等20ms后再判断一次,如果还有信号就确实有信号了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:436
  • 最近打卡:2025-05-02 12:44:58
已绑定手机

31

主题

142

回帖

1561

积分

金牌会员

积分
1561
发表于 2024-5-27 14:13:36 | 显示全部楼层
so*** 发表于 2024-5-27 14:07
检测到按下按键后延时10ms(根据实际情况改变)左右再次检测按键是否处于按下状态如果按下执行程序,如果 ...

明白了,这个代码是在中断里设置哈?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-5-27 15:05:14 | 显示全部楼层
给你一个例子
  1. #include "reg51.h"
  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 to 65535
  4. bit Flag_exint0 = 0;
  5. u8 Delay_exint0 = 0;
  6. //External interrupt0 service routine
  7. void exint0() interrupt 0           //(location at 0003H)
  8. {
  9.     Flag_exint0 = 1;
  10.         Delay_exint0 = 255;
  11.         EX0 = 0;
  12. }
  13. void main()
  14. {
  15.     IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
  16.     EX0 = 1;                        //enable INT0 interrupt
  17.     EA = 1;                         //open global interrupt switch
  18.    
  19.     while (1)
  20.         {
  21.                 if(Delay_exint0>0)
  22.                 {
  23.                         if(INT0)//sbit in Header file
  24.                         {
  25.                                 Delay_exint0--;
  26.                                 if(Delay_exint0==0)
  27.                                 {
  28.                                         IE0 = 0;
  29.                                         EX0 = 1;
  30.                                 }
  31.                         }else{
  32.                                 Delay_exint0 = 255;
  33.                         }                               
  34.                 }
  35.                 if(Flag_exint0)
  36.                 {
  37.                         Flag_exint0 = 0;
  38.                         //your code E.g.:
  39.                         P2 ^= 1;
  40.                 }               
  41.         }
  42. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-5-27 16:24:45 | 显示全部楼层
加电容.
自信就会温和,温和就会坚定!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:391
  • 最近打卡:2025-04-30 00:26:42

0

主题

336

回帖

1490

积分

金牌会员

积分
1490
发表于 2024-5-27 16:59:15 | 显示全部楼层
用中断检测按键并解决抖动问题用状态机是很好的选择
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:436
  • 最近打卡:2025-05-02 12:44:58
已绑定手机

31

主题

142

回帖

1561

积分

金牌会员

积分
1561
发表于 2024-5-27 17:12:06 | 显示全部楼层

多谢多谢,有些思路了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 15:40 , Processed in 0.157498 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表