89C51单片机实验中遇到的一个问题

我为了试验一下外部中断INT0,用实验板做了个实验,功能是:每按一下键盘按键数码管就计数一次,(此按键与INT0引脚相接,中断是下降沿触发)。我已经确认我的程序没有问题。... 我为了试验一下外部中断INT0,用实验板做了个实验,功能是:每按一下键盘按键数码管就计数一次,(此按键与INT0引脚相接,中断是下降沿触发)。我已经确认我的程序没有问题。但是当我按一下按键时,数码管有时竟然计数两次,甚至三次。按我的直觉,应该是按键瞬间由于各种不稳定的因素使这次按键产生了一个以上的脉冲信号,从而产生多个中断。

我在这里想问的是,怎么解决这个问题?能不能给个实例?
展开
 我来答
做而论道
高能答主

2011-01-23 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
其实,毛病是在按键上。
普通的按键,按一下,会产生多次的脉冲信号。
你的程序把多个脉冲都检测出来了,程序是完全正常的。
如果把按键改用“单脉冲电路”,就不会出现这些现象了。
----
如果按键不变,可在程序中加上延时,隔10ms再确认按键的状态,也能减少计数加1的现象。
这就是软件消抖。
如果使用了软件消抖,整个系统就会迟钝很多,基本上就失去了中断输入的意义。
一般没有这种在中断里面使用延时的实例。
其它软件消抖的例子,在我的空间里面,有很多,欢迎来踩。
qky510221
2011-01-20 · TA获得超过341个赞
知道小有建树答主
回答量:484
采纳率:100%
帮助的人:247万
展开全部
很简单就是但得到一个按键信号后就首先运行一个循环程序,延长时间,再计数。再去判断有无按键信号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a66510722
2011-01-15 · TA获得超过188个赞
知道答主
回答量:110
采纳率:0%
帮助的人:107万
展开全部
按键加去抖和释放程序,问题解决,具体如下操作
if(key)
{
delay(10);//延时10ms
if(key)
while(key)
{
;;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hepday
2011-01-15 · TA获得超过718个赞
知道小有建树答主
回答量:1074
采纳率:73%
帮助的人:302万
展开全部
进中断后先关中断,等事情做完了再开中断
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
158595396
2011-01-15
知道答主
回答量:24
采纳率:0%
帮助的人:6.8万
展开全部
兄弟,百度里收吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式