可分为压电蜂鸣器和电磁蜂鸣器。压电发声比较小,而电磁蜂鸣器因为线圈通电会振动,所以体积比较小。
根据驱动方式分为主动蜂鸣器和主动蜂鸣器。这里的主动和被动不是指,而是来源。主动蜂鸣器内部有一个振荡源。如图9-8所示,如果给定一个BUZZ引脚,蜂鸣器将直接鸣响。但无源蜂鸣器内部没有振荡源,必须由500 Hz到4.5 kHz之间的信号驱动才能发声。主动蜂鸣器往往比被动蜂鸣器贵,因为里面很多,驱动发音简单,可以按级别驱动,而被动蜂鸣器价格更便宜。此外,被动蜂鸣器的声音频率可以控制,音阶与频率有一定的对应关系,因此可以产生“do re mi fa sol拉斯”的效果,并可以用它产生简单的音乐曲目,如生日歌、二虎等。
图9-8蜂鸣器
让我们看看图9-8中的电路。蜂鸣器电流还是比较大的,需要驱动,增加一个100欧姆的电阻作为限流电阻。此外,增加了一个D4二极管,称为续流二极管。我们的蜂鸣器是感应装置。当三极管导通给蜂鸣器供电时,会有传导电流流过蜂鸣器。我们知道,其中一个电感是电流不能突变,接通时电流逐渐增大,这是没有问题的。但当它关断时,被“电源-三极管-蜂鸣器-地”的线路切断,不能通任何电流,那么储存的电流去哪里,也就是被D4和蜂鸣器本身的回路消耗掉,从而避免了关断时电感电流造成的反向冲击。断开时继续电流,这是续流二极管名称的由来。
蜂鸣器常用在电脑、打印机、万用表等设备上,发出提示声音。提示音一般都很简单,就是简单的发出声音。我们简单的做了一个4KHZ频率的声音节目和一个1KHZ频率的声音节目。学生可以自己研究该程序,并比较实际结果。
# & ltreg52.h>。
sbit buzz = p1^6;//bee pin
无符号字符T0RH = 0;//T0过载值的高字节
无符号字符T0RL = 0;//T0过载值的低位字节
OpenBuzz;
void StOpBuzz;
void main{
无符号int I;
TMOD = 0x 01;//将T0配置为在模式1下工作,但不要先启动
EA = 1;
{ //启用全局中断
OpenBuzz;//以4千赫兹的频率启动蜂鸣器
for;
stopBuzz;//停止蜂鸣器
for;
OpenBuzz;//启动频率为1KHz的蜂鸣器
for;
stopBuzz;//停止蜂鸣器
for;
}
}
/*蜂鸣器启动功能,频率-工作频率*/
void OpenBuzz{
无符号int reload//计算所需的过载值
reload = 65536-/;//给定计时器的过载值
T0RH =;//16位重载值分解为高字节和低字节
T0RL =重载;
TH0 = 0xFF//设置一个接近溢出的初始值,使定时器立即工作
TL0 = 0xFE
ET0 = 1;//使能T0中断
TR0 = 1;//开始T0
}
/*蜂鸣器停止功能*/
void StopBuzz{
ET0 = 0;//禁用T0中断
TR0 = 0;//停止T0
}
/* T0中断服务功能,控制蜂鸣器鸣响*/
void中断时间0{
TH0 = T0RH//重载重载值
TL0 = T0RL
BUZZ = ~ BUZZ//反向蜂鸣器控制电平
}
另外,用蜂鸣器输出音乐只是好玩,应用很少。里面有音阶和乐谱,程序有点复杂,就不详细解释了。能玩“二虎”的节目只有一个。可以下载到板子上玩,满足好奇心。
纯文本复制
#include <。reg52.h>。
sbit buzz = p1^6;//蜂鸣器控制引脚
无符号int code NoteFrequ = {//对应中音1-7和高音1-7的频率列表
523,587,659,698,784,880,988,// alto 1-7
1047,1175,1319,1397,1568,1760,1976//treble 1-7
};
无符号int code note reload= {//timer reload值对应中音1-7和高音1-7
65536-/,// alto 1
65536 - / , //2
65536 - / , //3
65536 - / , //4
65536 - / , //5
65536 - / , //6
65536 - / , //7
65536-/,//高音1
65536 - / , //2
65536 - / , //3
65536 - / , //4
65536 - / , //5
65536 - / , //6
65536 - / , //7
};
bit = 1;//蜂鸣器鸣响启用标志
位TMR flag = 0;//完成标志
无符号字符T0RH = 0xFF//T0过载值的高字节
无符号字符T0RL = 0x00//T0过载值的低位字节
void PlaytowTiger;
void main{
无符号int I;
EA = 1;//启用全局中断
TMOD = 0x 01;//将T0配置为在模式1下工作
TH0 = T0RH
TL0 = T0RL
ET0 = 1;//使能T0中断
TR0 = 1;//开始T0
while {
playwotiger;//玩音乐——两只老虎
for;//停一会儿
}
}
/*两个老虎音乐播放功能*/
void PlayWorTiger{
无符号字符节拍;//当前节拍索引
无符号字符注释;//当前节拍对应的音符
无符号int e = 0;//当前节拍计时
无符号整数BeatTime = 0;//当前节拍的总时间
无符号int SoundTime = 0;//当前节拍需要发声
//两张虎符表
无符号字符代码TwoTigerNote = {
1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5,
5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1,
};
//两只老虎拍桌子,4代表一拍,1代表1/4拍,8代表2拍
无符号字符代码TwoTigerBeat = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8,
3,1, 3,1, 4, 4, 3,1, 3,1, 4, 4, 4, 4, 8, 4, 4, 8,
};
//使用节拍索引作为循环变量
for;){
while;//每次定时器中断后,检测并处理节拍
TMR flag = 0;
If { //当前节拍结束时开始新的节拍
note = two tigernote-1;
T0RH =注意重新加载>;>。8;
T0RL = note reload;
//计算总节拍时间。向右移动2位相当于除以4。移位代替除法可以加快执行速度
beat time =>>。2;
//计算发声时间,是总时间的0.75。换挡原理同上
声音时间=节拍时间-;
enable = 1;//指示蜂鸣器开始鸣响
time++;
}e{ //如果当前节拍未结束,则处理当前节拍
//当当前时长达到总拍时间时归零。
//并增加节拍索引,为开始新的节拍做准备
if {
时间= 0;
beat++;
}否则{ //当当前时长未达到总时长时,
time++;//累计时间计数
//到达发声时间后,指示关闭蜂鸣器。
//插入0.25*总时间的静音间隔。
if {
enable = 0;//用于区分两个连续的节拍
}
}
}
}
}
/* T0中断服务功能,控制蜂鸣器鸣响*/
void中断定时器0中断1{
TH0 = T0RH//重载重载值
TL0 = T0RL
TMR flag = 1;
If { //启用时反转蜂鸣器控制电平
BUZZ = ~ BUZZ
}否则{ //当蜂鸣器未启用时将其关闭
BUZZ = 1;
}
}
原始链接:
1.《蜂鸣器程序 单片机蜂鸣器控制程序和驱动电路》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《蜂鸣器程序 单片机蜂鸣器控制程序和驱动电路》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1780952.html