目录
蜂鸣器区域原理图
因为蜂鸣器的发声需要很大的驱动力。我们这里选择ULN2003D这个芯片的12脚来驱动蜂鸣器。通过给5脚输入信号就可以控制蜂鸣器了,也就是P2^5这个IO口
蜂鸣器种类
蜂鸣器分为:无源蜂鸣器和有源蜂鸣器,我们51单片机中的蜂鸣器就是无源蜂鸣器,其中无源蜂鸣器就需要提供震荡源才可以让蜂鸣器发出声音。
无源蜂鸣器的发生原理
无源蜂鸣器的发生原理为:用一个波来让蜂鸣器发声音,其中波的占空比越大,声音越大,占空比就是一个周期中高电平的时间与低电平的时间的比值,然后波的频率是通过周期来决定的。改变波的频率我们将会听到不一样音色的声音。
产生波的方法
通过设置一段时间高电平和一段时间为低电平,就可以很容易的产生一个矩形波,再通过循环这个矩形波就可以让蜂鸣器发出声音了
我们得定义IO口
sbit BEEP=P2^5; //定义IO口
编写延时函数
因为我们需要低电平和高电平都要持续一段时间,那么就需要一个函数用来延时。
void delay_10us(int ten_us)
{
while(ten_us--);
}
产生高电平和低电平
while(1)
{
delay_10us(100); //控制周期
BEEP=!BEEP;
}
完整代码
#include "reg52.h" //调用相应的函数库
void delay_10us(int ten_us) //延时函数
{
while(ten_us--);
}
sbit BEEP=P2^5; //定义IO口
void main()
{
while(1)
{
delay_10us(100); //通过延时,控制周期
BEEP=!BEEP; //电平反转
}
}
改良
这个代码将会使得板子一上电就一直响,如果只想让蜂鸣器响一段时间,那么可以通过一个类似计时的方法。方法如下
#include "reg52.h" //调用相应的函数库
void delay_10us(int ten_us) //延时函数
{
while(ten_us--);
}
sbit BEEP=P2^5; //定义IO口
void main()
{
int i=900;
while(1)
{
while(i--)
{
delay_10us(100); //通过延时,控制周期
BEEP=!BEEP; //电平反转
}
i=0;
BEEP=1;
}
}
通过设置一个循环,这个循环里面蜂鸣器才会响,结束了循环蜂鸣器就不响了。