单片机定时器中断实现按键去抖动问题?

2025-05-18 03:43:09
推荐回答(3个)
回答1:

因为key_statue原来等于0,,按键刚按下时,进入外部中断,不满足条件,LED不会改变,当再次按下,定时器使按键标识置1,灯变化,注意程序时序问题。

回答2:

有四年经验的高手,小弟不惨和哦,哈哈

回答3:

if(key_statue==1)
{
key_statue=0;
led=~led;
}

你把这段代码写到主循环中,不能放到外中断中,这样就正常了,另外,把定时器的中断改成我给你的样子,要是不正常你找我!

void t0() interrupt 1 //1ms 用于按键去抖动。
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;

if(key == 0)
{
   key_num++;
  if(key_num>=15)
  {
   key_num = 15;
   key_statue=1;
  }
}
else
    {
       key_num = 0;
    }

}