这个小节我们来看一下在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() { unsigned char i, j;
i = 6; j = 211; do { while (--j); } while (--i); }
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) { TMOD &= 0xF0; TMOD |= 0x01; TL0 = 0x90; TH0 = 0xE8; TF0 = 0; TR0 = 1; ET0=1; EA=1; }
void Timer0_Init() interrupt 1 { TL0 = 0x0C; TH0 = 0xFE; Buzzer=!Buzzer; }
void main(){ Timer0Init(); while(1){ } }
|