蜂鸣器一直在叫,不受程序控制

2019-03-24 17:35发布

代码如下:
#include<reg52.h>
#define uchar unsigned char

sfr LED=P1;           //发光二极管
sbit BUZZ=P3^7;   //蜂鸣器
sbit SW=P3^4;     //按钮开关

void main()
{
   uchar i,j,k;
   uchar a=0xff;
   for(i=8;i>0;i--)
   {
      while(SW);
      while(!SW);
      a<<=1;
      for(j=0;j<100;j++)
      {
         BUZZ=1;
         for(k=12;k>0;k--);
         BUZZ=0;
         for(k=12;k>0;k--);       
       }
       LED=a;
    }
}

按理说按下并放开按钮,蜂鸣器叫一声,增加一个亮灯,但运行的结果,灯正常,而蜂鸣器一直在叫。为什么?
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
d_zzn0470
1楼-- · 2019-03-25 00:58
刚才发的代码错了一行,第三行应该是
#define LED P1;   //发光二极管
我的问题是,只要按过一次按钮,蜂鸣器就一直叫,停不下来,但发光二极管正常,按一下,增加一个亮灯。
ywlzh
2楼-- · 2019-03-25 02:39
那是因为蜂鸣器关的不彻底导致的

好好检查下电路,单片机给高低电平的时候,蜂鸣器的压降是多少
qwqwqw2088
3楼-- · 2019-03-25 06:00
 精彩回答 2  元偷偷看……
d_zzn0470
4楼-- · 2019-03-25 09:55
qwqwqw2088 发表于 2016-4-27 11:48
请参考楼上建议解决硬件问题
如是成品开发板,硬件问题少一些,有可能是代码有问题
参考一下
参考下面用 ...

谢谢回答,我用的是成品开发板,硬件没有问题。烦请帮忙分析一下我的代码,其中while(SW)和while(!SW)两句,如果按钮不按下,应该一直停在这里等待,不应该执行下面的所有语句,蜂鸣器不应该叫,发光管也不应该左移。现在的问题是发光管反应正常,按一下按钮增加一个亮灯,不按不增加,但蜂鸣器却不是叫一下,而是一直叫个不停。我也是在编写其它程序时偶尔发现的,非常困惑。
d_zzn0470
5楼-- · 2019-03-25 13:20
谢谢大家,问题找到了。是我把蜂鸣器的发声原理搞错了,以为要反复高频率地置1置0才会叫,原来蜂鸣器内部内置了一个音频震荡器,只要置以高电位,就一直叫下去。见笑了。
quackonchen
6楼-- · 2019-03-25 15:26
 精彩回答 2  元偷偷看……

一周热门 更多>