蜂鸣器分类:有源蜂鸣器,无源蜂鸣器。
这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 无源蜂鸣器的优点是:1.便宜2.声音频率可控,可以做出“多来米发索拉西”的效果。3.在一些特例中,可以和LED复用一个控制口有源蜂鸣器的优点是:程序控制方便 。**************************************************************************************************************以下程序针对无源蜂鸣器设计:因此需要差生连续的交流信号才能够使蜂鸣器发声。
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
void delay(u16 i )
{
while (i--);
}
void main()
{
u16 i=0;
for(;i<8;i++) //想用for循环实现响几声,但不能够实现蜂鸣器通过连续的振动才能够实现发声,此处的循环条件i<8,中的数字不能控制发声的数量,仅能够控制发声的长短
{
beep=~beep;
delay(100);
}
delay(50000);
}
****************************************************************
以下程序可以控制发声数量:
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;//
void delay(u16 i )
{
while (i--);
}
void main()
{
u16 i=0;
u16 k=0;
for (;k<10;k++) //大循环,控制发声的次数,再次发声数量为10
//另,for循环中的条件变量i对于此处不需要重复循环的嵌套循环中的大循环来说没有必要,但是小循环中的条件变量必须要加,保证每个小循环完成后,条件变量能够重置,保证下一个小循环能够正常进行
{
for(i=0;i<100;i++) //小循环,控制发声的长短,与循环条件i<100,有关 此处为条件变量赋值是必要的,不可以省略!!
{
beep=~beep;
delay(100); //小循环内的延时程序控制蜂鸣器的发声频率
}
delay(10000);//大循环内的延时程序,保证次发声有人能够合理观察的间隔
}
while(1);//大循环外的终止程序,在此仅仅是为了记录发声的数量,保证该循环不会持续下去
}
来源:https://www.cnblogs.com/Moondance/p/6815932.html