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

📄 32musb.lst

📁 基于ateml89c51为核心处理器的mp3播放器程序。
💻 LST
📖 第 1 页 / 共 4 页
字号:

 672   1              KBCON = 0x00;//设置键盘有效模式为低电平有效,并使能中断Low Level,Enable Interrupt
 673   1              IEN1 = IEN1 | EKB;      //使能键盘中断Enable KeyBoard Interrupt
 674   1      
 675   1      }
 676          
 677          void Func()
 678          {
 679   1                      if (CurrentFun < 3)
 680   1                      {
 681   2                              CurrentFun++;//在选曲/音量调节/音效调节三者间切换
 682   2                      }
 683   1                      else if (CurrentFun == 3)
 684   1                      {
 685   2                              CurrentFun = 1;
 686   2                      }
 687   1      }
 688          
 689          void Next()//按下"下一首/音量减小"键时的处理
 690          {
 691   1      
 692   1              switch (CurrentFun)
 693   1              {//如果当前处于音量调节功能
 694   2                      case VOLUME     :
 695   2                              {
 696   3                                      if (MP3VOR > 0x00)//当前音量没有达到最小时
 697   3                                      {
 698   4                                              MP3VOR -= 0x01;//右声道音量增大一档
 699   4                                              MP3VOL -= 0x01;//左声道音量增大一档
 700   4                                      }
 701   3      
 702   3                                      break;
 703   3                              }
 704   2                      case EFFECTION ://如果处于音效调节功能
 705   2                              {
 706   3                                      if (MP3BAS > 7)
 707   3                                      {//降低重音效果
 708   4                                              MP3BAS -= 7;
 709   4                                              MP3MED = 0x0f;  
 710   4                                              MP3TRE += 7;
 711   4                                      }
 712   3                                      break;
 713   3                              }
 714   2                      case SELECTSONG ://如果处理MP3选取功能
 715   2                              {
 716   3                                      if (NowPlaying == (NumofSong - 1))
 717   3                                      { 
 718   4                                              NowPlaying = 0;//如果已经处于最后一首了,则指向第一首
 719   4                                              MP3InitFlag = 1;
 720   4                                      }
 721   3                                      else 
 722   3                                      { 
 723   4                                              NowPlaying++;   //否则,指向下一首
 724   4                                              MP3InitFlag = 1;
 725   4                                      }
 726   3                              ChangeSong = 1;         //置选曲标志位
 727   3                              /*if(MP3InitFlag){
 728   3                                                                      PlayInit(&SONG[11*NowPlaying]);
 729   3                                                                      MP3InitFlag=0;
 730   3                                                                      }*/
 731   3                                      break;
 732   3                              }
 733   2                      default : break;
C51 COMPILER V7.07   32MUSB                                                                11/26/2006 21:07:28 PAGE 13  

 734   2              }
 735   1              
 736   1      }
 737          
 738          void Previous()//按下"上一首/音量增大"键时的处理
 739          {
 740   1              switch (CurrentFun)
 741   1              {
 742   2                      case VOLUME ://如果当前处于音量调节功能
 743   2                              {
 744   3                                      if (MP3VOR < 0x1f)//当前音量没有达到最大时
 745   3                                      {
 746   4                                              MP3VOR += 0x01;//右声道音量增大一档
 747   4                                              MP3VOL += 0x01;//左声道音量增大一档
 748   4                                      }
 749   3      
 750   3                                      break;
 751   3                              }
 752   2      
 753   2                      case EFFECTION ://如果处于音效调节功能
 754   2                              {
 755   3                                      if (MP3BAS < 0x1d)
 756   3                                      {//增加重音效果
 757   4                                              MP3BAS += 7;
 758   4                                              MP3MED = 0x0f;  
 759   4                                              MP3TRE -= 7;
 760   4                                      }
 761   3                                      break;
 762   3                              }
 763   2      
 764   2                      case SELECTSONG ://如果处理MP3选取功能
 765   2                              {
 766   3                                      if (NowPlaying > 0)
 767   3                                      {
 768   4                                              NowPlaying--;//如果当前播放歌曲不为第一首,则指向上一首
 769   4                                              MP3InitFlag = 1;
 770   4                                      }
 771   3                                      else 
 772   3                                      {
 773   4                                              NowPlaying = NumofSong - 1;//如果当前已经到达第一首,则指向最后一首
 774   4                                              MP3InitFlag = 1;
 775   4                                      }
 776   3                                      ChangeSong = 1;                         //置选曲标志位
 777   3                              /*if(MP3InitFlag){
 778   3                                                                      PlayInit(&SONG[11*NowPlaying]);
 779   3                                                                      MP3InitFlag=0;
 780   3                                                                      }*/
 781   3                                      break;
 782   3                              }
 783   2                      default:break;
 784   2              }
 785   1              
 786   1      }
 787          
 788          void PlayPause()
 789          {
 790   1              PlayState = !PlayState; //按一下播放键时,改变播放状态
 791   1      
 792   1      }
 793          
 794          void key_interrupt() interrupt 11
 795          {
C51 COMPILER V7.07   32MUSB                                                                11/26/2006 21:07:28 PAGE 14  

 796   1                      unsigned char i = 100;
 797   1                      EA = 0;                 //关中断
 798   1                      IEN1 &= (~EKB); //Enable KeyBoard Interrupt
 799   1      
 800   1                      while (i)
 801   1                      {
 802   2                              i--;
 803   2                      }
 804   1      
 805   1                      i = KBSTA;              //取键盘中断位
 806   1                      switch (i)
 807   1                      {               //依次处理四个键中的某个键被按下时的情况
 808   2                              case 1 : Func(); break;
 809   2                              case 2 : Next(); break;
 810   2                              case 4 : Previous(); break;
 811   2                              case 8 : PlayPause(); break;
 812   2                              default : break;
 813   2                      }
 814   1                      IEN1 |= EKB;    //Enable KeyBoard Interrupt
 815   1                      
 816   1                      EA = 1;         //开中断
 817   1                      return;
 818   1      }
 819          void main()
 820          {
 821   1              printu(">>>> CQIT MP3 USB Disk V1.00 <<<<\n");
 822   1      
 823   1              if(P3_3)
 824   1              {
 825   2                      printu("Entering USB Mode...\n");//输出进入U盘功能的信息
 826   2      
 827   2                      AtmelUSBInit(4, 11, 0);//PLL时钟配置,
 828   2                      EpEnable();//端点初始化
 829   2                      UEPNUM = 0;//指向端点0
 830   2                      BulkPoint = Page_Buf;
 831   2      
 832   2                      while(1)
 833   2                      {
 834   3                              //轮询,检查相应端点是否有中断产生
 835   3                              if(UEPINT & EP1INT) main_txdone();//Bulk-Out端点处理
 836   3                              if(UEPINT & EP2INT) main_rxdone();//Bulk-In端点处理
 837   3                              if(UEPINT & EP0INT) Ep0Int();//端点0处理
 838   3      
 839   3                              UEPINT = 0;//清中断状态寄存器
 840   3                      }
 841   2              }
 842   1              else 
 843   1              {
 844   2                      printu("Entering MP3 Mode...\n");
 845   2      
 846   2                      Flash_Reset();//Flash复位
*** WARNING C206 IN LINE 846 OF 32MUSB.C: 'Flash_Reset': missing function-prototype
 847   2                      Init();//MP3初始化
 848   2                      KeyBoardInit();//键盘初始化
 849   2      
 850   2                      MP3InitFlag = 1;
 851   2                      EA = 1;//开中断,键盘可以开始工作
 852   2      
 853   2                      NumofSong = GetMP3List();//得到U盘中的MP3歌曲列表
 854   2                      printuf("Song:%x\n", NumofSong);//输出歌曲总数信息
 855   2      
 856   2                      if(NumofSong == 0) 
C51 COMPILER V7.07   32MUSB                                                                11/26/2006 21:07:28 PAGE 15  

 857   2                      {
 858   3                              printu("There is no MP3 file in USB Disk!\n");
 859   3                      }
 860   2      
 861   2                      //P3_5 = 0;//打开USB灯亮
 862   2                      
 863   2                      while(1) 
 864   2                      {
 865   3                              if(NumofSong != 0)
 866   3                              {
 867   4                                      if(MP3InitFlag)
 868   4                                      {
 869   5                                              PlayInit(&SONG[11 * NowPlaying]);
 870   5                                              MP3InitFlag = 0;
 871   5                                      }
 872   4                                      PlayMP3(&SONG[11 * NowPlaying]);//如果处于播放状态,则播放当前歌曲
 873   4                              }
 874   3                              if(NowPlaying == NumofSong) 
 875   3                              {
 876   4                                      //PlayState = STOP;                     //全部歌曲播放完了,播放器停止
 877   4                                      NowPlaying = 0;//循环播放
 878   4                              }
 879   3                      }
 880   2      
 881   2              }
 882   1      }       


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2326    ----
   CONSTANT SIZE    =    419    ----
   XDATA SIZE       =    101      63
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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