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

📄 song_task.lst

📁 基于AT89C51SND1的MP3的程序设计(包括播放mp3和录音功能)
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   SONG_TASK                                                             05/05/2005 12:12:04 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SONG_TASK
OBJECT MODULE PLACED IN song_task.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE modules\song\song_task.c OPTIMIZE(7,SPEED) BROWSE INCDIR(.\modules\system;.
                    -\;.\;.\lib_refd) DEFINE(KEIL) DEBUG OBJECTEXTEND PRINT(.\song_task.lst) OBJECT(song_task.obj)

stmt level    source

   1          /*C**************************************************************************
   2          * NAME:         song_task.c
   3          *----------------------------------------------------------------------------
   4          * Copyright (c) 2003 Atmel.
   5          *----------------------------------------------------------------------------
   6          * RELEASE:      snd1c-refd-nf-4_0_3      
   7          * REVISION:     1.16     
   8          *----------------------------------------------------------------------------
   9          * PURPOSE:          
  10          * This file contains the song task and attached routines
  11          *
  12          * CONFIGURATION
  13          * Three #define must be set in config.h:
  14          *   - PLAYER_PLAY_MODE
  15          *       PLAY_DIR      play selected dir
  16          *       PLAY_DISK     play whole disk including sub-directory
  17          *   - PLAYER_PLAY_START
  18          *       START_PLAY    start playing after power-up
  19          *       START_STOP    do not play after power-up
  20          *   - PLAYER_PLAY_LOOP
  21          *       PLAY_LOOP     loop after last file of dir or disk has been played
  22          *       PLAY_NO_LOOP  no loop after last file of dir or disk has been played
  23          * NOTES:
  24          * Global Variables:
  25          *   - gl_key_press:   bit in bdata space
  26          *   - gl_key:         byte in idata space
  27          *   - gl_mem_failure: bit in bdata space
  28          *****************************************************************************/
  29          
  30          /*_____ I N C L U D E S ____________________________________________________*/
  31          
  32          #include "config.h"                         /* system configuration */
  33          #include "board.h"                          /* board definition */
  34          #include "modules\display\disp.h"           /* display definition */
  35          #include "modules\file\file.h"              /* file definition */
  36          #include "modules\mode\mode_task.h"         /* mode task definition */
  37          #include "modules\display\disp_task.h"      /* display definition */
  38          #include "modules\mem\mem_task.h"           /* memory task definition */
  39          #include "lib_mcu\clock\clock.h"            /* clock definition */
  40          #include "lib_mcu\aud\aud_drv.h"            /* audio driver definition */
  41          #include "lib_mcu\mp3\mp3_drv.h"            /* mp3 driver definition */
  42          #include "song_drv.h"                       /* song driver definition */
  43          #include "song_task.h"                      /* song task definition */
  44          
  45          
  46          /*_____ M A C R O S ________________________________________________________*/
  47          
  48          
  49          /*_____ D E F I N I T I O N ________________________________________________*/
  50          
  51          extern  bdata   bit     gl_key_press;       /* TRUE when a key is decoded */
  52          extern  idata   Byte    gl_key;             /* value of the key pressed */
  53          extern  bdata   bit     gl_mem_failure;     /* memory hardware failure */
  54          
C51 COMPILER V7.06   SONG_TASK                                                             05/05/2005 12:12:04 PAGE 2   

  55          #ifndef REFD                                /* add compatibility with refd/demo */
              #error
              #define disp_end_of_play()
              #endif
  59          
  60          Byte    song_state;                         /* task state */
  61          static  bit     song_loop;                  /* auto replay */
  62          
  63          
  64          /*_____ D E C L A R A T I O N ______________________________________________*/
  65          
  66          
  67          /*F**************************************************************************
  68          * NAME: song_task_init
  69          *----------------------------------------------------------------------------
  70          * PARAMS:
  71          *
  72          * return:
  73          *----------------------------------------------------------------------------
  74          * PURPOSE: 
  75          *   Song playing task initialization
  76          *----------------------------------------------------------------------------
  77          * EXAMPLE:
  78          *----------------------------------------------------------------------------
  79          * NOTE:
  80          *----------------------------------------------------------------------------
  81          * REQUIREMENTS:
  82          *****************************************************************************/
  83          void song_task_init (void)
  84          {
  85   1        song_loop = PLAYER_PLAY_LOOP;             /* default loop playing */
  86   1        song_snd_init();                          /* init sound control */
  87   1        song_state = SONG_START;
  88   1      }
  89          
  90          
  91          /*F**************************************************************************
  92          * NAME: song_task
  93          *----------------------------------------------------------------------------
  94          * PARAMS:
  95          *
  96          * return:
  97          *----------------------------------------------------------------------------
  98          * PURPOSE: 
  99          *   Song playing task
 100          *----------------------------------------------------------------------------
 101          * EXAMPLE:
 102          *----------------------------------------------------------------------------
 103          * NOTE:
 104          *----------------------------------------------------------------------------
 105          * REQUIREMENTS:
 106          *****************************************************************************/
 107          void song_task (void)
 108          {
 109   1      Byte  cpt_data;
 110   1      bit     loop;
 111   1      
 112   1        if (Mp3_frame_request())
 113   1        {
 114   2          cpt_data = 0;
 115   2          do
 116   2          {
C51 COMPILER V7.06   SONG_TASK                                                             05/05/2005 12:12:04 PAGE 3   

 117   3            Mp3_load(Fgetc());                    /* send data while requested */
 118   3            cpt_data++;
 119   3            /* workaround for 320Kbs frame support */
 120   3            if ((cpt_data & 0x40) == 0x40)
 121   3            {
 122   4              Mp3_set_full();
 123   4              Mp3_reset_full();                   /* ack 64 Bytes write */
 124   4              break;
 125   4            }
 126   3            if (gl_mem_failure)
 127   3            { /* hardware failure */
 128   4              song_state = SONG_ERROR;            /* in case of read error */
 129   4              break;
 130   4            }
 131   3          }
 132   2          while (Mp3_frame_request());            /* until frame request */
 133   2      
 134   2          while (Mp3_frame_request())             /* frame request ? */
 135   2          {
 136   3            Mp3_load(Fgetc());                    /* send data while requested */
 137   3            if (gl_mem_failure)
 138   3            { /* hardware failure */
 139   4              song_state = SONG_ERROR;            /* in case of read error */
 140   4              break;
 141   4            }
 142   3          }
 143   2        }
 144   1      
 145   1        switch (song_state)
 146   1        {
 147   2          case SONG_START:
 148   2          {
 149   3            print_mode_song();                    /* select song icon */
 150   3            print_state_blank();                  /* select blank icon */
 151   3            print_screen(SONG_SCREEN);            /* display song screen */
 152   3            print_sound_level();                  /* display volume level */
 153   3            song_state = SONG_INSTALL;
 154   3            break;
 155   3          }
 156   2      
 157   2      
 158   2          case SONG_INSTALL:
 159   2          {
 160   3            if (mem_status() != MEM_BUSY)         /* wait end of memory install */
 161   3            {
 162   4              if (mem_status() == MEM_READY)
 163   4              { /* disk formated */
 164   5                /* this may be changed to retrieve last saved position */
 165   5                if (File_entry_root(FILE_MP3 | FILE_DIR) == OK) /* goto root directory */
 166   5                {
 167   6                  print_file_name();              /* display file name */
 168   6                  #if PLAYER_PLAY_START == START_STOP
 169   6                    song_state = SONG_IDLE;
 170   6                  #else
                            if (File_type() == FILE_DIR)
                            { /* file_type is dir */
                            #if PLAYER_PLAY_MODE == PLAY_DISK
                              song_state = SONG_NEW;      /* enter dir and play */
                            #else
                              song_state = SONG_NEXT;     /* stay in root dir */
                            #endif
                            }
C51 COMPILER V7.06   SONG_TASK                                                             05/05/2005 12:12:04 PAGE 4   

                            else
                            { /* file_type is MP3 */
                              song_state = SONG_INIT;
                            }
                          #endif
 184   6                }
 185   5                else
 186   5                { /* root is empty of song & diretory */
 187   6                  song_state = SONG_NO_SONG;
 188   6                }
 189   5              }
 190   4              else
 191   4              { /* disk not formated */
 192   5                print_state_error();              /* error icon when not formated */
 193   5                if (gl_key_press)                 /* a key is pressed? */
 194   5                {
 195   6                  switch (gl_key)
 196   6                  {
 197   7                    case KEY_MEM:
 198   7                      mem_select_next();          /* select next memory */
 199   7                      song_state = SONG_START;
 200   7                      break;
 201   7      
 202   7                    case KEY_MODE:
 203   7                      mode_set_init();            /* exit from song task */
 204   7                      song_state = SONG_START;
 205   7                      break;
 206   7                  }
 207   6                  gl_key_press = FALSE;           /* ack key usage */
 208   6                }
 209   5                else
 210   5                { /* check card presence */
 211   6                  if (mem_check_card() == KO)
 212   6                  {
 213   7                    mem_select_next();
 214   7                    song_state = SONG_START;      /* card has been unplugged */
 215   7                  }
 216   6                }
 217   5              }
 218   4            }
 219   3            else
 220   3            {
 221   4              if (gl_key_press)                   /* stop key is pressed? */
 222   4              {
 223   5                if (gl_key == KEY_MODE)
 224   5                {
 225   6                  mode_set_init();                /* exit from song task */
 226   6                  song_state = SONG_START;
 227   6                }

⌨️ 快捷键说明

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