前言
上一节,我们完成了按键操作,本节我们学习使用蜂鸣器,首先我们介绍下蜂鸣器,然后完成实验:上电后默认驱动频率为5KHZ,通过KEY1控制驱动频率为1KHZ ,蜂鸣器,KEY2控制驱动频率为 2KHZ,可以听到不同的效果。
一、基础知识
1.蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器按照原理来分可以分为有源蜂鸣器和无缘蜂鸣器,有源蜂鸣器和无源蜂鸣器并不是说蜂鸣器内部是否含有电源,这里的有源和无源是指内部是否含有RC震荡电路。想要无源蜂鸣器发声,需提供一定频率的脉冲信号; 想要有源蜂鸣器发声, 只需提供电源即可。蜂鸣器频率一般在1.5-5KHz 之间,有源蜂鸣器的实物如下图所示:
2.硬件设计
打开硬件设计电路,蜂鸣器相关电路如下
注意:不可以用单片机I/O口直接驱动蜂鸣器发声,因为I/O口驱动负载能力有限,通常蜂鸣器正常工作,需要通过30mA左右电流,因此我们使用三极管放大电路解决这个问题,采用放大电路后, 51 单片机的 IO 口只需要提供不到 1mA 的电流就可控制蜂鸣器。
二、实例
1.创建工程
将上一节工程复制出来,并修改名字为03-beep
2.修改程序
#include<reg51.h> //头文件
#include <intrins.h>
sbit Buzzer=P3^7; //定义P3.7为喇叭驱动端
sbit key1 = P2^4;
sbit key2 = P2^5;
void Delay500us() //500us延迟函数,用于产生1KHZ信号
{
unsigned char i;
nop();
i = 227;
while (--i);
}
void Delay250us() //250us延迟函数,用于产生2KHZ信号
{
unsigned char i;
nop();
i = 112;
while (--i);
}
void delay_ms(int ms)
{
int val = 110;
for (;ms >0; ms--)
{
while(val--);
}
}
void Delay100us() //@11.0592MHz
{
unsigned char i;
nop();
i = 43;
while (--i);
}
main() //主函数
{
while(1)
{
if (key1 == 0 || key2 == 0)
{
delay_ms(10);
if (key1 == 0)
Delay500us(); // 1KHZ
else if(key2 == 0)
Delay250us(); // 2KHZ
}else
{
Delay100us(); // 5KHZ
}
Buzzer=~Buzzer; //喇叭驱动位取反
}
}
程序中检测KEY1和KEY2的状态,当按下KEY1时候,修改蜂鸣器驱动频率为1KHZ,KEY2按键按下时候,蜂鸣器驱动频率为2KHZ,可以听到不同的声音效果。
注意:软件精确延时时间可以利用STC-ISP工具实现。
三、结语
如您在使用过程中有任何问题,请加QQ群进一步交流。
QQ交流群:906015840 (备注:物联网项目交流)
源码获取:扫描下方二维码,关注公众号,回复"51单片机"即可
硬件获取:淘宝搜索店铺"小驿物联"。
一叶孤沙出品:一沙一世界,一叶一菩提