Advertisement

51单片机 | 蜂鸣器实验

阅读量:

文章目录

    • 一、 蜂鸣器介绍
    • 二、硬件设计
    • 三、软件设计
    • 四、实验现象

通过单片机的一个 IO 口控制 板载无源蜂鸣器 ,实现蜂鸣器控制。

一、 蜂鸣器介绍

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电 ,广泛应用于计算机、 打印机、 复印机、 报警器、 电子玩具、 汽车电子设备、 电话机、 定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器电磁式蜂鸣器 两种类型。
压电式蜂鸣器 (无源蜂鸣器)主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。
电磁式蜂鸣器 (有源蜂鸣器)由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
其实一句话就可概括它们之间的区别,想要压电式蜂鸣器发声,需提供一定频率的脉冲信号 (高低电平);想要电磁式蜂鸣器发声,只需提供电源 即可。
我们开发板上使用的蜂鸣器是无源蜂鸣器,属于压电式蜂鸣器类型。这里说的有源和无源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一定频率的脉冲信号才能发声,频率大小通常在 1.5-5KHz 之间。蜂鸣器实物图如下图所示:
在这里插入图片描述
对于无源蜂鸣器,如果改变频率 就可以调节蜂鸣器音调,产生各种不同音色 、音调的声音。如果改变输出电平的高低电平占空比 ,则可以改变蜂鸣器的声音大小
对于有源蜂鸣器,通常内部已经固定了频率 ,对于调节频率或占空比可能改变不了蜂鸣器的音调和音量,当然也有的有源蜂鸣器可以实现和无源蜂鸣器一样的效果。

二、硬件设计

在前面章节中我们已经对 51 单片机的 GPIO 做了简单介绍,并且还使用了其中 IO 口直接控制开发板上的 LED。对于本章要实现蜂鸣器的控制,我们能否直接使用单片机的 IO 口驱动呢?答案是否定 的,因为 51 单片机 IO 口的驱动能力较弱(即使外接上拉电阻),而蜂鸣器驱动需要约 30mA,所以非常困难,即使可以驱动,那对于整个芯片的其它 IO 剩下驱动能力就更加弱甚至无法工作。所以,我们不会直接使用 IO 口驱动蜂鸣器,而是通过三极管把电流放大后再驱动蜂鸣器,这样 51 单片机的 IO 口只需要提供不到 1mA 的电流就可控制蜂鸣器。所以我们也经常说到 51 单片机是用来做控制的,而不是驱动。
我们开发板上的蜂鸣器模块电路如下图所示:
在这里插入图片描述
从图中可以看出,蜂鸣器控制管脚直接连接到 51 单片机的 P2.5 管脚上。图中并没有使用三极管进行电流放大,而是使用 ULN2003 芯片来驱动,有关 ULN2003芯片只需知道当 P2.5 输出高电平,BEEP 则输出低电平;当 P2.5 输出低电平,BEEP 则输出高电平,类似一个非门。
开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲(高低电平)才会发声,因此需要让 P2.5 脚以一定频率不断输出高低电平信号 才能控制蜂鸣器发出声音。

三、软件设计

蜂鸣器实验所实现的功能是:让蜂鸣器发出声音,一段时间后再关闭,即让 P2.5管脚输出一定频率的脉冲信号(高低电平)控制无源蜂鸣器
我们直接复制前面创建好的工程模板,将复制过来的模板文件夹重新命名为“5-蜂鸣器实验”。打开工程直接在 main.c 源文件内进行编程,main.c 内代码如下:

复制代码
    /*
    实验名称:蜂鸣器实验
    接线说明:
    实验现象:下载程序后蜂鸣器发出声音,一段时间后关闭
    */
    
    #include "reg52.h"
    
    //对系统默认数据类型进行重定义 
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    //将P2.5管脚定义为BEEP
    sbit BEEP = P2^5;
    
    /*
    函 数 名 : delay_10us
    函数功能 : 延时函数,ten_us=1 时,大约延时 10us
    输 入 : ten_us
    */
    void delay_10us(u16 ten_us)
    {
    	while (ten_us--);
    }
    
    
    
    void main()
    {
    	u16 i = 2000;	
    	while (1)
    	{  	
    	 	while (i--)
    		{
    			//P2.5管脚有上拉电阻,默认输出为高电平
    			BEEP = !BEEP; //产生一定频率的脉冲信号
    			//假设脉冲信号频率为2Khz,那么周期为0.5ms
    			delay_10us(50);
    		}
    		i = 0; //清零,否则会一直响不会停止
    		BEEP = 0; //关闭蜂鸣器
    	}
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

至此,整个程序就编写完成,我们编译一下,如下图所示:
在这里插入图片描述
可以看到没有错误,也没有警告。
若要改变音调可以修改延时时间,但要注意频率不能太大或者太小。若要改变音量,可以修改 BEEP 输出高电平时间。比如:将循环中设置为:

复制代码
    BEEP=1;
    delay_10us(190);
    BEEP=0;
    delay_10us(10);
    
    
      
      
      
      
    

四、实验现象

使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),把编译后产生的.hex 文件烧入到芯片内,可以听到开发板上蜂鸣器发出美妙的声音,一段时间后关闭。

全部评论 (0)

还没有任何评论哟~