


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本文格式为Word版,下载可任意编辑单片机蜂鸣器控制程序和驱动电路 蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震惊发音,体积比较小。 根据驱动方式分为有源蜂鸣器和无源蜂鸣器。这里的有源和无源不是指电源,而是振荡源。有源蜂鸣器内部带了振荡源,如图所示中,给了 BUZZ 引脚一个低电平,蜂鸣器就会直接响。而无源蜂鸣器内部是不带振荡源的,要让他响必需给 500Hz4.5KHz 之间的脉冲频率信号来驱动它才会响。有源蜂鸣器往往比无源蜂鸣器贵一些,由于里边多了振荡电路,驱动发音也简洁,靠电平就可以驱动,而无源蜂鸣器价格比较廉价,此外无源
2、蜂鸣器声音频率可以掌握,而音阶与频率又有确定的对应关系,因此就可以做出来“do re mi fa sol la si”的效果,可以用它制作出简洁的音乐曲目,比如生日歌、两只老虎等等。 图 蜂鸣器电路原理图 我们来看一下图的电路,蜂鸣器电流依旧相对较大,因此需要用三极管驱动,并且加了一个 100 欧的电阻作为限流电阻。此外还加了一个 D4 二极管,这个二极管叫做续流二极管。我们的蜂鸣器是感性器件,当三极管导通给蜂鸣器供电时,就会有导通电流流过蜂鸣器。而我们知道,电感的一个特点就是电流不能突变,导通时电流是渐渐加大的,这点没有问题,但当关断时,经“电源-三极管-蜂鸣器-地”这条回路就截断了,过不了
3、任何电流了,那么储存的电流往哪儿去呢,就是经过这个 D4 和蜂鸣器自身的环路来消耗掉了,从而就避开了关断时由于电感电流造成的反向冲击。接续关断时的电流,这就是续流二极管名称的由来。 蜂鸣器常常用于电脑、打印机、万用表这些设备上做提示音,提示音一般也很简洁,就是简洁发出个声音就行,我们用程序简洁做了个 4KHZ 频率下的发声和 1KHZ 频率下的发声程序,同学们可以自己讨论下程序,比较下实际效果。 #include sbit BUZZ = P16; /蜂鸣器掌握引脚 unsigned char T0RH = 0; /T0 重载值的高字节 unsigned char T0RL = 0; /T0 重
4、载值的低字节 void OpenBuzz(unsigned int frequ); void StopBuzz(); void main() unsigned int i; TMOD = 0x01; /配置 T0 工作在模式 1,但先不启动 EA = 1; while (1) /使能全局中断 OpenBuzz(4000); /以 4KHz 的频率启动蜂鸣器 for (i=0; i40000; i+); StopBuzz(); /停止蜂鸣器 for (i=0; i40000; i+); OpenBuzz(1000); /以 1KHz 的频率启动蜂鸣器 for (i=0; i40000; i+);
5、 StopBuzz(); /停止蜂鸣器 for (i=0; i40000; i+); /* 蜂鸣器启动函数,frequ-工作频率 */ void OpenBuzz(unsigned int frequ) unsigned int reload;/计算所需的定时器重载值 reload = 65536 - (11059200/12)/(frequ*2); /由给定频率计算定时器重载值 T0RH = (unsigned char)(reload 8); /16 位重载值分解为凹凸两个字节 T0RL = (unsigned char)reload; TH0 = 0xFF; /设定一个接近溢出的初值,以
6、使定时器立刻投入工作 TL0 = 0xFE; ET0 = 1; /使能 T0 中断 TR0 = 1; /启动 T0 /* 蜂鸣器停止函数 */ void StopBuzz() ET0 = 0; /禁用 T0 中断 TR0 = 0; /停止 T0 /* T0 中断服务函数,用于掌握蜂鸣器发声 */ void InterruptTimer0() interrupt 1 TH0 = T0RH; /重新加载重载值 TL0 = T0RL; BUZZ = BUZZ; /反转蜂鸣器掌握电平 另外用蜂鸣器来输出音乐,仅仅是好玩而已,应用很少,里边包含了音阶、乐谱的相关内容,程序也有一点简单,所以就不具体给大家
7、去讲解了。仅供应一个可以播放两只老虎的程序,大家可以下载到板子上玩玩,满意一下奇怪心。 纯文本复制 #include sbit BUZZ = P16; /蜂鸣器掌握引脚 unsigned int code NoteFrequ = /中音 1-7 和高音 1-7 对应频率列表 523, 587, 659, 698, 784, 880, 988, /中音 1-7 1047, 1175, 1319, 1397, 1568, 1760, 1976 /高音 1-7 ; unsigned int code NoteReload = /中音 1-7 和高音 1-7 对应的定时器重载值 65536 - (11
8、059200/12) / (523*2), /中音 1 65536 - (11059200/12) / (587*2), /2 65536 - (11059200/12) / (659*2), /3 65536 - (11059200/12) / (698*2), /4 65536 - (11059200/12) / (784*2), /5 65536 - (11059200/12) / (880*2), /6 65536 - (11059200/12) / (988*2), /7 65536 - (11059200/12) / (1047*2), /高音 1 65536 - (1105920
9、0/12) / (1175*2), /2 65536 - (11059200/12) / (1319*2), /3 65536 - (11059200/12) / (1397*2), /4 65536 - (11059200/12) / (1568*2), /5 65536 - (11059200/12) / (1760*2), /6 65536 - (11059200/12) / (1976*2), /7 ; bit enable = 1; /蜂鸣器发声使能标志 bit tmrflag = 0; /定时器中断完成标志 unsigned char T0RH = 0xFF; /T0 重载值的高字
10、节 unsigned char T0RL = 0x00; /T0 重载值的低字节 void PlayTwoTiger(); void main() unsigned int i; EA = 1; /使能全局中断 TMOD = 0x01; /配置 T0 工作在模式 1 TH0 = T0RH; TL0 = T0RL; ET0 = 1; /使能 T0 中断 TR0 = 1; /启动 T0 while (1) PlayTwoTiger(); /播放乐曲-两支老虎 for (i=0; i40000; i+); /停止一段时间 /* 两支老虎乐曲播放函数 */ void PlayTwoTiger() un
11、signed char beat; /当前节拍索引 unsigned char note; /当前节拍对应的音符 unsigned int time = 0; /当前节拍计时 unsigned int beatTime = 0; /当前节拍总时间 unsigned int soundTime = 0; /当前节拍需发声时间 /两只老虎音符表 unsigned char code 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, ;
12、/两只老虎节拍表,4 表示一拍,1 就是 1/4 拍,8 就是 2 拍 unsigned char code 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 (beat=0; beat while (!tmrflag); /每次定时器中断完成后,检测并处理节拍 tmrflag = 0; if (time = 0) /当前节拍播完则启动一个新节拍 note = TwoTigerNotebeat
13、- 1; T0RH = NoteReloadnote 8; T0RL = NoteReloadnote; /计算节拍总时间,右移 2 位相当于除 4,移位代替除法可以加快执行速度 beatTime = (TwoTigerBeatbeat * NoteFrequnote) 2; /计算发声时间,为总时间的 0.75,移位原理同上 soundTime = beatTime - (beatTime 2); enable = 1; /指示蜂鸣器开头发声 time+; else /当前节拍未播完则处理当前节拍 /当前持续时间到达节拍总时间时归零, /并递增节拍索引,以预备启动新节拍 if (time = beatTime) time = 0; beat+; else /当前持续时间未达到总时间时, time+; /累加时间计数 /到达发声时间后,指示关闭蜂鸣器, /插入 0.25*总时间的静音间隔, if (time = soundTim
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届辽宁省丹东二十九中学英语九上期末监测模拟试题含解析
- 钢质门施工方案范本
- 2026届黑龙江省牡丹江一中学九上化学期中调研试题含解析
- 婴幼儿照料培训
- 2026届浙江省杭州市萧山区北干初级中学英语九上期末经典模拟试题含解析
- 四川省南充市第五中学2026届英语九上期末综合测试试题含解析
- 小学年度工作总结
- 2026届云南省丽江市名校九年级化学第一学期期中质量检测试题含解析
- 2026届吉林省东北师范大附属中学化学九年级第一学期期中学业水平测试试题含解析
- 2026届福建省福州市第十九中学英语九上期末检测模拟试题含解析
- 2023年全国职业院校技能大赛-互联网+国际经济与贸易赛项规程
- 《乌鲁木齐市国土空间总体规划(2021-2035年)》
- SY-T 5333-2023 钻井工程设计规范
- 中山红色文化
- 维保的可行性报告
- 海南省2023年中考历史试题(含答案)
- 教学案例的撰写讲稿分析课件
- 定制手办目标市场调研
- 微商新手培训课件
- 美发与形象设计-高级美发全套教学课件
- 产品耐压、绝缘、接地测试报告
评论
0/150
提交评论