单片机编辑库三之蜂鸣器

2023-05-16

单片机编辑库一之延时与led灯
单片机编辑库二之按键
单片机编辑库三之蜂鸣器

单片机编辑库三之蜂鸣器

先给大家科普一下常见的有源蜂鸣器和无源蜂鸣器,小白可以看一下,入门就直接跳代码吧哈哈
我这里只讲解下,需要更深入一点了解的给大家一个传送门:蜂鸣器传送

一、蜂鸣器的原理

蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。

二、蜂鸣器声音的改变

改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。
改变输出电平的高低电平占空比(改变高电平比上整个周期的时间),则可以控制蜂鸣器的声音大小

有源蜂鸣器与无源蜂鸣器

注:这里的“源”不是指电源,而是指振荡源。

有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。
有源蜂鸣器:
有源蜂鸣器
有源蜂鸣器驱动方法:
在这里插入图片描述

无源蜂鸣器:
在这里插入图片描述
无源蜂鸣器驱动方法:
在这里插入图片描述

如将两种蜂鸣器的引脚都朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。

迸一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "-"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;

如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。 有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。

例程三:蜂鸣器

beep.h:

#ifndef _BEEP_H
#define _BEEP_H

#include "reg52.h"
#include "delay.h"


#define BEEP_TIME 100 //蜂鸣器鸣叫时间,BEEP_TIME*100us
#define BEEP_CYC 60 //蜂鸣器鸣叫占空比,范围 1-99
sbit beep=P3^7;



void beep_work();//蜂鸣器鸣叫

void beep_init();//初始化LED系统

#endif

beep.c:

#include "beep.h"
/*
*仿真中的蜂鸣器需要通过周期信号才能鸣叫,下面的程序就是一个可以使他鸣叫的程序,可根据自己的需求更改
*/
void beep_init()
{
	beep=0;//使该引脚为低电平
}

void beep_work()//蜂鸣器鸣叫
{
	int i=0;
	for(i=0;i<BEEP_TIME;i++)
	{
		beep=1;
		delay_100us(BEEP_CYC);
		beep=0;
		delay_100us(100-BEEP_CYC);
	}
}

处理函数:
handle.h:

#ifndef _HANDLE_H
#define _HANDLE_H

//为了方便起见,可以把主函数里面包含的头文件全部包含在这里,除了"handle.h"
#include "reg52.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "beep.h"

void handle_Init();//初始化处理函数

void handele_led();//led处理函数
void handele_key();//按键处理函数
void handele_beep();//蜂鸣器处理函数

#endif

handle.c:

/*
		该函数用于处理所有需要实现的功能函数,目的是减少在主函数中程序显得杂乱
*/
#include "handle.h"

void handle_Init()//初始化处理函数
{
	led_init();//初始化LED系统
	beep_init();//蜂鸣器初始化
}

void handele_led()//led处理函数
{
	water_Lamp();
}

void handele_beep()//蜂鸣器处理函数
{
	beep_work();
}

void handele_key()//按键处理函数
{
	key_scan();//按键扫描函数在此处调用
	
	if(KeyValue!=0)//如果有按键按下
	{
		switch(KeyValue)
		{
			case 1://如果按下的是按键1,点亮led
				lamp_flag=1;
				led_on();
				delay_ms(100);
				break;
			case 2://如果按下的是按键2,熄灭led
				led_off();
				break;
			case 3://如果按下的是按键3,熄灭蜂鸣器鸣叫
				handele_beep();
				break;
			
			default:break;
		}
	}
}

主程序:
main.c:

#include "reg52.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "beep.h"


#include "handle.h"


void main()
{
	handle_Init();//调用初始化处理函数
	
	while(1)
	{
		handele_led();//调用led处理函数
		handele_key();//调用按键处理函数
	}
}


蜂鸣器程序框架

在这里插入图片描述

仿真图

由于蜂鸣器的例程较为简单,效果就是按下第三个按键后蜂鸣器会发声,其他两个按键为上一节的流水灯效果,这里就不给大家做GIF演示了,有兴趣的小伙伴可以下载好仿真文件进行试验。
在这里插入图片描述

程序下载

程序传送门

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机编辑库三之蜂鸣器 的相关文章

随机推荐