200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【Proteus仿真】【51单片机】音乐盒电子琴设计

【Proteus仿真】【51单片机】音乐盒电子琴设计

时间:2019-01-27 21:16:39

相关推荐

【Proteus仿真】【51单片机】音乐盒电子琴设计

文章目录

一、主要功能二、使用步骤三、硬件资源四、软件设计1.主要代码五、实验现象联系作者

一、主要功能

1、能播放/切换音乐,播放速度调节

2、能当作播放器&电子琴

3、电子琴支持低音区1-7,中音区1-7和高音区1-2


二、使用步骤

系统运行后,默认以音乐盒模式运行,且为正常播放速度1.0,当按下K3键则切换为下一曲,当前仅添加了3首乐曲,当按下K4键1.5秒以上,D1指示灯亮,此时进入电子琴模式,矩阵键盘S1-S16为电子琴低音区1-7,中音区1-7和高音区1-2。通过矩阵键盘可弹奏电子音乐。当再次按下K4键可切换到音乐盒模式运行。在音乐盒模式时,按下K4键少于1.5秒钟松开则为调节音乐盒播放速度,有快进、正常、慢放几种速度模式。

三、硬件资源

1、51单片机核心模块

2、4*4矩阵按键模块

3、独立按键模块

4、蜂鸣器模块

5、LED模块

四、软件设计

1.主要代码

代码如下:

//节拍频率 uchar code T[49][2]={{0,0},{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}};//电子琴音调1=Euchar code music[][2]={{0,4},{5,8},{7,8},{9,8},{10,8},{12,8},{14,8},{16,8},{17,8},{19,8},{21,8},{22,8},{24,8},{26,8},{28,8},{29,8},{31,8},{0xFF,0xFF}};/*----------用户可根据需求自行通过“51Music.exe”软件编辑音乐----------*///新年快乐-简谱曲调1=Euchar code music1[][2]={{0,4},{17,4},{17,4},{17,8},{12,8},{21,4},{21,4},{21,8},{17,8},{17,4},{21,4},{24,8},{24,8},{22,4},{21,4},{19,8},{0,16},{19,4},{21,4},{22,8},{22,8},{21,4},{19,4},{21,8},{17,8},{17,4},{21,4},{19,8},{12,8},{16,4},{19,4},{17,8},{0,16},{0xFF,0xFF}};//生日快乐-简谱曲调1=Cuchar code music2[][2]={{0,4},{20,4},{20,4},{22,8},{20,8},{25,8},{24,8},{0,4},{20,4},{20,4},{22,8},{20,8},{27,8},{25,8},{0,4},{20,4},{20,4},{32,8},{29,8},{25,8},{24,4},{22,4},{0,4},{30,4},{30,4},{29,8},{25,8},{27,8},{25,8},{0xFF,0xFF}};//海阔天空-简谱曲调1=Fuchar code music3[][2]={{0,4},{23,4},{21,4},{19,8},{0,8},{21,2},{23,2},{26,4},{26,2},{26,2},{26,4},{28,4},{26,8},{0,4},{28,2},{30,2},{31,4},{31,2},{31,2},{31,4},{31,4},{31,4},{30,4},{28,2},{26,4},{28,2},{0,8},{28,4},{26,4},{26,12},{26,4},{23,2},{21,2},{19,4},{23,4},{24,4},{23,4},{21,4},{21,4},{23,2},{21,2},{21,8},{23,4},{21,2},{21,2},{21,4},{19,4},{19,4},{19,2},{19,2},{19,8},{21,4},{19,4},{19,8},{0xFF,0xFF}};//音乐1播放void music1_play(void){u8 i=0;while(1){if(music_struct.mode==0){if(music_struct.id==0){music_struct.fre=music1[i][0];music_struct.beat=music1[i][1]*music_struct.beat_ratio; if(music_struct.fre==0x00){TR0=0;delay(music_struct.beat);i++;} else if(music_struct.fre==0xFF){TR0=0;delay(30);i=0;} else if(music_struct.fre==music1[i+1][0]) {TR0=1;delay(music_struct.beat);TR0=0;pause();i++;}else{TR0=1;delay(music_struct.beat);i++;}}elsebreak;}else break;}}//音乐2播放void music2_play(void){u8 i=0;while(1){if(music_struct.mode==0){if(music_struct.id==1){music_struct.fre=music2[i][0];music_struct.beat=music2[i][1]*music_struct.beat_ratio; if(music_struct.fre==0x00){TR0=0;delay(music_struct.beat);i++;} else if(music_struct.fre==0xFF){TR0=0;delay(30);i=0;} else if(music_struct.fre==music2[i+1][0]) {TR0=1;delay(music_struct.beat);TR0=0;pause();i++;}else{TR0=1;delay(music_struct.beat);i++;}}elsebreak;}elsebreak;}}//音乐3播放void music3_play(void){u8 i=0;while(1){if(music_struct.mode==0){if(music_struct.id==2){music_struct.fre=music3[i][0];music_struct.beat=music3[i][1]*music_struct.beat_ratio; if(music_struct.fre==0x00){TR0=0;delay(music_struct.beat);i++;} else if(music_struct.fre==0xFF){TR0=0;delay(30);i=0;} else if(music_struct.fre==music3[i+1][0]) {TR0=1;delay(music_struct.beat);TR0=0;pause();i++;}else{TR0=1;delay(music_struct.beat);i++;}}elsebreak;}elsebreak;}}//音乐盒演示void music_play(void){music_struct.beat_ratio=1.0;//正常播放速度music_struct.id=2;while(1){switch(music_struct.id){case 0: music1_play();break;case 1: music2_play();break;case 2: music3_play();break; }if(music_struct.mode==1) {time0_stop();//关闭定时器0break;}}}//电子琴演示void electronic_play(void){u8 key=0;u8 i=0;time1_init();//初始化定时器0time1_start();//开启定时器0while(1){if(music_struct.mode){if(music_struct.key!=0){music_struct.fre=music[music_struct.key][0];//根据不同键选择音调TR0=1;//打开定时器}else TR0=0;//松开键时关闭定时器}else{time1_stop();//关闭定时器1break;}}}//音乐盒控制系统void music_control_sys(void){music_struct.mode=0;//音乐盒模式 exti0_init();//外部中断0配置exti1_init();//外部中断1配置TMOD|=0x01; EA=1; ET0=1;//开启定时器0,蜂鸣器发声while(1){//音乐盒演示if(music_struct.mode==0)music_play();//电子琴演示elseelectronic_play();}}

五、实验现象

联系作者

作者B站链接:/444388619

可提供手把手教学服务,资料获取请联系作者QQ:344379

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。