蜂鸣器
蜂鸣器简介
蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号,蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器
有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。
以上图片是蜂鸣器的图片
驱动方式
蜂鸣器目前大概有两种驱动方式一种是三极管驱动,另一种是集成电路驱动,使用更多的是三极管驱动,用第一种三极管驱动方式距离,当中央给予高电平时,三极管开关打开,电路联通,蜂鸣器启动
ULN2003
因为开发板使用的是ULN2003,那就简单介绍一下吧,大概就是一个取反的器件,此电路板由P2^5控制,所以要使蜂鸣器得以演奏,P2^5得处于高电平。
任务一,初步使用蜂鸣器
学习完蜂鸣器之后,就可以简单运用一下蜂鸣器了,此任务就是按下独立按键的时候,蜂鸣器响应半秒钟,并是LED显示。只要学会了其运行机理,代码还是蛮简单的,如下所示:
Buzzer.h
#ifndef __BUZZER_H__
#define __BUZZER_H__
void Buzzer_Time(unsigned int ms);
void Buzzer_Delay500us() ;
#endif
Buzzer.c
#include <REGX52.H>
#include "Delay.h"
#include <intrins.h>
//蜂鸣器端口
sbit Buzzer=P2^5;
//蜂鸣器私有延时500us函数
void Buzzer_Delay500us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 227;
while (--i);
}
//蜂鸣器发声函数 参数ms为发声时间
void Buzzer_Time(unsigned int ms)
{
unsigned int i;
for(i=0;i<ms*2;i++)
{
Buzzer=!Buzzer;
Buzzer_Delay500us();
}
}
main函数
#include <REGX52.H>
#include "Key.h"
#include "Delay.h"
#include "Nixie.h"
#include "Buzzer.h"
unsigned char KeyNum;
void main()
{
Nixie(1,0);
while(1)
{
KeyNum=Key();
if(KeyNum)
{
Nixie(1,KeyNum);
Buzzer_Time(1000);
}
}
}
任务二——通过蜂鸣器演奏简单的歌曲
想要完成此任务,就需要一点乐理知识了。
音符与频率对照表
由于频率可以用周期显示,所以需要将评率转换为周期,此板子使用的是11.0592兆hz的晶振,所以需要一定的运算将其进行转换,我将文件传上去,需要的话自行下载,通过那个表格就可以利用数组将其存储起来,就可以演奏了
main函数:
#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"
sbit Buzzer=P2^5;
unsigned int FreqTable[]={
0,
63465,63577,63691,63792,63892,63981,64070,64152,64229,64303,64372,64438,
64499,64557,64612,64664,64713,64759,64803,64844,64883,64919,64954,64987,
65017,65047,65074,65100,65124,65148,65169,65190,65209,65228,65245,65261};
#define SPEED 353
#define P 0
#define L1 1
#define L1_ 2
#define L2 3
#define L2_ 4
#define L3 5
#define L4 6
#define L4_ 7
#define L5 8
#define L5_ 9
#define L6 10
#define L6_ 11
#define L7 12
#define M1 13
#define M1_ 14
#define M2 15
#define M2_ 16
#define M3 17
#define M4 18
#define M4_ 19
#define M5 20
#define M5_ 21
#define M6 22
#define M6_ 23
#define M7 24
#define H1 25
#define H1_ 26
#define H2 27
#define H2_ 28
#define H3 29
#define H4 30
#define H4_ 31
#define H5 32
#define H5_ 33
#define H6 34
#define H6_ 35
#define H7 36
unsigned char code Music[]={
//1
P,2,
L7,2,
M1,2,
M5,2,
M5,4,
M1,4,
P,4,
L7,2,
M1,2,
M1,4,
L5,4,
P,2,
L7,2,
M1,2,
M5,2,
M5,4,
M1,4,
P,4,
L7,2,
M1,2,
M1,4,
L5,2,
L6,2,
//2
P,2,
L7,2,
M1,2,
M5,2,
M5,4,
M1,4,
P,0,
L7,2,
M1,2,
M1,4,
L5,4,
P,2,
L7,2,
M1,2,
M5,2,
M5,4,
M1,4,
P,4,
L7,2,
M1,2,
L7,2,
L5,2,
L6,4,
//3
P,2,
L7,2,
M1,2,
M5,2,
M5,4,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
M1,2,
M1,2,
M1,2,
L7,2,
M1,2,
L7,2,
M5,2,
M5,4,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
M1,2,
M1,2,
M1,2,
//4
L7,2,
M1,2,
L7,2,
M5,2,
M5,4,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
L7,2,
M1,2,
M1,2,
M1,2,
L7,2,
M1,2,
L7,2,
M5,2,
M5,4,
M2,2,
M3,2,
M5,2,
H2,4,
H7,4,
M1,2,
0xFF
};
unsigned char FreSelect,MusicSelect;
void main()
{
Timer0Init();
while(1)
{
if(Music[MusicSelect]!=0xFF)
{
FreSelect=Music[MusicSelect];
MusicSelect++;
Delay(SPEED/4*Music[MusicSelect]);
MusicSelect++;
TR0=0;
Delay(5);
TR0=1;
}
else
{
TR0=0;
while(1)
{
}
}
}
}
void Timer0_Routine() interrupt 1
{
if(FreqTable[FreSelect])
{
TL0 = FreqTable[FreSelect]%256; //设置定时初值
TH0 = FreqTable[FreSelect]/256; //设置定时初值
Buzzer=!Buzzer;
}
}
这是演奏的是贾斯丁比伯的stay的前面部分,下面是演示视频
51单片机蜂鸣器演奏stay
总结
今天学习了蜂鸣器的使用,还算比较简单,最复杂的算是将简谱转换到编程语言的过程,因为比较繁琐,以后可以通过简谱给喜欢的歌曲用蜂鸣器演奏出来啦!!
音符与频率对照
音符与频率对照音符与频率对照音符与频率对照yinfu