版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[20]其图如5-2所示:图5-1AT89C51属性编辑对话框图5-2流水灯硬件仿真结果结论毕业设计是基于单片机的音乐流水灯控制系统设计,设计拟由三个按钮控制音乐的上下歌曲切换和暂停播放。在切换五首歌曲的同时,8个LED灯随蜂鸣器中的曲调闪烁和律动。实现这些效果需要单片机对电路系统的控制配合来达到。相应的要对电路进行模块化设计,程序再控制电器元件互相配合,从而完成设计要求。比如流水灯的设计,把固定的闪烁模式在本设计中通过音乐节拍改为随音乐而律动的程序。而本系统设计中的程序编译设计占有很大的比重,特别是音乐节拍和流水灯闪烁的结合与音乐流水灯控制系统操控的显示。结合所学知识完成本设计也极具挑战性,但完成毕业设计也入让我对单片机有了更深的了解,各个方面都让我深受洗礼,这对我以后的工作、生活有很大的助臂。参考文献南京工业职业技术学院.一种蓝牙音乐双心形流水灯[P].CN:206771051,2017.12.19.南京信息工程大学.一种用于儿童车的音乐流水灯[P].CN:202703765,2013.01.30.姜红星教传艳施利.浅析单片机的LED流水灯控制过程[J].沈阳工学院机械与运载学院.2017,(第06期).MeehanJoanneMuirLindsey.SCMinMerseysideSMEs:Benefitsandbarriers[J].TOMJournal,2008.刘利民.MCS-51系列单片机系统设计[M].北京:北京航空航天大学出版社,2008.5.刘玲,刘新,张鹏鸣.基于FPGA的数码管音乐流水灯设计[J].沈阳师范大学学报(自然科学版),2019.陶小苗,王紫婷.基于FPGA的音乐流水灯控制系统的设计[J].电子科技,2010,(第11期).周明周亮.AT89C51单片机在霓虹灯控制中的应用[J].吉林师范大学计算机学院,四平.2007,(第05期).邓和莲.可编程音乐彩灯系统设计[J].娄底职业技术学院,2007.杜毅.基于单片机的可调速音乐流水灯[J].企业技术开发(上半月),2011,(第5期).梁平元.基于音乐节奏识别的智能LED流水灯以及其控制方法[P].CN:106332378,2017.01.11.郑超.基于Proteus的单片机教学实验仿真平台[D].华南理工大学,2017.祝清法.自制音乐流水灯[N].电子报,2010,(第011版).许艺珍.关于单片机LED点阵流水灯的制作[J].西南石油大学2018,(第06期).雷友建.音乐流水灯的单片机控制研究[J].科教导刊(电子版)(中旬),2013,(第2期).HengYu,PengZhou,andShi-longZhang.CompensationLEDLight-ControlSystemDesignandImplementationofIntelligentLightCompensationLEDLight-ControlSystem[J].Wuhan430070,China.蒙启熟.基于51单片机的音乐喷泉设计[J].广西城市职业大学.2019,(第12期).任杰.DIY简易声控流水彩灯[J].无线电杂志,2008,(第7期).倪云峰.单片机原理与应用[M].西安:西安电子科技大学出版社,2009.6.倪云峰.单片机原理与应用[M].西安:西安电子科技大学出版社,2009.6.附录电路原理图:音乐程序:#include"main.h"staticuint8_t*play_music_index=NULL;//共五首歌,省略了后四首//挥着翅膀的女孩uint8_tcodeMusic_Girl[]={0x17,0x02,0x17,0x03,0x18,0x03,0x19,0x02,0x15,0x03,0x16,0x03,0x17,0x03,0x17,0x03,0x17,0x03,0x18,0x03,0x19,0x02,0x16,0x03,0x17,0x03,0x18,0x02,0x18,0x03,0x17,0x03,0x15,0x02,0x18,0x03,0x17,0x03,0x18,0x02,0x10,0x03,0x15,0x03,0x16,0x02,0x15,0x03,0x16,0x03,0x17,0x02,0x17,0x03,0x18,0x03,0x19,0x02,0x1A,0x03,0x1B,0x03,0x1F,0x03,0x1F,0x03,0x17,0x03,0x18,0x03,0x19,0x02,0x16,0x03,0x17,0x03,0x18,0x03,0x17,0x03,0x18,0x03,0x1F,0x03,0x1F,0x02,0x16,0x03,0x17,0x03,0x18,0x03,0x17,0x03,0x18,0x03,0x20,0x03,0x20,0x02,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x20,0x03,0x21,0x03,0x20,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x1F,0x03,0x1B,0x03,0x19,0x03,0x19,0x03,0x15,0x03,0x1A,0x66,0x1A,0x03,0x19,0x03,0x15,0x03,0x15,0x03,0x17,0x03,0x16,0x66,0x17,0x04,0x18,0x04,0x18,0x03,0x19,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x20,0x03,0x21,0x03,0x20,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x1F,0x03,0x1B,0x03,0x19,0x03,0x19,0x03,0x15,0x03,0x1A,0x66,0x1A,0x03,0x19,0x03,0x19,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x00,0x1A,0x03,0x1A,0x03,0x1A,0x03,0x1B,0x03,0x1B,0x03,0x1A,0x03,0x19,0x03,0x19,0x02,0x17,0x03,0x15,0x17,0x15,0x03,0x16,0x03,0x17,0x03,0x18,0x03,0x17,0x04,0x18,0x0E,0x18,0x03,0x17,0x04,0x18,0x0E,0x18,0x66,0x17,0x03,0x18,0x03,0x17,0x03,0x18,0x03,0x20,0x03,0x20,0x02,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x20,0x03,0x21,0x03,0x20,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x1F,0x04,0x1B,0x0E,0x1B,0x03,0x19,0x03,0x19,0x03,0x15,0x03,0x1A,0x66,0x1A,0x03,0x19,0x03,0x15,0x03,0x15,0x03,0x17,0x03,0x16,0x66,0x17,0x04,0x18,0x04,0x18,0x03,0x19,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x20,0x03,0x21,0x03,0x20,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x66,0x1F,0x03,0x1B,0x03,0x19,0x03,0x19,0x03,0x15,0x03,0x1A,0x66,0x1A,0x03,0x19,0x03,0x19,0x03,0x1F,0x03,0x1B,0x03,0x1F,0x00,0x18,0x02,0x18,0x03,0x1A,0x03,0x19,0x0D,0x15,0x03,0x15,0x02,0x18,0x66,0x16,0x02,0x17,0x02,0x15,0x00,0x00,0x00};//同一首歌uint8_tcodeMusic_Same[]=//两只蝴蝶uint8_tcodeMusic_Two[]=//生日快乐unsignedcharcodeMusic_happy_birthday[]=//大海unsignedcharcodeMusic_DaHai[]=boolis_change_play=false;staticcodeuint8_t*music_list[]={Music_Girl,Music_Same,Music_Two,Music_happy_birthday,Music_DaHai};staticuint8_tmusic_list_index=0;#defineMAX_MUSIC_INDEX(4)boolis_pasue_play=false;sbitP37=P3^7;/**/staticvoiddisplay(void){lcd12864_clear_display(0);if(music_list_index==0){lcd12864_show_line_chinese(0,0,(uint8_t*)"挥着翅膀的女孩");}elseif(music_list_index==1){lcd12864_show_line_chinese(0,0,(uint8_t*)"同一首歌");}elseif(music_list_index==2){lcd12864_show_line_chinese(0,0,(uint8_t*)"两只蝴蝶");}elseif(music_list_index==3){lcd12864_show_line_chinese(0,0,(uint8_t*)"生日快乐");}elseif(music_list_index==4){lcd12864_show_line_chinese(0,0,(uint8_t*)"大海");}}/**/staticvoidkey_poll(void){if(is_key_down(0)){is_change_play=true;EA=0;++music_list_index;if(music_list_index>MAX_MUSIC_INDEX){music_list_index=0;}play_music_index=music_list[music_list_index];display();}if(is_key_down(1)){is_change_play=true;EA=0;if(music_list_index>0){music_list_index--;}else{music_list_index=MAX_MUSIC_INDEX;}play_music_index=music_list[music_list_index];display();}if(is_key_down(2)){is_change_play=true;EA=0;is_pasue_play=!is_pasue_play;}}/**/staticvoidplay_music_poll(void){if(is_pasue_play){P37=1;return;}beep_play_music(play_music_index);}/**/voidbeep_play_music_callback(void){key_poll();}/**///程序入口函数mainvoidmain(void){P1=0xfe;lcd12864_init();beep_sound_init();play_music_index=music_list[1];display();EA=1;while(1){key_poll();play_music_poll();}}蜂鸣器程序:#include"main.h"#ifdef__BEEP_DEV_DRIVER__//宏定义sbitBEEP_IO_PIN=P3^7;///<定义蜂鸣器输出管脚#defineIS_BEEP_CALLBACK(1)///<蜂鸣器是否有回调函数,因为蜂鸣器会阻塞程序,如果需要轮训函数,方便添加添加回调查询#defineSYSTEM_OSC(11059200ul)///<11059200u1112000000u1定义晶振频率(实测效果差距并不明显)externvoidbeep_play_music_callback(void);//全局变量staticuint8_tSound_Temp_TH0,Sound_Temp_TL0;///<音符定时器初值暂存//常量定义staticuint16_tcodeFreTab[12]={262,277,294,311,330,349,369,392,415,440,466,494};///<原始频率表staticuint8_tcodeSignTab[7]={0,2,4,5,7,9,11};///<在频率表中的位置staticuint8_tcodeLengthTab[7]={1,2,4,8,16,32,64};voidbeep_sound_init(void){BEEP_IO_PIN=0;#if(SYSTEM_OSC==12000000ul)TL1=0xF0; //设置定时初值(10ms的初装值) TH1=0xD8; //设置定时初值#elif(SYSTEM_OSC==11059200ul)TL1=0x00; //设置定时初值(10ms的初装值) TH1=0xDC; //设置定时初值#else#error"nosupportoscfrq"#endifTMOD=0;TMOD|=0x11;///<///<设置定时器o和定时器1为方式1,即16位非自动重载定时器ET0=1;///<打开定时器o中断ET1=0;///<禁止定时器1中断TR0=0;///<禁止定时器o运行TR1=0;///<禁止定时器1运行}externboolis_change_play;staticvoidbeep_play(uint8_t*Sound,uint8_tSignature,uint8_tOctachord,uint16_tSpeed){ uint16_tNewFreTab[12];//新的频率表 uint8_ti,j; uint16_tPoint,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; uint8_tTone,Length,SL,SH,SM,SLen,XG,FD; for(i=0;i<12;i++){//根据调号及升降八度来生成新的频率表 j=i+Signature; if(j>11){ j=j-12; NewFreTab[i]=FreTab[j]*2; }else{ NewFreTab[i]=FreTab[j]; } if(Octachord==1){ NewFreTab[i]>>=2; }elseif(Octachord==3){ NewFreTab[i]<<=2; } } SoundLength=0; while(Sound[SoundLength]!=0x00){//计算歌曲长度 SoundLength+=2; } Point=0; Tone=Sound[Point]; Length=Sound[Point+1];//读出第一个音符和它时时值 LDiv0=12000/Speed;//算出1分音符的长度(几个10ms) LDiv4=LDiv0/4;//算出4分音符的长度 LDiv4=LDiv4-LDiv4*4/5;//4/5定义普通音符演奏的长度分率,每4分音符间隔 TR0=0; TR1=1; while(Point<SoundLength){P1=_crol_(P1,1); SL=Tone%10;//计算出音符 SM=Tone/10%10;//计算出高低音 SH=Tone/100;//计算出是否升半 CurrentFre=NewFreTab[SignTab[SL-1]+SH];//查出对应音符的频率 if(SL!=0){ if(SM==1){CurrentFre>>=2;//低音} if(SM==3){CurrentFre<<=2;//高音}#if(SYSTEM_OSC==12000000ul)Temp_T=65536-(50000/CurrentFre)*10;//计算计数器初值#elif(SYSTEM_OSC==11059200ul)Temp_T=65536-(50000/CurrentFre)*9;//计算计数器初值#else#error"nosupportoscfrq"#endif Sound_Temp_TH0=Temp_T/256; Sound_Temp_TL0=Temp_T%256; TH0=Sound_Temp_TH0; TL0=Sound_Temp_TL0+12;//加12是对中断延时的补偿 } SLen=LengthTab[Length%10];//算出是几分音符 XG=Length/10%10;//算出音符类型(0普通1连音2顿音) FD=Length/100; LDiv=LDiv0/SLen;//算出连音音符演奏的长度(多少个10ms) if(FD==1){ LDiv=LDiv+LDiv/2; } if(XG!=1){ if(XG==0){//算出普通音符的演奏长度 if(SLen<=4){ LDiv1=LDiv-LDiv4; }else{ LDiv1=LDiv*4/5;//4/5定义普通音符演奏的长度分率,每4分音符间隔 } }else{ LDiv1=LDiv/2;//算出顿音的演奏长度 } }else{ LDiv1=LDiv; } if(SL==0){LDiv1=0;} LDiv2=LDiv-LDiv1;//算出不发音的长度if(SL!=0){ TR0=1; for(i=LDiv1;i>0;i--){//发规定长度的音 while(TF1==0){#ifIS_BEEP_CALLBACKbeep_play_music_callback();if(is_change_play){is_change_play=false;EA=1;return;}#endif}#if(SYSTEM_OSC==12000000ul)TL1=0xF0;//设置定时初值(10ms的初装值)TH1=0xD8;//设置定时初值#elif(SYSTEM_OSC==11059200ul)TL1=0x00;//设置定时初值(10ms的初装值)TH1=0xDC;//设置定时初值#else#error"nosupportoscfrq"#endif TF1=0; } } if(LDiv2!=0){ TR0=0;BEEP_IO_PIN=0; for(i=LDiv2;i>0;i--){//音符间的间隔 while(TF1==0){#ifIS_BEEP_CALLBACKbeep_play_music_callback();if(is_change_play){is_change_play=false;EA=1;return;}#endif}#if(SYSTEM_OSC==12000000ul)TL1=0xF0;//设置定时初值(10ms的初装值)TH1=0xD8;//设置定时初值#elif(SYSTEM_OSC==11059200ul)TL1=0x00;//设置定时初值(10ms的初装值)TH1=0xDC;//设置定时初值#else#error"nosupportoscfrq"#endif TF1=0; } } Point+=2; Tone=Sound[Point]; Length=Sound[Point+1]; } BEEP_IO_PIN=0;}voidbeep_play_music(uint8_t*Sound){#ifIS_BEEP_CALLBACKbeep_play(Sound,0,3,53);///<根据beep_playmusiccallback函数调整速度值#elsebeep_play(Sound,0,3,54);#endif}externboolis_pasue_play;voidBeepTimer0(void)interrupt1{TH0=Sound_Temp_TH0; TL0=Sound_Temp_TL0;if(is_pasue_play)return; BEEP_IO_PIN=!BEEP_IO_PIN;}按钮程序:#include"main.h"#ifdefBUTTON_DEV_DRIVER#defineDEBUG(0)#ifDEBUG#definelog(X)print_string(X)#else#definelog(X)#endif///独立按键按下/抬起状态值#defineBUTTON_VALUE_DOWN(0)#defineBUTTON_VALUE_UP(1)///独立按键引脚定义sbitKEY0_PIN=P3^4;sbitKEY1_PIN=P3^5;sbitKEY2_PIN=P3^6;sbitKEY3_PIN=P1^3;sbitKEY4_PIN=P1^4;sbitKEY5_PIN=P1^5;sbitKEY6_PIN=P1^6;sbitKEY7_PIN=P1^7;//按键延时消抖,11.0592MHz晶振计算得staticvoidkey_delay_5ms(void){ unsignedchari,j; i=9; j=244; do { while(--j); }while(--i);}//获得按键key_num编号0-7的I/O口值0/1staticuint8_tget_key_value(uint8_tkey_num){uint8_tkey_value;switch(key_num){case0:key_value=KEY0_PIN;break;case1:key_value=KEY1_PIN;break;case2:key_value=KEY2_PIN;break;case3:key_value=KEY3_PIN;break;case4:key_value=KEY4_PIN;break;case5:key_value=KEY5_PIN;break;case6:key_value=KEY6_PIN;break;case7:key_value=KEY7_PIN;break;default:returnBUTTON_VALUE_UP;}returnkey_valu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 砚台雕刻工工作评优考核试卷含答案
- 酱类制品制作工基础验收能力考核试卷含答案
- 2026年精密加工高级工程师招聘笔试试卷 招录13人真题题库
- 2026年生态修复高级规划师招聘笔试试卷 招录12人完整题库
- 2026年吉林省梅河口市高三数学下册期末考试模拟考试卷附完整答案【名校卷】
- 2026年青海省玉树市高三数学下册期末考试模拟检测卷及完整答案(夺冠系列)
- 2026年山东省乳山市高三数学下册期末考试模拟考试卷附答案【B卷】
- 2026年湖北省赤壁市高三数学下册期末考试模拟检测卷及参考答案(培优)
- 2026年广东省罗定市高三数学下册期末考试模拟卷附完整答案(必刷)
- 2026届阿里地区札达县四年级数学下学期期末检测模拟试题(含答案解析)
- 机械原理 课件 第2章-常用机构
- 人教版九年级上册数学《习题29.2》教学课件(新教材)
- 职业卫生技术服务机构质量管理体系手册
- 2026年广东省职业病诊断医师考试(职业性化学中毒)练习题及答案
- SYT 5079-2025《石油天然气钻采设备 油井测试设备》
- 2026-2030中国蒸汽眼罩行业深度调研及投资前景预测研究报告
- 山西新绛海泉商务酒店建设项目水土保持报告表
- 集中供电智能应急照明疏散指示系统施工方案
- JJG 596-2026 安装式交流电能表检定规程
- 2026年人教版初中七年级数学上册单项式多项式判断卷含答案
- 吉林省建设工程质量检测收费项目和指导价格标准
评论
0/150
提交评论