《一个按键选择播放六首音乐〖AT89S52单片机入门教程〗》由会员分享,可在线阅读,更多相关《一个按键选择播放六首音乐〖AT89S52单片机入门教程〗(6页珍藏版)》请在金锄头文库上搜索。
1、第28课,一个按键选择播放六首音乐 上一课,我们学习了用4个键控制播放3首音乐,另一个键停止播放。但是我们只能选择3首音乐,是不是太少了?因此这一课,我们用一个按键6首乐曲。如果按下另外三个按键中的任意一个,音乐就立即停止。 # /包括一个52标准内核的头文件 _7; /喇叭输出脚 10; 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 0
2、1# 02 02# 03 04 04# 05 05# 06 06# 07 /35 ; /定时中断0,用于产生唱歌频率 H0= /调入预定时值 /取反音乐输出 /* /音乐符号串解释函数 /入口:要解释的音乐符号串,输出的音调串,输出的时长串 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+; /
3、取出基准音 j=j+(*(i) #: /有半音i+;j+; -: /有一个音节加长 4; i+; _: /有一个音节缩短 2; i+; .: /有一个加半拍 ; i+; *(j; /记录音符 *(+; /* /奏乐函数 /入口:要演奏的音乐符号串 i,c,j=0; n; 12; /音调缓冲 12; /音长缓冲 /解释音乐符号串 ; i=0;i!=0;i+) /逐个符号演奏 i*2; /取出对应的定时值送给T0 i*2+1; c=0;ci;c+) /按照音长延时 n=0;n32000;n+); !|(!|(!|(!,立即退出播放 ; ; n=0;n500;n+); /音符间延时 ; ; /仙剑
4、= |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_76_7_|3 26_6_6-|16_6_66_7_| ; = 5,7_|_| _5_5 2_3_|25_| 6_5_52.,6_,71_2_|1; /世上只有妈妈好 = 16_5_6-|35_6_53_2_|1_,6_5_3_2-| 21-|_1_|,5; /我是一只菠萝 = 1-|2_4_3_2_55|5_
5、6_3_4_22|2_4_3_2_1_1_7_6_|5_4_2_3_11| 2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_5_2_3_|1 ; /小星星 = 1155|665-|4433|221-| 5544|332-|5544|332-| 1155|665-|4433|221-| ; /老鼠爱大米 = 321-|231|_5_665|6522_3_2|12 ; /一个按键选择播放六首音乐 i; 0 /使用定时器0的16位工作模式 0; 1; /定时器0中断 1; /打开总中断 ) i) : /播放音乐 : /播放音乐 : /播放音乐 : /播放音乐 : /播放音乐 : /播放音乐 i+;if(i=6)i=0; 这里用了一个断当前按键的次数序号并播放对应的音乐。 作业: 思考,为什么这里按键没有做去抖,也可以正常运行。