51单片蜂鸣器

这个小节我们来看一下在51单片机当中,怎么对蜂鸣器进行控制

1、蜂鸣器的介绍

  • 蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号
  • 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器
  • 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
  • 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

2、达林顿管的作用:增大驱动能力

​​达林顿管的作用及原理​​:
​​达林顿管(Darlington Transistor)​​ 是一种由两个晶体管组成的复合结构,能够显著提高电流放大倍数(β值),常用于需要高电流驱动能力的电路中。

达林顿管,输入为1,那么另一端输出为0,这个时候有驱动能力,低电平驱动能力。
输入为0,那么另一端输出为1,为高阻态,没有任何驱动能力。

3、使用延时函数进行发声

大概的思想就是一个周期为1ms,一个周期内高电平为500us,低电平为500us

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <REGX52.H>

sbit Buzzer=P1^5;

void Delay500us() //@12.000MHz
{
unsigned char i, j;

i = 6;
j = 211;
do
{
while (--j);
} while (--i);
}

//2*ms的意思就是2*500us为一毫秒,xms表示执行了多少毫秒
void Buzzer_Working(unsigned int xms){
unsigned int i;
for(i=0;i<2*xms;i++){
Buzzer=!Buzzer;
Delay500us();
}
}

void main(){
Buzzer_Working(10000);
while(1){

}
}

4、使用定时器中断函数进行发声

使用定时器生成500us进行一次翻转,一个周期为1ms,频率为1KHZ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <REGX52.H>

sbit Buzzer=P1^5;

void Timer0Init(void) //500微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x90; //设置定时初值
TH0 = 0xE8; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}

//500us翻转一次,一个周期为1ms,蜂鸣器频率为1kHZ
void Timer0_Init() interrupt 1
{
TL0 = 0x0C; //设置定时初值
TH0 = 0xFE; //设置定时初值
Buzzer=!Buzzer;
}

void main(){
Timer0Init();
while(1){

}
}

51单片蜂鸣器
http://example.com/2025/05/12/51单片机蜂鸣器/
Author
John Doe
Posted on
May 12, 2025
Licensed under