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

📄 mp3.lst

📁 硬盘MP3播放器的源代码
💻 LST
字号:
C51 COMPILER V7.06   MP3                                                                   03/02/2006 23:11:51 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MP3
OBJECT MODULE PLACED IN MP3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MP3.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /************************************************************************************
   2            本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
   3           
   4             MP3.C File
   5             The MP3 play file
   6             Created by Computer-lov. Date: 2005.3.19
   7             Last edited date: 2005.5.31
   8             version 1.1
   9             Copyright (c) 2005 Computer-lov
  10             All rigths reserved
  11          ***************************************************************************************/
  12          
  13          #include "AT89C51SND1C.H"
  14          #include "Initial.h"
  15          #include "file_system.h"
  16          #include "IDE.H"
  17          #include "keyboard.h"
  18          #include "hardware.h"
  19          #include "MP3.H"
  20          #include "LCD.H"
  21          
  22          unsigned char status;   //程序运行状态
  23          
  24          extern unsigned char mp3_file_exist;
  25          
  26          void DAC_start(unsigned char clk)  //DAC开始工作
  27          {
  28   1       set_DAC_CLK(clk);   //根据MP3文件,设置相应的DAC时钟频率
  29   1       DAC_interface_en();
  30   1       DAC_data_request_en();
  31   1      }
  32          
  33          
  34          unsigned char xdata function,vol,bas,med,tre;  //保存音量等设置
  35          
  36          code unsigned char MPEGVer[2][7]={"MPEG-2","MPEG-1"}; //版本显示信息
  37          code unsigned char Fs[8]={22,44,24,48,16,32,22,44};     //采样率
  38          code unsigned char DACFs[8]={33,16,30,15,46,22,33,16};  //256Fs
  39          //code unsigned char DACFs[8]={22,10,20,9,30,15,0,0}; //384Fs
  40          
  41          ///////////////////////////  MP3 play  /////////////////////////////////////////
  42          void play(void)
  43          {
  44   1       unsigned long int LBA;
  45   1       unsigned int i;
  46   1       unsigned char sectors_count;
  47   1       signed long int file_length;
  48   1       unsigned char count;
  49   1       unsigned char MPEG_inf;   //用来保存MP3版本和采样率
  50   1      
  51   1       /*
  52   1       bit0=0 vertion 2
  53   1       bit0=1 bertion 1
  54   1       */
  55   1       LCD_go_home();
C51 COMPILER V7.06   MP3                                                                   03/02/2006 23:11:51 PAGE 2   

  56   1       prints("               ");
  57   1       LCD_line_feed();
  58   1       prints("               ");
  59   1       file_length=file.length;
  60   1       LBA=file.next_cluster_number-(dbr[driver_number].root_cluster_num);
  61   1       LBA=LBA*(dbr[driver_number].sectors_per_cluster)+DATA_start_sector[driver_number];
  62   1      
  63   1       MP3_CRC_disen();
  64   1      
  65   1       sectors_count = dbr[driver_number].sectors_per_cluster;
  66   1      
  67   1       read_IDE_sector(LBA);
  68   1       if(buffer[0]!=0xFF){pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}
  69   1       if((buffer[1]&0x06)!=0x02){pause();MP3_decoder_disen();DAC_interface_disen();key=0;LCD_line_feed();prints
             -("MP3 层错误!!  ");while(!key);get_next_file();return;}
  70   1      //////////////////////// 从MP3侦头中获取采样率和压缩版本信息  //////////////
  71   1       MPEG_inf=buffer[2]&0x0C; //采样率
  72   1       MPEG_inf>>=1;
  73   1       if((buffer[1]&0x18)==0x18)MPEG_inf=MPEG_inf | 0x01; //版本1
  74   1       if((buffer[1]&0x18)==0x10)MPEG_inf=MPEG_inf & (~0x01);  //版本2
  75   1      ///////////////////////////////////////////////////////////////////////////
  76   1      
  77   1      ////////////////////////   填充1K数据  ////////////////////////////////////
  78   1       for(i=0;i<512;i++)MP3DAT=buffer[i];
  79   1       LBA++;
  80   1       sectors_count--;
  81   1       if(file_length>512)file_length-=512;
  82   1       else {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}
  83   1       if(sectors_count==0){LBA=get_next_sector();sectors_count=dbr[driver_number].sectors_per_cluster;}
  84   1       read_IDE_sector(LBA);
  85   1       for(i=0;i<512;i++)MP3DAT=buffer[i];
  86   1       LBA++;
  87   1       sectors_count--;
  88   1       if(file_length>512)file_length-=512;
  89   1       else {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}
  90   1       if(sectors_count==0){LBA=get_next_sector();sectors_count=dbr[driver_number].sectors_per_cluster;}
  91   1      
  92   1       MP3_decoder_en();           //启动解码器
  93   1       DAC_start(DACFs[MPEG_inf]); //初始化DAC接口
  94   1       byte_offset=512;
  95   1       key=KEY_FUN;
  96   1       function=FUN_MAX;
  97   1       while(1)
  98   1        {
  99   2         if(key)                 //如果有键按下
 100   2          {
 101   3           switch (key)
 102   3            {
 103   4             case KEY_FUN:  //功能键按下
 104   4               {
 105   5                function++;
 106   5                if(function>=FUN_MAX)function=FUN_SEL;
 107   5                switch (function)
 108   5                 {
 109   6                  case FUN_SEL:LCD_go_home();for(count=0;count<14;count++)write_LCD_data(((unsigned char *)dir_n
             -ame)[count]);LCD_line_feed();prints("当前曲号: ");printf(play_count);LED1=1;LED2=1;LED3=1;break;
 110   6                  case FUN_VOL:LCD_line_feed();prints("音量: ");printf(vol);prints("      ");LED1=0;LED2=1;LED3=
             -0;break;
 111   6                  case FUN_BAS:LCD_line_feed();prints("低音: ");printf(bas);prints("      ");LED1=1;LED2=1;LED3=
             -0;break;
 112   6                  case FUN_MED:LCD_line_feed();prints("中音: ");printf(med);prints("      ");LED1=1;LED2=0;LED3=
             -1;break;
C51 COMPILER V7.06   MP3                                                                   03/02/2006 23:11:51 PAGE 3   

 113   6                  case FUN_TRE:LCD_line_feed();prints("高音: ");printf(tre);prints("      ");LED1=0;LED2=1;LED3=
             -1;break;
 114   6                  case FUN_BOOT:LCD_line_feed();prints("重低音: ");if(MP3CON&0x40)prints("开");else prints("关")
             -;prints("      ");LED1=0;LED2=0;LED3=0;break;
 115   6                 }
 116   5                key=0;break;
 117   5               }
 118   4             case KEY_UP:   //上翻键按下
 119   4              {
 120   5               switch (function)
 121   5                {
 122   6                 case FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_pre_file();LCD_go_home();for(count=
             -0;count<14;count++)write_LCD_data(((unsigned char *)dir_name)[count]);LCD_line_feed();prints("当前曲号: ");printf(play_c
             -ount);key=0;return;}
 123   6                 case FUN_VOL:{if(vol<31)vol++;set_vol(vol);set_vor(vol);LCD_line_feed();prints("音量: ");printf
             -(vol);prints("      ");break;}
 124   6                 case FUN_BAS:{if(bas<31)bas++;set_bas(bas);LCD_line_feed();prints("低音: ");printf(bas);prints(
             -"      ");break;}
 125   6                 case FUN_MED:{if(med<31)med++;set_med(med);LCD_line_feed();prints("中音: ");printf(med);prints(
             -"      ");break;}
 126   6                 case FUN_TRE:{if(tre<31)tre++;set_tre(tre);LCD_line_feed();prints("高音: ");printf(tre);prints(
             -"      ");break;}
 127   6                 case FUN_BOOT:{MP3_bass_boost();LCD_line_feed();prints("重低音: ");prints("开");prints("      "
             -);break;}
 128   6                }
 129   5               key=0;break;
 130   5              }
 131   4             case KEY_DOWN:   //下翻键按下
 132   4              {
 133   5               switch (function)
 134   5                {
 135   6                 case FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_next_file();LCD_go_home();for(count
             -=0;count<14;count++)write_LCD_data(((unsigned char *)dir_name)[count]);LCD_line_feed();prints("当前曲号: ");printf(play_
             -count);key=0;return;}
 136   6                 case FUN_VOL:{if(vol>0)vol--;set_vol(vol);set_vor(vol);LCD_line_feed();prints("音量: ");printf(
             -vol);prints("      ");break;}
 137   6                 case FUN_BAS:{if(bas>0)bas--;set_bas(bas);LCD_line_feed();prints("低音: ");printf(bas);prints("
             -      ");break;}
 138   6                 case FUN_MED:{if(med>0)med--;set_med(med);LCD_line_feed();prints("中音: ");printf(med);prints("
             -      ");break;}
 139   6                 case FUN_TRE:{if(tre>0)tre--;set_tre(tre);LCD_line_feed();prints("高音: ");printf(tre);prints("
             -      ");break;}
 140   6                 case FUN_BOOT:{MP3_no_bass_boost();LCD_line_feed();prints("重低音: ");prints("关");prints("    
             -  ");break;}
 141   6                }
 142   5               key=0;break;
 143   5              }
 144   4             case KEY_OK:
 145   4              {
 146   5               MP3_decoder_disen();
 147   5               DAC_interface_disen();
 148   5               status=STOP;
 149   5               for(i=(folder_length/2);i<(7+folder_length/2);i++)dir_name[i]=0x2020;
 150   5               LCD_line_feed();
 151   5               prints("停止          ");
 152   5               key=0;
 153   5               return;
 154   5              }
 155   4            }
 156   3          }
 157   2         while(MPFREQ)
 158   2          {
C51 COMPILER V7.06   MP3                                                                   03/02/2006 23:11:51 PAGE 4   

 159   3           if((((unsigned char *)&byte_offset)[0])&0xFE)
 160   3            {
 161   4             read_IDE_sector(LBA);
 162   4             LBA++;
 163   4             byte_offset=0;
 164   4             sectors_count--;
 165   4             file_length-=512;
 166   4             while(MPFREQ)
 167   4              {
 168   5               MP3DAT=buffer[byte_offset];
 169   5               byte_offset++;
 170   5               if((((unsigned char *)&byte_offset)[0])&0xFE)break;
 171   5              }
 172   4             if(file_length<=0) {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;
             -}
 173   4             if(sectors_count==0){LBA=get_next_sector();sectors_count=(dbr[driver_number].sectors_per_cluster);}
 174   4            }
 175   3           if(MPFREQ)
 176   3            {
 177   4             MP3DAT=buffer[byte_offset];
 178   4             byte_offset++;
 179   4            }
 180   3          }
 181   2        }
 182   1      }
 183          ///////////////////////////////////////////////////////////////////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1840    ----
   CONSTANT SIZE    =    137    ----
   XDATA SIZE       =      5    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      13
   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 + -