51单片机玩转物联网基础篇04-蜂鸣器

前言

上一节,我们完成了按键操作,本节我们学习使用蜂鸣器,首先我们介绍下蜂鸣器,然后完成实验:上电后默认驱动频率为5KHZ,通过KEY1控制驱动频率为1KHZ ,蜂鸣器,KEY2控制驱动频率为 2KHZ,可以听到不同的效果。

一、基础知识

1.蜂鸣器简介

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

蜂鸣器按照原理来分可以分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器和无源蜂鸣器并不是说蜂鸣器内部是否含有电源,这里的有源和无源是指内部是否含有RC震荡电路。想要无源蜂鸣器发声,需提供一定频率的脉冲信号; 想要有源蜂鸣器发声, 只需提供电源即可。蜂鸣器频率一般在1.5-5KHz 之间,有源蜂鸣器的实物如下图所示:

51单片机玩转物联网基础篇04-蜂鸣器

2.硬件设计

打开硬件设计电路,蜂鸣器相关电路如下

51单片机玩转物联网基础篇04-蜂鸣器

注意:不可以用单片机I/O口直接驱动蜂鸣器发声,因为I/O口驱动负载能力有限,通常蜂鸣器正常工作,需要通过30mA左右电流,因此我们使用三极管放大电路解决这个问题,采用放大电路后, 51 单片机的 IO 口只需要提供不到 1mA 的电流就可控制蜂鸣器。

二、实例

1.创建工程

将上一节工程复制出来,并修改名字为03-beep

51单片机玩转物联网基础篇04-蜂鸣器

2.修改程序

#include //头文件

#include

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工具实现。

51单片机玩转物联网基础篇04-蜂鸣器

一叶孤沙出品:一沙一世界,一叶一菩提


分享到:


相關文章: