1.介绍
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。NEBULA-PI 单片机开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图 5-1 所示:
这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。一般而言,驱动蜂鸣器需要较大的电流,单片机的 I/O 口不适合直接驱动,我们通过三极管电路来驱动蜂鸣器。
三极管根据材料不同分为两种,一种为 PNP 型三极管,另一种为 NPN 型三级管。如下图所示。
作为模拟电路的基本元器件,三极管的放大特性经常被使用。在数字电路中三极管的开关特性用到的尤其多。三极管包含三个管脚,分别为基级 b(base),发射机 e(emitter),集电极 c(collector)。对于 PNP 行的三极管而言,当 e 级电压大于 b 级电压 0.7V 时,e 级,c 级导通,否则开路。因此,可以通过控制 e,b 两端的电压实现对 e,c 两端通断的控制,这就是三极管的开关特性。同理,对于 PNP 行的三极管而言,当 b 级电压大于 e 级电压 0.7V 时,e 级,c 级导通,否则开路。
2.硬件设计
VCC 给出 5V 电压,当 P00 = 0 时,B 端为低电平,E 和 B 的电压差大于 0.7V 则 EC 通,蜂鸣器电路通电所以发出响声,当 P00=1 时,B 端为高位电平,E 和 B 电压差小与 0.7V,开路状态,蜂鸣器电路不通,所以蜂鸣器不响。
代码
代码在 LED 基础上加入了蜂鸣器模块
#include <STC89xx.h>
int i;
int flag = 0;
void main()
{
while (1)
{
// 因为引入了STC89HEAD所以直接使用P00,给出低位,蜂鸣器通
P00 = 0;
// 亮一个LED后
P1 = ~(0x01 << flag);
// 给出高位,蜂鸣器不通
P00 = 1;
for (i = 0; i < 2000; i++)
;
if (flag > 8)
{
flag = 0;
}
else
{
flag++;
}
}
}