单片机控制蜂鸣器鸣奏音乐_第1页
单片机控制蜂鸣器鸣奏音乐_第2页
单片机控制蜂鸣器鸣奏音乐_第3页
单片机控制蜂鸣器鸣奏音乐_第4页
单片机控制蜂鸣器鸣奏音乐_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机控制蜂鸣器鸣奏音乐一一中北大学:马政贵首先介绍蜂鸣器的发声原理。我们都知道,音调和音调的时长是音符的主要特征, 通过产生不同的音调和音调的时长可以奏出不同的音符来。然后一个个音符串联在一 起就可以产生美妙的音乐来了。音调主要由声音的频率决定,通过单片机给蜂鸣器不同 的音频脉冲来产生不同的音调。要产生音频脉冲,只要算出某一音频的周期(周期=1/频率), 然后将此周期除以2即为半周期的时间。利用单片机的定时器工作在计数模式MODE1 F, 设定THO和TLO的值以产生这半个周期,每当计时到达时就将输出脉冲的DO (即接蜂鸣 器的那个管脚)反相,然后重复计时此半个周期再对I/O反相,就可以在I

2、/O引脚上得到此 频率的脉冲。如果没有必要进行精确的计时,可以用for循坏空语句来粗略计时即可(本文 选用此法)。当单片机使用11.0592M11Z的晶振时,for(i=0;i115;i+);这个空循环延时约为 1ms;当晶振选用12M11Z时,可使用fbr(i=O;i125;i+);这个空循环来延时1ms。在这个空循 环外头再进行一次循环就可以实现延时若干ms。女山实现延时若干ms,晶振为11.0592M11Z void delay(unsigned int i)unsigned charj; wliile(i-)foi(j=0j115j+);例如delav(lOOO)便可以实现延时Is实现

3、延时若干ms,晶振为12Mhz void delav(unsigned int i)unsigned chai j; wliile(i-)for(j=Oj125j+);例如delay(1000)编便可以实现延时Is知道如何产生不同的频率的音调和进行音调的延时的之后,我们便可以编写程序来 让单片机控制蜂鸣器来鸣奏音乐了。下面附上不同音调所对应的频率表:61 Cg备音符频率与计数值T的对腕表音符類宰(Hz)简语码T值)音符强率(Hz)画溝码(T值丿低1 DO26263628W4FA*74064860 1 DO#27763731中5 SO78464898M 2 RE294638355SO#83164

4、934#2 RE#31163928中6LA88064968fi 3M33064021#6932649944FA34964103中7S!98365030#4 FA*37064I&5岛1DO104665058低5 SO39264260# 1 DO#110965085#5SO*41564331岛2RE117565110低6 LA44064400#2RE#124565134646664463高3M131865157ft 7 SI49464524高4FA139765178中1 DO523645S0W4FA#14806519SVIDO*55464633rft 5 SO156865217中2 RE58764

5、684*5SO#166165235#2 RE#62264732高6 LA1760I65252中3M65964777侑61865I65268中4 FA69864S20高7 SI196765283下文介绍了让单片机控制蜂鸣器进行鸣奏音乐的两种方法。第一种方法是基础的方 法,就是顺序地让蜂鸣器挨个地演奏每个音符。方法一:(此歌曲是莫斯哥郊外的晚上的乐曲)#include sbit finq=P3A6;void delay(unsigned int a)unsigned char b;wlule(a)foi(b=0;b115;b+);void yaiizou(unsigned char unsigne

6、d mt pai)unsigned char y;unsigned mt j;fbr(j=Ojpaij+)finq=0; for(y=0;yi;y+); finq=l;for(y=0;yi;y+);void mam()wlule(l)vanzou(65,220);l/2拍中音6yanzou(55,262);/1/2拍高音1yanzou(44,330);1/2拍高音3yanzou(55,262);/1/2 拍高音1yaiizou(49,587);/I拍高音2yaiizou(55,262);/1/2 拍高音1yaiizou(5&247);/1/2 拍中音7yanzou(44,660);/I拍高音3

7、yanzou(49,587);/I拍高音2yaiizou(65,880);2拍中音6yanzou(55,262);/1/2拍高音1yaiizou(44,330);1/2拍高音3yaiizou(37,392);/1/2 拍高音5yanzou(37,392);/1/2 拍高音5vanzou(65,440);/I拍中音6yanzou(37,392);/1/2 拍高音5yanzou(41,349);/1/2 拍高音4yaiizou(44,2640);4拍高音3yaiizou(4L698);/I拍高音4yanzou(37,784);/I拍高音5yanzou(29,492);/1/2 拍高音7yanzou

8、(33,440);/1/2 拍高音6yanzou(44,660);/I拍咼首3delav(250);yaiizou(5 8,494);/I拍中音7yaiizou(65,220);1/2拍中音6yanzou(44,330);1/2拍高音3yanzou(49,293);/1/2 拍高音2yanzou(41,698);1拍咼音4yanzou(4L698);/I拍高音4yanzou(37,392);l/2 拍咼音5yanzou(41,349);/1/2 拍高音4yaiizou(44,660);/I拍咼音3yanzou(49,293);/1/2 拍咼音2yaiizou(55,262);/1/2拍高音1y

9、anzou(44,660);/I拍高音3yaiizou(49,587);/I拍高音2yaiizou(65,880);2拍中音6yaiizou(65,880);2拍中音6yanzou(4L698);/I拍高音4yaiizou(3 7,784);/I拍高音5yaiizou(29,492);/1/2 拍高音7yaiizou(33,440);/1/2 拍高音6yaiizou(44,660);1拍咼音3delav(250);yanzou(5 &494);1拍中音7yanzou(65,220);1/2拍中音6yaiizou(44,330);/1/2拍高音3yanzou(49,293);/1/2 拍高音2y

10、anzou(41,698);/I拍高音4yanzou(4L698);/I拍高音4yanzou(37,392);/1/2 拍咼音5yaiizou(41,349);/1/2 拍咼音4yaiizou(44,660);1拍咼音3yaiizou(49,293);/1/2 拍高音2yanzou(55,262);/1/2拍高音1yanzou(44,660);/I拍咼音3yanzou(49,587);1拍咼音2yanzou(65,880);2 拍 中音 6yanzou(65,880);/2拍 中音6delav(5000);观察方法一的主函数可以发现,每个语句的形式和实现的功能都是一样的,于是可以想到用 数组来

11、进行代码的简化。方法二便是通过数组来实现的。方法二:(此乐曲是让我们荡起双桨)#include sbit finq=P3A6;sbit stait=PlA4;定义了一个按键进行控制,当按键按下时,开始演奏音乐void delay(unsigned int i)unsigned charj;while(i-)for(j=0j115j+);void yaiizou(unsigned char pinlv?unsigned mt jiepai)unsigned char pl;unsigned mtjp;if(jiepai=l) delay(250);/1/2 拍暂停,即 1/2 拍的 0else

12、if(jiepai=2) delay(500); /I 拍暂停,即 1 拍的 0elsefbr(jp=Ojpjiepaijp+)finq=O;fbi(pl=O;plpHilv;pl-H-);finq=l;fbi(pl=O;plpHilv;pl-H-);void main()unsigned char i.x;unsigned char code pinlv=1315110,98, 87, 73, 87, 110,98, 131,0,110,9& 87, 73, 73, 65, 98,87,87,87,73,65,73,65,55,5&65,73,65,87,110,9&87,73,11031J

13、10、9&87,65,73,73,0,87,65,65,73$ 2,87,9&87,733110,98O110,9&87,73,65,55,5&65,73,87,65,65;unsignedintcodejiepai= 110J31J47494496465431,294,440J431J47J65,58&196440294,660,330J 65,196 ,880,58&220,262,124,110,196,220,330,131,147,495,196,262,220,131,147,165,220/784,3922,660, 660,220)96,175,330,588,495,196,110,131,147,2,131,147,330,392,440,524,247,220,19665,880,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论