单片机控制的MP3音乐播放器).doc_第1页
单片机控制的MP3音乐播放器).doc_第2页
单片机控制的MP3音乐播放器).doc_第3页
单片机控制的MP3音乐播放器).doc_第4页
单片机控制的MP3音乐播放器).doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

使用AT89S52制作的MP3播放器仅供参考 原理图已经加上了于大家分享#include #include #define uchar unsigned char#define uint unsigned int#define LCDPORT P0unsigned int code tab=64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178;unsigned char code name=1234567 ;unsigned char code num=200711111111;unsigned char code tab1=PLAYING MUSIC IS;unsigned char code tab2=TWO BUFFER;unsigned char code tab3=THE TONE IS;unsigned char code tab4=LOW SO LOW LA LOW TI MID DO MID RE MIN MI MIN FA MID SO MID LA MID TI HIG DO HIG RE HIG MI HIG FA HIG SO HIG LA;/两只蝴蝶Unsigned char code Music_Two = 0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03, 0x17,0x03,0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x15,0x03,0x16,0x01,0x17,0x03,0x16,0x03, 0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00, 0x19,0x03,0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03,0x16,0x03, 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,0x1B,0x04, 0x17,0x02, 0x1A,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x1A,0x03,0x19,0x03,0x17,0x03,0x16,0x03,0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03,0x1F,0x02, 0x1B,0x03, 0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x17,0x02,0x1A,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02,0x10,0x03, 0x15,0x00, 0x00,0x00 ;/*/*/#ifndef _SOUNDPLAY_H_REVISION_FIRST_#define _SOUNDPLAY_H_REVISION_FIRST_/*/#define SYSTEM_OSC 12000000#define SOUND_SPACE 4/5 sbit BeepIO=P30;unsigned int code FreTab12 = 262,277,294,311,330,349,369,392,415,440,466,494 ; /原始频率表unsigned char code SignTab7 = 0,2,4,5,7,9,11 ; /17在频率表中的位置unsigned char code LengthTab7= 1,2,4,8,16,32,64 ;unsigned char Sound_Temp_TH0,Sound_Temp_TL0;/音符定时器初值暂存unsigned char Sound_Temp_TH1,Sound_Temp_TL1;/音长定时器初值暂存/*/void InitialSound(void)BeepIO = 0;Sound_Temp_TH1 = (65536-(1/1200)*SYSTEM_OSC)/256;/ 计算TL1应装入的初值 (10ms的初装值)Sound_Temp_TL1 = (65536-(1/1200)*SYSTEM_OSC)%256;/ 计算TH1应装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD = 0x11;ET0 = 1; ET1 = 0; TR0 = 0; TR1= 0; EA = 1;void BeepTimer0(void) interrupt 1/音符发生中断BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;/*/void Play(unsigned char *Sound;unsigned char Signature;unsigned char Octachord;unsigned int Speed)unsigned int NewFreTab12;/新的频率表unsigned char i,j;int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLengt;unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i 11)j = j-12; NewFreTabi = FreTabj*2;elseNewFreTabi = FreTabj;if(Octachord = 1)NewFreTabi=2;else if(Octachord = 3)NewFreTabi=2;SoundLength = 0;while(SoundSoundLength != 0x00)/计算歌曲长度SoundLength+=2;Point = 0; Tone = SoundPoint;Length = SoundPoint+1; / 读出第一个音符和它时时值LDiv0 = 12000/Speed;/ 算出1分音符的长度(几个10ms)LDiv4 = LDiv0/4; / 算出4分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; / 普通音最长间隔标准TR0 = 0;TR1 = 1;while(Point = 2; /低音if (SM=3) CurrentFre = 2; /高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);/计算计数器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; /加12是对中断延时的补偿SLen=LengthTabLength%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 (SLen0;i-) /发规定长度的音while(TF1=0);TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;TF1=0;if(LDiv2!=0)TR0=0; BeepIO=0;for(i=LDiv2;i0;i-) /音符间的间隔while(TF1=0);TH1=Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;Point+=2;Tone=SoundPoint;Length=SoundPoint+1;BeepIO = 0;/*液晶函数*/*/sbit LCDE=P35;sbit LCDRW=P36;sbit LCDRS=P37;void Delay()uint uiCount; for(uiCount=0;uiCount0;i-) for(y=255;y0;y-);/*/#endif main() unsigned char temp;unsigned char key;unsigned char k,y,m,x,z,i,j;unsigned char counter;InitialSound(); inicry();/*键盘扫描*/ void key_scan() if(key1=0)/-key1为模式转换键)-delay_ms(9);/延时,用于消抖动if(key1=0)/延时后再次确认按键按下while(!key1);set+;if(set=3)set=1;/模式转换按键选择模式if(key2=0)/-key2为曲目2或音符duo)-delay_ms(9);/延时,用于消抖动if(key2=0)/延时后再次确认按键按下 duo=1;while(!key2);if(key3=0)/-key3为曲目3或ruai)-delay_ms(9);/延时,用于消抖动if(key3=0)/延时后再次确认按键按下ru=1;while(!key3);if(key4=0)/-key4为曲目4或mi)-delay_ms(9);/延时,用于消抖动if(key4=0)/延时后再次确认按键按下mi=1;while(!key4);if(key5=0)/-key5为曲目5或fa)-delay_ms(9);/延时,用于消抖动if(key5=0)/延时后再次确认按键按下fa=1;while(!key5);if(key6=0)/-key6为曲目6或suo)-delay_ms(9);/延时,用于消抖动if(key6=0)/延时后再次确认按键按下suo=1;while(!key6);if(key7=0)/-key7为曲目7或la)-delay_ms(9);/延时,用于消抖动if(key7=0)/延时后再次确认按键按下la=1;while(!key7);if(key8=0)/-key8为曲目8或xi)-delay_ms(9);/延时,用于消抖动if(ke

温馨提示

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

评论

0/150

提交评论