关于51单片机的中断与消抖
时间:10-02
整理:3721RD
点击:
今天学到了中断,把程序烧进单片机后。由于按键没有消抖,使得 led 有时不受控制的问题
遂相将消抖加入程序,奈何技术不到家,想了一晚上也没想到啥好方法,所以发帖,请各位发烧友指点迷津
遂相将消抖加入程序,奈何技术不到家,想了一晚上也没想到啥好方法,所以发帖,请各位发烧友指点迷津
- #include <reg52.h>
- sbit P1_0 = P1^0;
- sbit BEEP = P2^3;
- void int0_init(void)
- {
- IT0 = 1;
- EX0 = 1;
- EA = 1;
- }
- void int0() interrupt 0
- {
- P1_0 = ~P1_0;
- BEEP = ~BEEP;
- }
- void main()
- {
- int0_init();
- P3 = 0x0f;
-
- while(1);
- }
先判断按键是否按下,然后延时一会,再去判断按键是否按下
延时就行了
谢谢,
可是就是怎样判断呢,当按键按下时就已经进入中断,我也想先用if 判断,不成立就跳出来,可是没有成功,我哪里想错或遗漏了什么吗?跳出中断需要专门的语句?请指教
谢谢,可是这个延时要如何放在中断钱呢,百思不得解,请指明
其实就是延时一下
你提出的问题相信也是其他初学者所会遇到的问题。我给你或大家简单说一下吧。
void int0() interrupt 0
{
if (中断标志位 = 1) //在这一行添加中断标志位判断语句
{
调用一个 10ms的延时函数 // 这里我就不写延时函数了。需要你自己添加在第5行。
P1_0 = ~P1_0; // 这两条语句移到这里
BEEP = ~BEEP;
}
中断标志位 = 0; //有些单片机会自动清0,这里手动清0也耽误不了多长时间
}
这段程序我没上机验证,应该没问题。
10ms左右吧,你慢慢试一下