微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于51单片机的中断与消抖

关于51单片机的中断与消抖

时间:10-02 整理:3721RD 点击:
今天学到了中断,把程序烧进单片机后。由于按键没有消抖,使得  led  有时不受控制的问题
遂相将消抖加入程序,奈何技术不到家,想了一晚上也没想到啥好方法,所以发帖,请各位发烧友指点迷津

  1. #include <reg52.h>

  2. sbit P1_0 = P1^0;
  3. sbit BEEP = P2^3;

  4. void int0_init(void)
  5. {
  6.         IT0 = 1;  
  7.         EX0 = 1;
  8.         EA = 1;
  9. }

  10. void int0() interrupt 0   
  11. {
  12.           P1_0 = ~P1_0;
  13.           BEEP = ~BEEP;
  14. }

  15. void main()
  16. {
  17.         int0_init();
  18.         P3 = 0x0f;
  19.        
  20.         while(1);
  21. }

复制代码



先判断按键是否按下,然后延时一会,再去判断按键是否按下

延时就行了

谢谢,
可是就是怎样判断呢,当按键按下时就已经进入中断,我也想先用if 判断,不成立就跳出来,可是没有成功,我哪里想错或遗漏了什么吗?跳出中断需要专门的语句?请指教

谢谢,可是这个延时要如何放在中断钱呢,百思不得解,请指明

其实就是延时一下

你提出的问题相信也是其他初学者所会遇到的问题。我给你或大家简单说一下吧。
void int0() interrupt 0   
{
       if (中断标志位 = 1)   //在这一行添加中断标志位判断语句
{
           调用一个 10ms的延时函数 // 这里我就不写延时函数了。需要你自己添加在第5行。
          P1_0 = ~P1_0;  // 这两条语句移到这里
          BEEP = ~BEEP;
     }
         中断标志位 = 0; //有些单片机会自动清0,这里手动清0也耽误不了多长时间
}
这段程序我没上机验证,应该没问题。

10ms左右吧,你慢慢试一下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top