乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗

上传人:工**** 文档编号:441881 上传时间:2017-02-26 格式:PDF 页数:6 大小:51.28KB
返回 下载 相关 举报
乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗_第1页
第1页 / 共6页
乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗_第2页
第2页 / 共6页
乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗_第3页
第3页 / 共6页
乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗_第4页
第4页 / 共6页
乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗》由会员分享,可在线阅读,更多相关《乐谱方式输入的音乐播放〖AT89S52单片机入门教程〗(6页珍藏版)》请在金锄头文库上搜索。

1、第25课,乐谱方式输入的音乐播放,仙剑奇侠传 这一课开始,我们就要听到美妙的音乐了,这一课,我们可以听到演奏仙剑奇侠传的乐谱。 这一课的程序,增加了2个比较复杂的函数,一个乐谱解释函数,一个音乐播放函数。我们音乐仙剑奇侠传的乐谱以一个我们自己定义的乐谱形式写好,作为一个预定义的字符串。再通过乐谱解释函数解释为“音符频率的序号”和“音符播放的时间”两个数组,在音乐播放函数中,就将音符频率的序号数组对应的频率送入定时器预置数中,再延时对应音符播放的时间。这样音乐就播放出来了。 仙剑奇侠传的乐谱: |3_3_3_2_3-|2_3_2_2_,6,6_,7_|12_1_,7,6_,5_|,6 _6_5_

2、5_22_3_|45_4_32_1_| 67_6_55_3_|56_5_32_3_|3 26_6_6-|16_6_66_7_|17_6_76_7_| 67_6_55_3_|57_6_76_7_|3 26_6_6-|16_6_66_7_| 乐谱书写规则: 1 2 3 4 5 6 7 为7个基本音阶 前面加逗号,表示这是低音 前面加上点号表示这是高音 后面加#,表示这个音符升半个音阶 后面加.,表示这个音符要再加长自身一半的延时 后面加一个或多个-,每个表示延时一拍 后面加一个或多个_,表示这个音符要缩短自身一半的时长,最多支持2个_。 这些规则对一般的乐谱都可以应付得来了。 下面看程序: # /

3、包括一个52标准内核的头文件 _7; /喇叭输出脚 1= ; 2= ; 3= ; 4= ; ; /在中断中装载的,及输出频率对照表 6*2= 0,1 /0 0,1# 0,2 0,2# 0,3 0,4 0,4# 0,5 0,5# 0,6 0,6# 0,7 0,0# /13 0,0# /15 0,0,0# /18 0,0# /20 0,0# /22 0,01 01# 02 02# 03 04 04# 05 05# 06 06# 07 /35 ; /定时中断0,用于产生唱歌频率 H0= /调入预定时值 /取反音乐输出 /* /音乐符号串解释函数 /入口:要解释的音乐符号串,输出的音调串,输出的时长串

4、 i,i1,j; +/;/音长 =0,12,14,16,17,19,21,23; /i=0,;) ; /高低=0 ;/半音=0 ;/音长1拍 *(i)=|) | (*(i)= ) i+; /拍子间隔和一个空格过滤 (i) ,: 12;i+;/低音 : 2;i+; /高音 (i)=0) /遇到0结束 *(0; /加入结束标志0 *(0; j=*(i)i+; /取出基准音 j=j+(*(i) #: /有半音i+;j+; -: /有一个音节加长 4; i+; _: /有一个音节缩短 2; i+; .: /有一个加半拍 ; i+; *(j; /记录音符 *(+; /* /奏乐函数 /入口:要演奏的音乐

5、符号串 i,c,j=0; n; 12; /音调缓冲 12; /音长缓冲 /解释音乐符号串 ; i=0;i!=0;i+) /逐个符号演奏 i*2; /取出对应的定时值送给 i*2+1; c=0;ci;c+) /按照音长延时 n=0;n32000;n+); ; n=0;n500;n+); /音符间延时 ; ; /仙剑 = |3_3_3_2_3-|2_3_2_2_,6,6_,7_|12_1_,7,6_,5_|,6 _6_5_5_22_3_|45_4_32_1_| 67_6_55_3_|56_5_32_3_|3 26_6_6-|16_6_66_7_|17_6_76_7_| 67_6_55_3_|57_

6、6_76_7_|3 26_6_6-|16_6_66_7_| ; /乐谱方式输入的音乐播放,仙剑奇侠传 0 /使用定时器0的16位工作模式 0; 1; 1; ) 这里最复杂是乐谱解释函数,是逐个字符解释的。基本上是以下过程:遇到拍子分隔符和空格跳过,判断是否高低音,读音符,调整为高低音音符,读音符后的升半个音符的“#”,读延长音“-”“.”,读缩短一半音长的“_”,字符串结束符“0请仔细领会这个函数。 奏乐函数就比较简单,基本上就是从数组中取出音符和时长,送入定时器预置数,再延时即可。在每个音符播放前后,用个音符之间也有短暂静音,以使音乐更为清晰。 在本程序中,播放音乐函数中,我们使用了是因为乐谱的数据需要比较多的内存,于以我们仿真不会有任何问题。但是如果你把这个程序烧写到一片没有如会出现无法运行的现象。在使用没有果使用了要在总线上外加一个内存芯片,比如62256之类。 完全看懂了程序之后,请编译运行,观察结果。按全速,可以听到美妙的仙剑音乐从蜂鸣器中传出,真是太奇妙了! 作业: 编写一个其他的你熟悉的比较简单的乐谱,替换掉仙剑音乐,做本试验。:由于在播放函数里只定义112个音符符的空间,注意您的乐谱不要超过这个数目。如果需要调大,注意 编译后不要超过仿真器内部的768个

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 嵌入式开发/单片机

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号