蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型
从图中可以看出,蜂鸣器控制管脚直接连接到 51 单片机的 P2.5 管脚上。图 中并没有使用三极管进行电流放大,而是使用 ULN2003 芯片来驱动,这里我们只需知道当 P25 输出高电 平,BEEP 则输出低电平;当 P25 输出低电平,BEEP 则输出高电平,类似一个非 门。 开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲(高低电平)才会发 声,因此需要让 P25 脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音。
实验一
#include "reg52.h"
sbit BEEP = P2^5; //将P2.5管脚重新定义为BEEP
typedef unsigned int u16;//对系统默认数据类型重新命名
typedef unsigned char u8;
void delay_10us(u16 ten_us){//延时函数,当ten_us = 1 是 延时大约10us
while(ten_us--);
}
void main(){
u16 i = 2000;
while(1){
while(i--){//循环两千次
BEEP = !BEEP;//产生一定频率的脉冲信号
delay_10us(100);//延时1ms
}
i = 0;//清零循环参数
BEEP = 0;//关闭蜂鸣器
}
}
若要改变音调可以修改延时时间,但要注意频率不能太大或者太小,具体大 家可以试着调试。若要改变音量,可以修改 BEEP 输出高电平时间。如下:
BEEP = !BEEP;//产生一定频率的脉冲信号
delay_10us(100);//延时1ms
BEEP = !BEEP;//产生一定频率的脉冲信号
delay_10us(190);
BEEP = !BEEP;//产生一定频率的脉冲信号
delay_10us(50);