未元星系 发表于 2024-5-27 12:14:22

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

本帖最后由 未元星系 于 2024-5-27 17:14 编辑

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

soma 发表于 2024-5-27 12:26:50

软件防抖或者硬件防抖

未元星系 发表于 2024-5-27 13:51:57

soma 发表于 2024-5-27 12:26
软件防抖或者硬件防抖

请问软件防抖具体怎么做

soma 发表于 2024-5-27 14:07:16

未元星系 发表于 2024-5-27 13:51
请问软件防抖具体怎么做

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

jwd 发表于 2024-5-27 14:09:13

先判断按键是否按下,如果有信号,等20ms后再判断一次,如果还有信号就确实有信号了

未元星系 发表于 2024-5-27 14:13:36

soma 发表于 2024-5-27 14:07
检测到按下按键后延时10ms(根据实际情况改变)左右再次检测按键是否处于按下状态如果按下执行程序,如果 ...

明白了,这个代码是在中断里设置哈?

Lkck8210 发表于 2024-5-27 15:05:14

给你一个例子
#include "reg51.h"

typedef         unsigned char        u8;//0 to 255
typedef         unsigned int        u16;//0 to 65535

bit Flag_exint0 = 0;
u8 Delay_exint0 = 0;
//External interrupt0 service routine
void exint0() interrupt 0         //(location at 0003H)
{
    Flag_exint0 = 1;
        Delay_exint0 = 255;
        EX0 = 0;
}

void main()
{
    IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
    EX0 = 1;                        //enable INT0 interrupt
    EA = 1;                         //open global interrupt switch
   
    while (1)
        {
                if(Delay_exint0>0)
                {
                        if(INT0)//sbit in Header file
                        {
                                Delay_exint0--;
                                if(Delay_exint0==0)
                                {
                                        IE0 = 0;
                                        EX0 = 1;
                                }
                        }else{
                                Delay_exint0 = 255;
                        }                               
                }
                if(Flag_exint0)
                {
                        Flag_exint0 = 0;
                        //your code E.g.:
                        P2 ^= 1;
                }               
        }
}

嵌入式之路 发表于 2024-5-27 16:24:45

加电容.

xxxevery 发表于 2024-5-27 16:59:15

用中断检测按键并解决抖动问题用状态机是很好的选择

未元星系 发表于 2024-5-27 17:12:06

Lkck8210 发表于 2024-5-27 15:05
给你一个例子

多谢多谢,有些思路了
页: [1] 2
查看完整版本: 怎么解决独立按键触发中断的抖动问题? | 已解决