51单片机外部中断自动重复了一次

51单片机外部中断自动重复了一次

#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

void delay(uint);
void breath();

uchar tr_1;

void main()
{
    EX0=1;
    IT0=1;
    EA=1;
    P0=0xfe;
    delay(4000);
    while(1)
    {
        tr_1=P0;
        P0=_crol_(P0,1);
        tr_1=P0;
        delay(4000);
    }
}

void breath()
{
    uint count_1;
    count_1=0;
    while(count_1<100)
    {
        P0=0xff;
        delay(100-count_1);
        P0=0x00;
        delay(count_1);
        count_1++;
    }
    while(count_1>0)
    {
        P0=0x00;
        delay(count_1);
        P0=0xff;
        delay(100-count_1);
        count_1--;
    }
    P0=tr_1;
}

void delay(uint t)
{
    uint count_1;
    while(t>0)
    {
        for(count_1=0;count_1<5;count_1++);
        t--;
    }
}

void led() interrupt 0
{
    uint count_1;
    count_1=0;
    while(count_1<1)
    {
        breath();
        count_1++;
    }
}

点击了外部中断按钮之后,应该只出现一次呼吸灯的亮和灭,可是实际上有时候是一次,有时候是两次。???求助

2个回答

按下按钮可能存在按键抖动,即由于硬件原因或者按键原因导致输出信号来回跳变,导致多次中断。
一般识别到按钮按键后会延时50ms再检测,这样能避免按键抖动,只获得一次中断。
楼主也可以查一下按键抖动相关的东西。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问