51单片机实验——蜂鸣器实验

蜂鸣器简单介绍:

1.蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。

2.蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

3.压电式蜂鸣器发声,需要提供一定频率的脉冲信号;电磁式蜂鸣器发声,只需提供电源即可。 

我们开发板上使用的蜂鸣器是无源蜂鸣器,属于压电式蜂鸣器类型。 

蜂鸣器实物图,如下:

 对于无源蜂鸣器,如果改变频率就可以调节蜂鸣器音调,产生各种不同音色、音调的声音。如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小。

要实现蜂鸣器的控制,我们能否直接使用单片机的IO口驱动呢?

不能。这是因为51单片机IO口的驱动能力较弱(即使外接上拉电阻),而蜂鸣器驱动需要约30mA,所以非常困难,即使可以驱动,那对于整个芯片的其它IO剩下驱动能力就更加弱甚至无法工作。所以我们不会直接使用IO口驱动蜂鸣器,而是通过三极管把电流放大后再驱动蜂鸣器。

开发板上的蜂鸣器模块电路如下:

 

从图中可以看出,蜂鸣器控制管脚直接连接到51单片机的P2.5管脚上。图中并没有使用三极管进行电流放大,而是使用ULN2003芯片来驱动,具体大家可以去搜搜。我们只需要知道P25输出高电平,BEEP则输出低电平;当P25输出低电平,BEEP则输出高电平。

开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲才会发声,因此需要让P25脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音。

代码如下:

#include "reg52.h"

typedef unsigned int u16;//对系统默认数据类型进行重定义
typedef unsigned char u8;

sbit BEEP=P2^5;  //将P2.5管脚定义为BEEP

//延时函数
void delay_10us(u16 ten_us)
{
   while(ten_us--);
}

void main()
{
   u16 i=2000;
	 while(1)
	 {
	    while(i--) //循环2000次
			{
			 BEEP=!BEEP; //产生一定频率的脉冲信号
			 delay_10us(100);
			}
			i=0;  //清零
			BEEP=0;  //关闭蜂鸣器
	 }
}

 若修改变量i的值可以改变蜂鸣器发声时间。

若要改变音调可以修改延时时间,但要注意频率不能太大或者太小,具体大家可以试着调试。若要改变音量,可以修改BEEP输出高电平时间,如下:

BEEP=1;
delay_10us(190);
BEEP=0;
delay_10us(10);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值