微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么我用蜂鸣器就用了一个输出脉冲它却会一直响?以下是我的代码

为什么我用蜂鸣器就用了一个输出脉冲它却会一直响?以下是我的代码

时间:10-02 整理:3721RD 点击:
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
void delay (u16 b)
                {
                        while(b--);
                }
void main()
{
        u8 i=0;
        for (i=0;i<1;i++)
        {
   beep=~beep;
                delay (50);
        }
}

for后面加while(1);死循环,

蜂鸣器分有源蜂鸣器和无源蜂鸣器,有源蜂鸣器只要有供电,就能一直响,无源蜂鸣器则需要一定频率的脉冲驱动才能响。
有源蜂鸣器一般都是一个黑色的圆柱体,无源蜂鸣器一般就是一个薄片。

我开发板上的是无源蜂鸣器啊,为什么就for循环一次就一直响

试试在for的循环之后,再加一个 beep=~beep;,看看还响不响

还响

i小于等于1试一下

还是没有用啊,我就用的普通的51开发板

为什么会是死循环啊

加while(1)是什么意思

开发板上绝大多数是有源蜂鸣器,两者外观无明显区别,如果从引脚方向看有封胶的是有源否则是无源,另外在路测量阻值差别极大,无源蜂鸣器几欧到几十欧,正反一致。有源蜂鸣器阻值远大于此并且不同档位测量读数不符。
根据小编的程序和描述,可以确认此开发板上是有源蜂鸣器。

而且当我输入的i<=500时还是会一直响

把main改成这样试试,
void main()
{
        beep=~beep;
                delay (50);
        while(1);
}
另外,你如何确定你用的蜂鸣器是无源的,无源蜂鸣器好像频率不对,也不怎么会响的

这个小编最好将所用元件晒一下

呃呃

以后在写程序的时候一定要有死循环,要不然程序会跑飞的,有些单片机跑飞了会自动复位从main函数又开始执行的。

因为程序只执行一次,就是你蜂鸣器只给响的电平,没停止下来。在for前面加个死循环while(1)

恩,谢了

我看视频里面讲的

把main改成这样试试,
void main()
{
        beep=~beep;
                delay (50);
        while(1);
}
试一试这样改吧,这里只改变了一次蜂鸣器的驱动电平,对于无源蜂鸣器来说是不会响的,while(1)会形成一个死循环,程序会停在这里,这样就可以判断蜂鸣器是有源的还是无源的了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top