为什么我的51单片机蜂鸣器程序需要加延时才响呢?
发布网友
发布时间:2022-05-04 20:11
我来回答
共4个回答
热心网友
时间:2022-06-25 13:44
这得看你的蜂鸣器是有源还是无源,如果是无源的蜂鸣器需要经过变频控制才会发声,对于有源的蜂鸣器则直接输出高低电平就可以。
注意,这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。
而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。
两种蜂鸣器好像一样,但仔细看,两者的高度略有区别,有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚郡朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。
迸一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。
热心网友
时间:2022-06-25 13:45
解决方法: 把蜂鸣器的控制信号由单一的电平 改为不断高低变化的方波。
例如:
void Warn(void) // 蜂鸣 警告
{
uchar ii;
for(ii=0;ii<2;ii++) //循环的次数决定 蜂鸣时间的长短,延时A延时B配合决定声调
{
SET_BEEP; //高电平
delay_ms(220); //延时A
CLR_BEEP; //低电平
delay_ms(120); //延时B
}
希望对你有帮助, 欢迎追问!
热心网友
时间:2022-06-25 13:45
蜂鸣器有两种,一种是通电就响,一种是方波才响,你通电试一下。
热心网友
时间:2022-06-25 13:46
#include <reg52.h>
sbit bell=P0^1;
void main()
{
bell=0;
while(1);
}
//这样就可以一直响下去了。追问
我的是无源蜂鸣器,可是为什么
这个程序能让蜂鸣器响呢?还有为什么我把延时函数改成void delay(jint a){ while(a--); }然后主函数改成delay(50);就不响了呢?麻烦您了…
追答这个程序编译是不能通过的delay()后边必须由;,至于你后面的程序,之所以不响,是因为延时时间太短。你将delay(50)改为delay(50000)试试。