C语言定时中断程序

我要用51单片机C语言做报警系统,用的是keil。系统实现功能:ABCD四种警情,每种警情发生时点亮对应的灯(已解决),只要有一种警情发生就开启蜂鸣器(无源蜂鸣器,需要方... 我要用51单片机C语言做报警系统,用的是keil。系统实现功能:ABCD四种警情,每种警情发生时点亮对应的灯(已解决),只要有一种警情发生就开启蜂鸣器(无源蜂鸣器,需要方波驱动,驱动程序已用高低电平延时编好),一个撤警按钮可以随时撤销所有警情(关闭蜂鸣器和所有报警灯,点亮撤警灯)。现在的问题是:一旦蜂鸣器启动就不能再对其他警情或撤警键做出反应(因为蜂鸣器子程序中有while(1)导致程序出不来)。现在需要中断定时程序来控制蜂鸣器,当中断检测到撤警标志位时关闭蜂鸣器。 展开
 我来答
hkx177901
2014-04-19 · 超过18用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:49万
展开全部
你可以在蜂鸣器子程序中的while(1)内加一个按键扫描程序,如果扫描到撤警键可以跳出这个while(1)死循环,可以用go to函数(出错的可能性要大一些,但一般也没事)。或者你把while(1)改成while(key);key为一个变量,外界可以将key置1(调用蜂鸣器),当蜂鸣器内部扫描到撤警键后将key置0,这样也可以跳出这个循环。要不你就把程序直接发出来,帮你 改一下
追问
我的扣扣 1216251016 能帮我改一下程序吗?
knifsleep
2014-04-20 · TA获得超过702个赞
知道小有建树答主
回答量:1219
采纳率:51%
帮助的人:226万
展开全部
“中有while(1)导致程序出不来”
程序出来就能对其他警情或撤警键做出反应了么?
既然如此,为什么不在while(1)中,而非要在中断中检测“撤警标志位”呢?

如果只能在中断中检测“撤警标志位”,可以在检测时设一全局变量,用作通信——所有各
子程序之间的通信媒介——,当“撤警标志位”是打开的情况下,全局变量设置为某值。
中断处理完毕,while(1)继续,while(1)首先读取此全局变量,决定是应该继续蜂鸣呢,还是
break或goto跳出循环。
追问
你可以帮我具体指导一下程序吗?1216251016  如果修改成功,再加财富值,谢谢
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zebra0123
2014-04-16 · TA获得超过180个赞
知道小有建树答主
回答量:305
采纳率:100%
帮助的人:162万
展开全部
蜂鸣器程序这样做不好,不要用延时,而是将其放到中断程序里。(一次中断就相当于一个延时)。
其实,键盘扫描最好的方式也是放到中断里,这样就去掉了很多不必要的延时。(网上有现成代码)

延时子程序对于系统反应速度或者用户的体验,都会造成负面影响。
追问
我同学也建议我用定时中断做蜂鸣器,但是比较麻烦,我不会写,查到的也没看懂。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式