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

📄 mp3_player.lst

📁 基于at89c51单片机的mp3 mp3播放实验资料及代码
💻 LST
字号:
C51 COMPILER V7.50   MP3_PLAYER                                                            01/15/2006 18:49:03 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MP3_PLAYER
OBJECT MODULE PLACED IN MP3_PLAYER.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE MP3_PLAYER.C LARGE ROM(COMPACT) BROWSE

line level    source

   1          
   2          #include "AT89C51SND1_REG.H"
   3          #include "MP3_PLAYER.H"
   4          #include "FILE_SYS.H"
   5          #include "MCU_UART.H"
   6          
   7          
   8          void MP3FsInit(unsigned char NDIV, unsigned int RDIV, unsigned char MPCD, unsigned char AUCD)
   9          {
  10   1              PLLNDIV = 0;
  11   1              PLLRDIV = 0;
  12   1              MP3CLK = 0;
  13   1              AUDCLK = 0;
  14   1      //PLLclk=(OSCclk*(RDIV+1))/(int)(NDIV+1)
  15   1              PLLNDIV = 0x7f&NDIV;           //set NDIV                  
  16   1              PLLCON  |= (0x3&RDIV) << 6;    //set RDIV                  
  17   1              PLLRDIV = (0x3ff&RDIV) >> 2;   
  18   1      
  19   1      //MP3CLK=PLLCLK/(int)(MPCD+1)
  20   1              MP3CLK |= MPCD;
  21   1      
  22   1      //AUDCLK=PLLCLK/(int)(AUCD+1)
  23   1              AUDCLK  |= AUCD;             
  24   1      
  25   1      }
  26          
  27          void PllInit(void)
  28          {
  29   1              CKCON |= X2;
  30   1              PLLCON &= (~PLLRES);  //Enable PLL
  31   1              PLLCON |= PLLEN;
  32   1      }
  33          
  34          void MP3Init()
  35          {
  36   1              MP3VOR = 0x0a;
  37   1              MP3VOL = 0x0a;
  38   1              MP3BAS = 0x10;
  39   1              MP3MED = 0x10;
  40   1              MP3TRE = 0x10;
  41   1              MP3CON &= (~MSKREQ);            //Clear to allow the 
  42   1                                          //MPREQ flag to generate a MP3 interrupt.
  43   1          MP3CON |= MPEN;                     //enable the MP3 decoder.
  44   1      }
  45          
  46          void AudioInit()
  47          {       
  48   1              AUDCON0 = 0x77;                                    //0111 0110
  49   1              AUDCON1 &= (~0xB0);                                //SRC=0,MSREQ=0,MUDRN=0
  50   1              AUDCON1 |= 0x01;
  51   1              AUDCON1 |= 0x40;
  52   1      }
  53          
  54          void MP3_Init(void)
  55          {
C51 COMPILER V7.50   MP3_PLAYER                                                            01/15/2006 18:49:03 PAGE 2   

  56   1              PllInit();
  57   1              MP3Init();
  58   1              AudioInit();
  59   1      }
  60          
  61          void PlayMP3()
  62          {
  63   1                      unsigned int i,j,total_size,readbyte;
  64   1                      unsigned char data MP3_Framehead[4]; 
  65   1      
  66   1                      i = 0;
  67   1                      readbyte = ReadFile();      //Read 512 Bytes at first
  68   1      /*              when the first 3 bytes are 49 44 33 the next can be 03,this means ID3 V2.3  */
  69   1                      
  70   1                      if (PageBuf[0] == 0x49)
  71   1                              {
  72   2                               if ((PageBuf[1] == 0x44) && (PageBuf[2] == 0x33))
  73   2                                      {
  74   3                                              total_size = (PageBuf[6] & 0x7F) * 0x200000 + (PageBuf[7] & 0x7F) * 0x4000 + (PageBuf[8] & 0x7F) * 0x
             -80 + (PageBuf[9] & 0x7F);
  75   3                                              while (total_size > 512)
  76   3                                              {
  77   4                                                      ReadFile();
  78   4                                                      total_size -=512;
  79   4                                              }
  80   3      
  81   3                                              i = total_size;
  82   3      
  83   3                                      printu("Skip ID3V2\n");
  84   3                                              if (PageBuf[i] != 0xFF)  //if not 0xFF,there is not the Frame head, but extend label 
  85   3                                              {i += 10;
  86   4                                                       printu("Skip Extend Label\n");
  87   4                                                      }
  88   3                                      }
  89   2                               }
  90   1                      else printu("No ID3V2\n");
  91   1      
  92   1                      printuf16x("Frame Header Offset in Page is %x\n",i);
  93   1      
  94   1              if ((PageBuf[i] == 0xFF) && (PageBuf[i + 1] & 0xF0 == 0xF0))//get MP3 information from FF FX XX XX 4b
             -ytes,
  95   1                              {
  96   2                                      MP3_Framehead[0] = PageBuf[i];
  97   2                                      MP3_Framehead[1] = PageBuf[i + 1];
  98   2                                      MP3_Framehead[2] = PageBuf[i + 2];
  99   2                                      MP3_Framehead[3] = PageBuf[i + 3];
 100   2                                      printu("MP3 Frame Header is ");
 101   2                                      for(j=0;j<4;j++)
 102   2                                              printuf("%x ",MP3_Framehead[j]);
 103   2                                      printu("\n");
 104   2                              }
 105   1      
 106   1                      if (MP3_Framehead[1] & 0x08) 
 107   1                              {
 108   2                                      switch ((MP3_Framehead[2] & 0x0C) >> 2) 
 109   2                                      {
 110   3                                              case 0x00 : MP3FsInit(24, 126, 3, 5); 
 111   3                                                          printu("Bit Rate is 44.1 KHz\n");break;         //Fs=44.1kHz
 112   3                                              case 0x01 : MP3FsInit(124, 575, 3, 4); 
 113   3                                                                      printu("Bit Rate is 48 KHz\n");break;         //Fs=48kHz
 114   3                                              default : break;
 115   3                                      }
C51 COMPILER V7.50   MP3_PLAYER                                                            01/15/2006 18:49:03 PAGE 3   

 116   2                              } 
 117   1                      else 
 118   1                              {
 119   2                                      switch ((MP3_Framehead[2] & 0x0C) >> 2)
 120   2                                      {
 121   3                                              case 0x00 : MP3FsInit(24, 126, 3, 11); 
 122   3                                                                      printu("Bit Rate is 22.05 KHz\n");break;         //Fs=22.05kHz
 123   3                                              case 0x01 : MP3FsInit(124, 575, 3, 9); 
 124   3                                                                      printu("Bit Rate is 24 KHz\n");break;         //Fs=24kHz
 125   3                                              default : break;
 126   3                                      }
 127   2                              }
 128   1      
 129   1                      for (j=i; j<readbyte; j++)              //将已经读到的Page写入MP3解码器
 130   1                              {
 131   2                               while (!(MP3STA1 & MPBREQ)); 
 132   2                               MP3DAT = PageBuf[j]; 
 133   2                              }               
 134   1                      while (1)
 135   1                         {   
 136   2                              readbyte = ReadFile();     //继续读Page并送入MP3解码器
 137   2                              for (i=0; i<readbyte; i++) 
 138   2                                      {
 139   3                                       while (!(MP3STA1 & MPBREQ)); 
 140   3                                       MP3DAT = PageBuf[i]; 
 141   3                                      }
 142   2                              
 143   2                              if (readbyte < 512) 
 144   2                                      return;
 145   2                      }
 146   1      }
 147          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    777    ----
   CONSTANT SIZE    =    188    ----
   XDATA SIZE       =   ----      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   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 + -