⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3.lst

📁 用89C51SND1C实现MP3播放器的源代码.用KEIL c51编写.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 347   1                      {
 348   2                              for(i=0;i<1024;i++)//第一次要向解码器缓存中置入1024字节
 349   2                              {
 350   3                                      if(j==512)//当用完512字节时
 351   3                                      {
 352   4                                              m=ReadSector(SongName,Page_Buf);//读取当前歌曲的下一个512字节
 353   4                                              j=0;
 354   4                                      }
 355   3                                      MP3DAT=Page_Buf[j++];//向MP3解码器数据寄存器送入一个数
 356   3                                      while(!PlayState) ;     //如果是暂停状态则等待
 357   3                                      while(ChangeSong) {DataRead=0;ChangeSong=0;return;}//如果选曲时,则重新播放当前曲目
 358   3                                      while(!(MP3STA1&MPBREQ));//等待中断再次产生
 359   3      
 360   3                              }
 361   2                      }
 362   1              
 363   1                      //Other MP3 data
 364   1      //              while(1){
C51 COMPILER V6.23a  MP3                                                                   12/02/2003 11:07:53 PAGE 7   

 365   1                              while(MP3STA1&MPFREQ)   {//解码器数据请求中断产生时
 366   2                                              if(j==512){//当用完512字节时
 367   3                                                      j=0;
 368   3                                                      if(m<512) {NowPlaying++;return;}//如果上一次从歌曲中读出的数据不足512时,则结束本歌曲播放
 369   3      
 370   3                                                      m=ReadSector(SongName,Page_Buf);//读取当前歌曲的下一个512字节
 371   3                                                      }
 372   2                                              MP3DAT=Page_Buf[j++];//向MP3解码器数据寄存器送入一个数
 373   2                                              while(!PlayState) ;//如果是暂停状态则等待
 374   2                                              while(ChangeSong) {DataRead=0;ChangeSong=0;return;}//如果选曲时,则重新播放当前曲目
 375   2                                              while(!(MP3STA1&MPBREQ)) ;//等待中断再次产生
 376   2                                              }
 377   1      //                      }
 378   1              
 379   1      }
 380          
 381          void KeyBoardInit()
 382          {
 383   1              P1=0x0f;        //将端口1的低四位,即键盘对应的4位置1
 384   1              KBCON=0x00;//设置键盘有效模式为低电平有效,并使能中断Low Level,Enable Interrupt
 385   1              IEN1=IEN1|EKB;  //使能键盘中断Enable KeyBoard Interrupt
 386   1      
 387   1      }
 388          
 389          void Func()
 390          {
 391   1                      if(CurrentFun<3) CurrentFun++;//在选曲/音量调节/音效调节三者间切换
 392   1                      else if(CurrentFun==3) CurrentFun=1;
 393   1      }
 394          void Next()//按下"下一首/音量减小"键时的处理
 395          {
 396   1      
 397   1              switch(CurrentFun){//如果当前处于音量调节功能
 398   2                      case VOLUME             :
 399   2                              {
 400   3                              if(MP3VOR>0x00)//当前音量没有达到最小时
 401   3                              {
 402   4                              MP3VOR-=0x01;//右声道音量增大一档
 403   4                              MP3VOL-=0x01;//左声道音量增大一档
 404   4                              }
 405   3      
 406   3                              break;
 407   3                              }
 408   2                      case EFFECTION  ://如果处于音效调节功能
 409   2                              {
 410   3                              if(MP3BAS>7){//降低重音效果
 411   4                                      MP3BAS-=7;
 412   4                                      MP3MED=0x0f;    
 413   4                                      MP3TRE+=7;
 414   4                                      }
 415   3                              break;
 416   3                              }
 417   2                      case SELECTSONG ://如果处理MP3选取功能
 418   2                              {
 419   3                              if(NowPlaying==(NumofSong-1)) NowPlaying=0;//如果已经处于最后一首了,则指向第一首
 420   3                              else NowPlaying++;      //否则,指向下一首
 421   3                              ChangeSong=1;           //置选曲标志位
 422   3                              break;
 423   3                              }
 424   2                      default:break;
 425   2              }
 426   1      }
C51 COMPILER V6.23a  MP3                                                                   12/02/2003 11:07:53 PAGE 8   

 427          void Previous()//按下"上一首/音量增大"键时的处理
 428          {
 429   1              switch(CurrentFun){
 430   2                      case VOLUME             ://如果当前处于音量调节功能
 431   2                              {
 432   3                              if(MP3VOR<0x1f)//当前音量没有达到最大时
 433   3                              {
 434   4                              MP3VOR+=0x01;//右声道音量增大一档
 435   4                              MP3VOL+=0x01;//左声道音量增大一档
 436   4                              }
 437   3      
 438   3                              break;
 439   3                              }
 440   2                      case EFFECTION  ://如果处于音效调节功能
 441   2                              {
 442   3                              if(MP3BAS<0x1d){//增加重音效果
 443   4                                      MP3BAS+=7;
 444   4                                      MP3MED=0x0f;    
 445   4                                      MP3TRE-=7;
 446   4                                      }
 447   3                              break;
 448   3                              }
 449   2                      case SELECTSONG ://如果处理MP3选取功能
 450   2                              {
 451   3                              if(NowPlaying>0)NowPlaying--;//如果当前播放歌曲不为第一首,则指向上一首
 452   3                              else NowPlaying=NumofSong-1;//如果当前已经到达第一首,则指向最后一首
 453   3                              ChangeSong=1;                           //置选曲标志位
 454   3                              break;
 455   3                              }
 456   2                      default:break;
 457   2              }
 458   1      }
 459          void PlayPause()
 460          {
 461   1              PlayState=!PlayState;   //按一下播放键时,改变播放状态
 462   1      
 463   1      }
 464          void key_interrupt() interrupt 11
 465          {
 466   1                      unsigned char i=0;
 467   1                      EA=0;                   //关中断
 468   1                      IEN1&=(~EKB);   //Enable KeyBoard Interrupt
 469   1                      i=KBSTA;                //取键盘中断位
 470   1                      switch(i){              //依次处理四个键中的某个键被按下时的情况
 471   2                              case 1: Func();break;
 472   2                              case 2: Next();break;
 473   2                              case 4: Previous();break;
 474   2                              case 8: PlayPause();break;
 475   2                              default:break;
 476   2                      }
 477   1                      IEN1|=EKB;      //Enable KeyBoard Interrupt
 478   1                      EA=1;           //开中断
 479   1                      return;
 480   1      }
 481          
 482          void main()
 483          {
 484   1      
 485   1      //      int i,j;
 486   1              printu("UP-TECH MP3 Player Test!\n");
 487   1              P3_5 = 0x01;//USBLED off
 488   1              P3_3 = 0;       //P3_3=0 LCD Power off,P3_3=1 LCD Power on
C51 COMPILER V6.23a  MP3                                                                   12/02/2003 11:07:53 PAGE 9   

 489   1      
 490   1              printu("Entering MP3...\n");
 491   1              Flash_Reset();//Flash复位
 492   1              MP3Init();//MP3初始化
 493   1              KeyBoardInit();//键盘初始化
 494   1      
 495   1              EA=1;//开中断,键盘可以开始工作
 496   1              NumofSong=GetMP3List();//得到U盘中的MP3歌曲列表
 497   1              printuf("Song:%x\n",NumofSong);//输出歌曲总数信息
 498   1              if(NumofSong==0) printu("There is no MP3 file in USB Disk!\n");
 499   1              P3_5=0;//打开USB灯亮
 500   1      
 501   1              while(1) {
 502   2                      if(NumofSong!=0) PlayMP3(&SONG[11*NowPlaying]);//如果处于播放状态,则播放当前歌曲
 503   2                      if(NowPlaying==NumofSong) PlayState=STOP;                       //全部歌曲播放完了,播放器停止
 504   2              }
 505   1      
 506   1      }               
 507          
 508          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1455    ----
   CONSTANT SIZE    =    290    ----
   XDATA SIZE       =     95      49
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -