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

📄 song_task.lst

📁 这是atmel公司的89C51SND1C的mp3源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE SONG_TASK
OBJECT MODULE PLACED IN ..\obj\song_task.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\src\song\song_task.c BROWSE INCDIR(..\src\system;..\..\..\lib) DEFINE(KE
                    -IL) DEBUG OBJECTEXTEND PRINT(.\song_task.lst) OBJECT(..\obj\song_task.obj) 

stmt level    source

   1          /*C**************************************************************************
   2          * $RCSfile: song_task.c,v $
   3          *----------------------------------------------------------------------------
   4          * Copyright (c) 2002 Atmel.
   5          *----------------------------------------------------------------------------
   6          * RELEASE:      $Name: DEMO_FAT_1_2_5 $      
   7          * REVISION:     $Revision: 1.11 $     
   8          * FILE_CVSID:   $Id: song_task.c,v 1.11 2002/06/06 15:28:30 ffosse Exp $       
   9          *----------------------------------------------------------------------------
  10          * PURPOSE:          
  11          * This file contains the song task and attached routines
  12          *
  13          * NOTES:
  14          * Global Variables:
  15          *   - gl_key_press: bit in bdata space
  16          *   - gl_key:       byte in idata space
  17          *****************************************************************************/
  18          
  19          /*_____ I N C L U D E S ____________________________________________________*/
  20          
  21          #include "config.h"                         /* system configuration */
  22          #include "..\..\..\..\lib_demob\board.h"    /* board definition */
  23          #include "..\display\disp.h"                /* display definition */
  24          #include "..\file\file.h"                   /* file definition */
  25          #include "..\mode\mode_task.h"              /* mode task definition */
  26          #include "..\display\disp_task.h"           /* display definition */
  27          #include "..\clock\clock.h"                 /* clock definition */
  28          #include "..\mem\mem_task.h"                /* memory task definition */
  29          #include "..\..\..\..\lib\aud\aud_drv.h"    /* audio driver definition */
  30          #include "..\..\..\..\lib\mp3\mp3_drv.h"    /* mp3 driver definition */
  31          #include "song_drv.h"                       /* song driver definition */
  32          #include "song_task.h"                      /* song task definition */
  33          
  34          
  35          
  36          /*_____ M A C R O S ________________________________________________________*/
  37          
  38          
  39          /*_____ D E F I N I T I O N ________________________________________________*/
  40          
  41          extern  bdata   bit     gl_key_press;       /* TRUE when a key is decoded */
  42          extern  idata   Byte    gl_key;             /* value of the key pressed */
  43          extern  bdata   bit     gl_mem_failure;     /* memory hardware failure */
  44          extern  data    Byte    gl_wa_tick;         /* workaround tick counter */
  45          
  46          static  Byte    song_state;                 /* task state */
  47          static  bit     song_loop;                  /* auto replay */
  48          
  49          
  50          /*_____ D E C L A R A T I O N ______________________________________________*/
  51          
  52          
  53          /*F**************************************************************************
  54          * NAME: song_task_init
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 2   

  55          *----------------------------------------------------------------------------
  56          * PARAMS:
  57          *
  58          * return:
  59          *----------------------------------------------------------------------------
  60          * PURPOSE: 
  61          *   Song playing task initialization
  62          *----------------------------------------------------------------------------
  63          * EXAMPLE:
  64          *----------------------------------------------------------------------------
  65          * NOTE:
  66          *----------------------------------------------------------------------------
  67          * REQUIREMENTS:
  68          *****************************************************************************/
  69          void song_task_init (void)
  70          {
  71   1        song_loop = FALSE;                        /* no loop playing */
  72   1        song_snd_init();                          /* init sound control */
  73   1        song_state = SONG_START;
  74   1      }
  75          
  76          
  77          /*F**************************************************************************
  78          * NAME: song_task
  79          *----------------------------------------------------------------------------
  80          * PARAMS:
  81          *
  82          * return:
  83          *----------------------------------------------------------------------------
  84          * PURPOSE: 
  85          *   Song playing task
  86          *----------------------------------------------------------------------------
  87          * EXAMPLE:
  88          *----------------------------------------------------------------------------
  89          * NOTE:
  90          *   STATES:
  91          *   SONG_START      start song task
  92          *   SONG_INSTALL    installation state
  93          *   SONG_IDLE       idle state of this task
  94          *   SONG_INIT       initialization of MP3 & others
  95          *   SONG_PLAY       song under playing
  96          *   SONG_PLL        wait pll locked
  97          *   SONG_PAUSE      song playing halted
  98          *   SONG_NEW        previous or next song handler
  99          *   SONG_STOP       stop playing
 100          *   SONG_NO_SONG    no song in memory
 101          *   SONG_ERROR      MP3 macrocell returned an error
 102          *----------------------------------------------------------------------------
 103          * REQUIREMENTS:
 104          *****************************************************************************/
 105          void song_task (void)
 106          {
 107   1        switch (song_state)
 108   1        {
 109   2          case SONG_START:
 110   2          {
 111   3            print_mode_song();                    /* select song icon */
 112   3            print_state_blank();                  /* select blank icon */
 113   3            print_screen(SONG_SCREEN);            /* display song screen */
 114   3            print_sound_level();                  /* display volume level */
 115   3            print_repeat(song_loop);
 116   3            song_state = SONG_INSTALL;
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 3   

 117   3            break;
 118   3          }
 119   2      
 120   2      
 121   2          case SONG_INSTALL:
 122   2          {
 123   3            if (mem_status() != MEM_BUSY)         /* wait end of memory install */
 124   3            {
 125   4              if (mem_status() == MEM_READY)
 126   4              { /* disk formated */
 127   5                /* this may be changed to retrieve last saved position */
 128   5                if (File_entry_root(FILE_MP3 | FILE_DIR) == OK) /* goto root directory */
 129   5                {
 130   6                  print_file_name();              /* display file name */
 131   6                  song_state = SONG_IDLE;
 132   6                }
 133   5                else
 134   5                { /* root is empty of song & diretory */
 135   6                  song_state = SONG_NO_SONG;
 136   6                }
 137   5              }
 138   4              else
 139   4              { /* disk not formated */
 140   5                print_state_error();              /* error icon when not formated */
 141   5                if (gl_key_press)                 /* a key is pressed? */
 142   5                {
 143   6                  switch (gl_key)
 144   6                  {
 145   7                    case KEY_MEM:
 146   7                      mem_select_next();          /* select next memory */
 147   7                      song_state = SONG_START;
 148   7                      break;
 149   7        
 150   7                    case KEY_MODE:
 151   7                      mode_set_init();            /* exit from song task */
 152   7                      song_state = SONG_START;
 153   7                      break;
 154   7        
 155   7                    case KEY_LOCK:
 156   7                      print_kbd_lock();           /* print keyboard status */
 157   7                      break;
 158   7                  }
 159   6                  gl_key_press = FALSE;           /* ack key usage */
 160   6                }
 161   5                else
 162   5                { /* check card presence */
 163   6                  if (mem_check_card() == KO)
 164   6                  {
 165   7                    mem_select_next();
 166   7                    song_state = SONG_START;      /* card has been unplugged */
 167   7                  }
 168   6                }
 169   5              }
 170   4            }
 171   3            else
 172   3            {
 173   4              if (gl_key_press)                   /* stop key is pressed? */
 174   4              {
 175   5                if (gl_key == KEY_MODE)
 176   5                {
 177   6                  mode_set_init();                /* exit from song task */
 178   6                  song_state = SONG_START;
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 4   

 179   6                }
 180   5                gl_key_press = FALSE;             /* ack key usage */
 181   5              }
 182   4            }
 183   3            break;
 184   3          }
 185   2      
 186   2      
 187   2          case SONG_IDLE:                         /* no file openned */
 188   2          {
 189   3            if (gl_key_press)                     /* a key is pressed? */
 190   3            {
 191   4              switch (gl_key)
 192   4              {
 193   5                case KEY_PLAY:
 194   5                  if (File_type() == FILE_DIR)
 195   5                  {
 196   6                    file_entry_dir(FILE_MP3 | FILE_DIR);  /* goto sub-directory */ 
 197   6                    print_file_name();            /* display directory name */
 198   6                  }
 199   5                  else
 200   5                  { /* file_type is MP3 */
 201   6                    song_state = SONG_INIT;
 202   6                  }
 203   5                  break;
 204   5      
 205   5                case KEY_NEXT:
 206   5                  file_seek_next(FILE_MP3 | FILE_DIR, TRUE);  /* select next song with loop */
 207   5                  print_file_name();              /* display file name */
 208   5                  break;
 209   5      
 210   5                case KEY_PREV:
 211   5                  file_seek_prev(FILE_MP3 | FILE_DIR);  /* select previous song */
 212   5                  print_file_name();              /* display file name */
 213   5                  break;
 214   5      
 215   5                case KEY_INC:
 216   5                  song_snd_inc();                 /* increment selected control */
 217   5                  print_sound_level();            /* display new level */
 218   5                  break;
 219   5      
 220   5                case KEY_DEC:
 221   5                  song_snd_dec();                 /* decrement selected control */
 222   5                  print_sound_level();            /* display new level */
 223   5                  break;
 224   5      
 225   5                case KEY_SOUND:
 226   5                  song_snd_select();              /* select next sound control */
 227   5                  print_sound();                  /* display selected sound icon */
 228   5                  print_sound_level();            /* display new level */
 229   5                  break;
 230   5      
 231   5                case KEY_PARENT:
 232   5                  File_exit_dir(FILE_MP3 | FILE_DIR); /* goto parent directory */ 
 233   5                  print_file_name();              /* display first file name */
 234   5                  break;
 235   5      
 236   5                case KEY_MODE:
 237   5                  mode_set_init();                /* exit from song task */
 238   5                  disp_name_stop();
 239   5                  song_state = SONG_START;
 240   5                  break;
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 5   

 241   5      
 242   5                case KEY_MEM:
 243   5                  mem_select_next();              /* select next memory */
 244   5                  disp_name_stop();
 245   5                  song_state = SONG_START;
 246   5                  break;
 247   5      
 248   5                case KEY_LOCK:
 249   5                  print_kbd_lock();               /* print keyboard status */
 250   5                  break;
 251   5      
 252   5                default:
 253   5                  break;
 254   5              }
 255   4              gl_key_press = FALSE;               /* ack key usage */
 256   4            }
 257   3            else
 258   3            { /* check card presence */
 259   4              if (mem_check_card() == KO)
 260   4              {
 261   5                disp_name_stop();
 262   5                mem_select_next();
 263   5                song_state = SONG_START;          /* card has been unplugged */
 264   5              }
 265   4            }
 266   3            break;
 267   3          }
 268   2      
 269   2      
 270   2          case SONG_INIT:
 271   2          {
 272   3            disp_clock_reset();                   /* reset clock timer */
 273   3            if (Fopen(READ) == OK)
 274   3            {
 275   4              if (song_init() != SONG_NO_ERR)     /* init song playing */
 276   4              {
 277   5                song_stop();                      /* stop playing song */
 278   5                Fclose();
 279   5                if (file_seek_next(FILE_MP3, song_loop))   /* select next song */
 280   5                {
 281   6                  song_state = SONG_NEW;
 282   6                  gl_key_press = FALSE;           /* no key usage */
 283   6                }
 284   5                else

⌨️ 快捷键说明

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