单片机编辑库一之延时与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演示了,有兴趣的小伙伴可以下载好仿真文件进行试验。