32musb.lst

来自「这个是一个完整的MP3项目」· LST 代码 · 共 941 行 · 第 1/4 页

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

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

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2334    ----
   CONSTANT SIZE    =    422    ----
   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 + =
减小字号Ctrl + -
显示快捷键?