单片机控制蜂鸣器鸣奏音乐_第1页
单片机控制蜂鸣器鸣奏音乐_第2页
单片机控制蜂鸣器鸣奏音乐_第3页
全文预览已结束

下载本文档

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

文档简介

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

2、此频率的脉冲。如果没有必要进行精确的计时,可以用for循环空语句来粗略计时即可(本文选用此法)。当单片机使用 11.0592Mhz的晶振时,for(i=0;i<115;i+);这个空循环延时约为 1ms;当晶振选用12Mhz时,可使用for(i=0;i<125;i+);这个空循环来延时1ms。在这个空循环外头再进行一次循环就可以实现延时若干ms。如:/实现延时若干 ms,晶振为11.0592Mhz void delay (un sig ned int i)un sig ned char j;while(i-)for(j=0;j<115;j+);例如delay(1000)编便可

3、以实现延时1s/实现延时若干 ms,晶振为12Mhzvoid delay (un sig ned int i)un sig ned char j;while(i-)for(j=0;j<125;j+);例如delay(1000)编便可以实现延时1s知道如何产生不同的频率的音调和进行音调的延时的之后,我们便可以编写程序来让单片机控制蜂鸣器来鸣奏音乐了。下面附上不同音调所对应的频率表:下文介绍了让单片机控制蜂鸣器进行鸣奏音乐的两种方法。第一种方法是基础的方 法,就是顺序地让蜂鸣器挨个地演奏每个音符。方法一:(此歌曲是莫斯哥郊外的晚上的乐曲)#in clude <reg52.h>sb

4、it fmq=P3A6;void delay (un sig ned int a)un sig ned char b;while(a-)for(b=0;b<115;b+);void yan zou (un sig ned char i,u nsig ned int pai)un sig ned char y; un sig ned int j; for(j=0;j<pai;j+)fmq=0; for(y=0;y<i;y+) ;fmq=1; for(y=0;y<i;y+) ; void main()while(1)yanzou(65,220); yanzou(55,262

5、); yanzou(44,330); yanzou(55,262); yanzou(49,587); yanzou(55,262); yanzou(58,247); yanzou(44,660); yanzou(49,587); yanzou(65,880); yanzou(55,262); yanzou(44,330); yanzou(37,392); yanzou(37,392); yanzou(65,440); yanzou(37,392); yanzou(41,349); yanzou(44,2640); yanzou(41,698); yanzou(37,784); yanzou(2

6、9,492); yanzou(33,440); yanzou(44,660); delay(250);yanzou(58,494); yanzou(65,220); yanzou(44,330); yanzou(49,293); yanzou(41,698); yanzou(41,698); yanzou(37,392); yanzou(41,349); yanzou(44,660);/1/2 拍 中音 6/1/2 拍 高音 1/1/2 拍 高音 3/1/2 拍 高音 1/1 拍 高音 2/1/2 拍 高音 1/1/2 拍 中音 7/1 拍 高音 3/1 拍 高音 2/2 拍 中音 6/1/2

7、 拍 高音 1/1/2 拍 高音 3/1/2 拍 高音 5/1/2 拍 高音 5/1 拍 中音 6/1/2 拍 高音 5/1/2 拍 高音 4/4 拍 高音 3/1 拍 高音 4/1 拍 高音 5/1/2 拍 高音 7/1/2 拍 高音 6/1 拍 高音 3/1 拍 中音 7/1/2 拍 中音 6/1/2 拍 高音 3/1/2 拍 高音 2/1 拍 高音 4/1 拍 高音 4/1/2 拍 高音 5/1/2 拍 高音 4/1 拍 高音 3yanzou(49,293);/1/2 拍高音 2yanzou(55,262);/1/2拍 高音 1yanzou(44,660);/1 拍高音 3yanzou(

8、49,587);/1 拍高音 2yanzou(65,880);/2 拍中音 6yanzou(65,880);/2 拍中音 6yanzou(41,698);/1 拍高音 4yanzou(37,784);/1 拍高音 5yanzou(29,492);/1/2 拍高音 7yanzou(33,440);/1/2 拍高音 6yanzou(44,660);/1 拍高音 3delay(250);yanzou(58,494);/1 拍 中音 7yanzou(65,220);/1/2 拍 中音 6yanzou(44,330);/1/2 拍 高音 3yanzou(49,293);/1/2 拍高音 2yanzou(

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

10、能都是一样的, 数组来进行代码的简化。方法二便是通过数组来实现的。方法二:(此乐曲是让我们荡起双桨 )#include <reg52.h>sbit fmq=P3A6;sbit start=P“4;/定义了一个按键进行控制,当按键按下时,开始演奏音void delay(unsigned int i)unsigned char j;while(i-)for(j=0;j<115;j+); void yanzou(unsigned char pinlv,unsigned int jiepai)unsigned char pl;unsigned int jp;if(jiepai=1)

11、delay(250); /1/2 拍暂停,即 1/2 拍的 0else if(jiepai=2) delay(500); /1 拍暂停,即 1 拍的 0elsefor(jp=0;jp<jiepai;jp+)fmq=0;for(pl=0;pl<pinlv;pl+);fmq=1;for(pl=0;pl<pinlv;pl+);void main()unsigned char i,x;unsigned char code pinlv=131,110,98, 87, 73, 87, 110,98, 131,0,110,98, 87, 73, 73, 65, 98, 87,87,87,7

12、3,65,73,65,55,58,65,73,65,87,110,98,87,73,110,131,110,98,87,65,73,73,0,87,65,65,73,8 2,87,98,87,73,131,110,98,0,110,98,87,73,65,55,58,65,73,87,65,65;unsigned int code jiepai=110,131,147,494,196,165,131,294,440,1,131,147,165,588,196,440,294,660,330,165,196 ,880,588,220,262,124,110,196,220,330,131,147,495,196,262,220,131,147,165,220,784,392,2,660, 660,220,196,175,330,588,495,196,110,131,147,2,131,147,330,392,440,524,247,220,196,165,880, 880;i=68;/数组共有 68 个元素if(

温馨提示

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

评论

0/150

提交评论