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

📄 cdrom_task.lst

📁 atmel at89c51snd1c mp3芯片方案源码
💻 LST
字号:
C51 COMPILER V7.50   CDROM_TASK                                                            02/16/2009 09:59:55 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CDROM_TASK
OBJECT MODULE PLACED IN cdrom_task.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE lib_mcu\cdrom\cdrom_task.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\cdrom_ta
                    -sk.lst) OBJECT(cdrom_task.obj)

line level    source

   1          #include "config.h"                         /* system definition */
   2          #include "cdrom_drv.h"
   3          #include "lib_mcu\clock\clock.h"
   4          #include "lib_mcu\lcd\lcd_drv.h" 
   5          #include "lib_mcu\ide\ide_drv.h"
   6          #include "modules\display\disp_task.h"
   7          #include "lib_mcu\kbd\key_drv.h"            /* Keyboard driver definition */
   8          #include <stdio.h>
   9          
  10          
  11          extern      bit     gl_key_press;       /* TRUE when a key is decoded */
  12          extern      Byte    gl_key;             /* value of the key pressed */
  13          extern      INT8U   CmdPack[12];
  14          
  15          INT8U    RcvBuff[24];
  16          INT8U    u8CdStatus;
  17          
  18          str_cdinfo  str_CdTotalInfo;
  19          str_cdinfo  str_CdCurrentInfo; 
  20          
  21          ////////////////////////////////////////////////////////////////////////
  22          void cd_playtrack(INT8U u8Track)
  23          {
  24   1         INT8U i;
  25   1         for(i=0; i<12; i++)
  26   1         {
  27   2           CmdPack[i] = 0;
  28   2         }
  29   1      
  30   1         CmdPack[0] = 0x43;
  31   1         CmdPack[1] = 0x02;
  32   1         CmdPack[6] = u8Track;
  33   1         CmdPack[8] = 0x0c;
  34   1      
  35   1         do{ACC = CDROM_FILE7;}while(BSY | DRQ);
  36   1         CDROM_FILE7 = 0xa0;
  37   1         do{ACC = CDROM_FILE7;}while(BSY | (!DRQ));
  38   1      
  39   1         for(i=0; i<12;)
  40   1         {
  41   2                DAT16H      = CmdPack[i + 1];
  42   2            CDROM_FILE0 = CmdPack[i]; 
  43   2            i += 2;
  44   2         }
  45   1      
  46   1         cd_getdata(RcvBuff, 16);
  47   1      
  48   1         for(i=0; i<12; i++)
  49   1         {
  50   2           CmdPack[i] = 0;
  51   2         }
  52   1      
  53   1         CmdPack[0] = 0x47;
  54   1         CmdPack[3] = RcvBuff[9];
C51 COMPILER V7.50   CDROM_TASK                                                            02/16/2009 09:59:55 PAGE 2   

  55   1         CmdPack[4] = RcvBuff[10];
  56   1         CmdPack[5] = RcvBuff[11];
  57   1         CmdPack[6] = str_CdTotalInfo.u8Min;
  58   1         CmdPack[7] = str_CdTotalInfo.u8Sec;
  59   1      
  60   1         do{ACC = CDROM_FILE7;}while(BSY | DRQ);
  61   1         CDROM_FILE7 = 0xa0;
  62   1         do{ACC = CDROM_FILE7;}while(BSY | (!DRQ));
  63   1      
  64   1         for(i=0; i<12;)
  65   1         {
  66   2                DAT16H      = CmdPack[i + 1];
  67   2            CDROM_FILE0 = CmdPack[i]; 
  68   2            i += 2;
  69   2         }
  70   1      }
  71          
  72          
  73          ////////////////////////////////////////////////////////////////////////
  74          INT8U cdrom_getvol(void)
  75          {
  76   1         cd_command(CMD_MODESENSE);
  77   1         cd_getdata(RcvBuff, 24);
  78   1         //u16CdVolumeStep = RcvBuff[17] / 10;   //for example vol=123 volstep = 12
  79   1         //return u16CdVolumeStep;
  80   1         return RcvBuff[17];
  81   1      }
  82          
  83          
  84          ////////////////////////////////////////////////////////////////////////
  85          INT8U cdrom_volctrl(bit ctrl)
  86          {
  87   1         INT8U i,u8Vol;
  88   1      
  89   1         u8Vol = cdrom_getvol();
  90   1      
  91   1         if(ctrl == CDROM_VOLUP)
  92   1         {
  93   2            if(u8Vol < 240)
  94   2                {
  95   3                  u8Vol += 10;
  96   3              RcvBuff[17] = RcvBuff[19] = u8Vol; 
  97   3                }
  98   2                else
  99   2                {
 100   3                  RcvBuff[17] = RcvBuff[19] = 0xff;
 101   3                }
 102   2           
 103   2         }
 104   1         else if(ctrl == CDROM_VOLDN)
 105   1         {
 106   2            if(u8Vol > 10)
 107   2                {
 108   3                  u8Vol -= 10;
 109   3              RcvBuff[17] = RcvBuff[19] = u8Vol; 
 110   3                }
 111   2            else
 112   2                {
 113   3                   RcvBuff[17] = RcvBuff[19] = 0; 
 114   3                }
 115   2         } 
 116   1      
C51 COMPILER V7.50   CDROM_TASK                                                            02/16/2009 09:59:55 PAGE 3   

 117   1         for(i=0; i<8; i++)
 118   1         {
 119   2           RcvBuff[i] = 0;
 120   2         }
 121   1      
 122   1         cd_command(CMD_MODESELECT);
 123   1         while(!CD_INTRQ);
 124   1         do{ACC = CDROM_FILE7;}while(!DRQ);
 125   1      
 126   1         for(i=0; i<24;)
 127   1         {
 128   2                DAT16H      = RcvBuff[i + 1];
 129   2            CDROM_FILE0 = RcvBuff[i]; 
 130   2            i += 2;
 131   2            clock_vDelay(10);
 132   2         }
 133   1      
 134   1         return (u8Vol/10);
 135   1      }
 136          
 137          
 138          ////////////////////////////////////////////////////////////////////////
 139          void cdrom_init(void)
 140          {
 141   1         INT8U i;
 142   1      
 143   1         AUXR = 0x5c;         //设置EXT16=1,使能16-BIT传送模式
 144   1      
 145   1         CD_RST = 0;
 146   1         clock_vDelay(500);
 147   1         CD_RST = 1;
 148   1         clock_vDelay(1000);
 149   1      
 150   1         do{ACC = CDROM_FILE7;}while(BSY);
 151   1         //取驱动器选择寄存器值
 152   1         i = CDROM_FILE6;
 153   1         CDROM_FILE6 = i & 0xef;
 154   1      
 155   1         i = CDROM_FILE4;
 156   1         i = CDROM_FILE5;
 157   1      
 158   1         //执行设备诊断命令
 159   1         CDROM_FILE7 = 0x90;
 160   1         do{ACC = CDROM_FILE7;}while(BSY);
 161   1      
 162   1         ACC = CDROM_FILE1;
 163   1      
 164   1         clock_vDelay(500);
 165   1      
 166   1         CDROM_FILE5 = 0x00;
 167   1         CDROM_FILE4 = 0x10;
 168   1      
 169   1         CDROM_FILE7 = 0xa1;
 170   1         cd_getdata(RcvBuff, 16);
 171   1         clock_vDelay(100);
 172   1      
 173   1         do{ACC = CDROM_FILE7;}while(BSY | (!DRDY));
 174   1      
 175   1         key_cdrom_task_init();
 176   1         u8CdStatus = STATUS_TESTUNITREADY;
 177   1      }
 178          
C51 COMPILER V7.50   CDROM_TASK                                                            02/16/2009 09:59:55 PAGE 4   

 179          
 180          ////////////////////////////////////////////////////
 181          void cdrom_task(void)
 182          {  
 183   1        INT16U   u16CdVolumeStep;
 184   1        INT8U pStr[20];
 185   1      
 186   1        switch(u8CdStatus)
 187   1        {
 188   2           case STATUS_TESTUNITREADY:
 189   2                    cd_command(CMD_TESTUNITREADY);
 190   2                cd_getdata(RcvBuff, 16);
 191   2                ACC = CDROM_FILE7;
 192   2                        if(ERR)
 193   2                        {//test unit ready failed
 194   3                          lcd_print_string(7,"Disc Not Ready...");
 195   3                        }
 196   2                        else
 197   2                        {//test unit ready
 198   3                  lcd_print_string(7,"Loading Disc... ");
 199   3                  clock_vDelay(30000);
 200   3                  lcd_print_string(7,"                ");
 201   3                  u8CdStatus = STATUS_READTOC;
 202   3                        }
 203   2      
 204   2                if(gl_key_press == TRUE)
 205   2                {
 206   3                   if(gl_key == KEY_OPEN)
 207   3                               {
 208   4                                  cd_command(CMD_OPEN);
 209   4                      lcd_print_string(0x40,"Open...   ");
 210   4                      u8CdStatus = STATUS_OPENCD;
 211   4                               }
 212   3                           gl_key_press = FALSE;
 213   3                }
 214   2           break;
 215   2      
 216   2           case STATUS_READTOC:
 217   2                    cd_command(CMD_READTOC);
 218   2                cd_getdata(RcvBuff, 16);
 219   2                str_CdTotalInfo.u8Track = RcvBuff[3];
 220   2                str_CdTotalInfo.u8Min   = RcvBuff[9];
 221   2                str_CdTotalInfo.u8Sec   = RcvBuff[10];
 222   2                disp_cdrom_time(str_CdTotalInfo.u8Track, str_CdTotalInfo.u8Min, str_CdTotalInfo.u8Sec);
 223   2                clock_vDelay(30000);
 224   2                cd_playtrack(1);
 225   2                u8CdStatus = STATUS_PLAYCD;
 226   2                        lcd_print_string(0x40,"Play...   ");
 227   2           break;
 228   2      
 229   2               case STATUS_PLAYCD:
 230   2                    cd_command(CMD_READSUBCH);
 231   2                cd_getdata(RcvBuff, 16);
 232   2                str_CdCurrentInfo.u8Track = RcvBuff[6];
 233   2                str_CdCurrentInfo.u8Min   = RcvBuff[13];
 234   2                str_CdCurrentInfo.u8Sec   = RcvBuff[14];
 235   2                disp_cdrom_time(str_CdCurrentInfo.u8Track, str_CdCurrentInfo.u8Min, str_CdCurrentInfo.u8Sec);
 236   2      
 237   2                if(gl_key_press == TRUE)
 238   2                {
 239   3                   if(gl_key < 10)
 240   3                   {
C51 COMPILER V7.50   CDROM_TASK                                                            02/16/2009 09:59:55 PAGE 5   

 241   4                      str_CdCurrentInfo.u8Track = gl_key;
 242   4                      cd_playtrack(str_CdCurrentInfo.u8Track);
 243   4                   }
 244   3                   else switch(gl_key)
 245   3                   {
 246   4                      case KEY_OPEN:
 247   4                               cd_command(CMD_OPEN);
 248   4                           lcd_print_string(0x40,"Open...   ");
 249   4                           u8CdStatus = STATUS_OPENCD; 
 250   4                      break;
 251   4      
 252   4                      case KEY_PLAY:
 253   4                           cd_command(CMD_PAUSE);
 254   4                           lcd_print_string(0x40,"Pause...  ");
 255   4                           u8CdStatus = STATUS_PAUSECD; 
 256   4                      break;
 257   4      
 258   4                      case KEY_NEXT:
 259   4                           if(str_CdCurrentInfo.u8Track == str_CdTotalInfo.u8Track)
 260   4                           {
 261   5                              str_CdCurrentInfo.u8Track = 1;
 262   5                           }
 263   4                           else
 264   4                           {
 265   5                              str_CdCurrentInfo.u8Track ++;
 266   5                           }
 267   4                           cd_playtrack(str_CdCurrentInfo.u8Track);
 268   4                      break;
 269   4      
 270   4                      case KEY_PREV:
 271   4                           if(str_CdCurrentInfo.u8Track == 1)
 272   4                           {
 273   5                              str_CdCurrentInfo.u8Track =  str_CdTotalInfo.u8Track;
 274   5                           }
 275   4                           else
 276   4                           {
 277   5                              str_CdCurrentInfo.u8Track --;
 278   5                           }
 279   4                           cd_playtrack(str_CdCurrentInfo.u8Track);
 280   4                      break;
 281   4      
 282   4                                      case KEY_INC:
 283   4                                           u16CdVolumeStep = cdrom_volctrl(CDROM_VOLUP);
 284   4                           sprintf(pStr, "VOL:%02d", u16CdVolumeStep);
 285   4                           lcd_print_string(0x4a, pStr);
 286   4                                      break;
 287   4      
 288   4                      case KEY_DEC:
 289   4                           u16CdVolumeStep = cdrom_volctrl(CDROM_VOLDN);
 290   4                           sprintf(pStr, "VOL:%02d", u16CdVolumeStep);
 291   4                           lcd_print_string(0x4a, pStr);
 292   4                              break; 
 293   4                      
 294   4                   }
 295   3                           gl_key_press = FALSE;
 296   3                }     
 297   2               break;
 298   2      
 299   2               case STATUS_PAUSECD:
 300   2                if(gl_key_press == TRUE)
 301   2                {
 302   3                   switch(gl_key)
C51 COMPILER V7.50   CDROM_TASK                                                            02/16/2009 09:59:55 PAGE 6   

 303   3                   {
 304   4                      case KEY_OPEN:
 305   4                               cd_command(CMD_OPEN);
 306   4                           lcd_print_string(0x40,"Open...   ");
 307   4                           u8CdStatus = STATUS_OPENCD; 
 308   4                      break;
 309   4      
 310   4                      case KEY_PLAY:
 311   4                           cd_command(CMD_RESUME);
 312   4                           lcd_print_string(0x40,"Play...   ");
 313   4                           u8CdStatus = STATUS_PLAYCD; 
 314   4                      break; 
 315   4                   } 
 316   3                }         
 317   2               break;
 318   2      
 319   2               case STATUS_OPENCD:
 320   2                if(gl_key_press == TRUE)
 321   2                {
 322   3                   if(gl_key == KEY_OPEN)
 323   3                               {
 324   4                                  cd_command(CMD_CLOSE);
 325   4                      lcd_print_string(0x40,"Close...  ");
 326   4                      u8CdStatus = STATUS_TESTUNITREADY;
 327   4                               }
 328   3                           gl_key_press = FALSE;
 329   3                }           
 330   2               break;
 331   2        }
 332   1      
 333   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1175    ----
   CONSTANT SIZE    =    105    ----
   XDATA SIZE       =     31      24
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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