89C51单片机实验中遇到的一个问题
我为了试验一下外部中断INT0,用实验板做了个实验,功能是:每按一下键盘按键数码管就计数一次,(此按键与INT0引脚相接,中断是下降沿触发)。我已经确认我的程序没有问题。...
我为了试验一下外部中断INT0,用实验板做了个实验,功能是:每按一下键盘按键数码管就计数一次,(此按键与INT0引脚相接,中断是下降沿触发)。我已经确认我的程序没有问题。但是当我按一下按键时,数码管有时竟然计数两次,甚至三次。按我的直觉,应该是按键瞬间由于各种不稳定的因素使这次按键产生了一个以上的脉冲信号,从而产生多个中断。
我在这里想问的是,怎么解决这个问题?能不能给个实例? 展开
我在这里想问的是,怎么解决这个问题?能不能给个实例? 展开
6个回答
展开全部
其实,毛病是在按键上。
普通的按键,按一下,会产生多次的脉冲信号。
你的程序把多个脉冲都检测出来了,程序是完全正常的。
如果把按键改用“单脉冲电路”,就不会出现这些现象了。
----
如果按键不变,可在程序中加上延时,隔10ms再确认按键的状态,也能减少计数加1的现象。
这就是软件消抖。
如果使用了软件消抖,整个系统就会迟钝很多,基本上就失去了中断输入的意义。
一般没有这种在中断里面使用延时的实例。
其它软件消抖的例子,在我的空间里面,有很多,欢迎来踩。
普通的按键,按一下,会产生多次的脉冲信号。
你的程序把多个脉冲都检测出来了,程序是完全正常的。
如果把按键改用“单脉冲电路”,就不会出现这些现象了。
----
如果按键不变,可在程序中加上延时,隔10ms再确认按键的状态,也能减少计数加1的现象。
这就是软件消抖。
如果使用了软件消抖,整个系统就会迟钝很多,基本上就失去了中断输入的意义。
一般没有这种在中断里面使用延时的实例。
其它软件消抖的例子,在我的空间里面,有很多,欢迎来踩。
展开全部
很简单就是但得到一个按键信号后就首先运行一个循环程序,延长时间,再计数。再去判断有无按键信号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按键加去抖和释放程序,问题解决,具体如下操作
if(key)
{
delay(10);//延时10ms
if(key)
while(key)
{
;;
}
}
if(key)
{
delay(10);//延时10ms
if(key)
while(key)
{
;;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
进中断后先关中断,等事情做完了再开中断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询