为什么我用蜂鸣器就用了一个输出脉冲它却会一直响?以下是我的代码
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)会形成一个死循环,程序会停在这里,这样就可以判断蜂鸣器是有源的还是无源的了。