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

📄 song_task.lst

📁 这是atmel公司的89C51SND1C的mp3源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 285   5                {
 286   6                  song_state = SONG_STOP;
 287   6                }
 288   5              }
 289   4              else
 290   4              {
 291   5                Fseek(0);                         /* return to beginning of file */
 292   5                song_state = SONG_PLL;
 293   5              }
 294   4            }
 295   3            else
 296   3            {
 297   4              song_state = SONG_ERROR;
 298   4            }
 299   3            break;
 300   3          }
 301   2      
 302   2      
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 6   

 303   2          case SONG_PLL:
 304   2          {
 305   3            if (Pll_get_lock())                   /* pll locked? */
 306   3            {
 307   4              song_start();                       /* start playing song */
 308   4              disp_clock_start();                 /* start clock timer */
 309   4              print_state_play();                 /* display play icon */
 310   4              song_state = SONG_PLAY;
 311   4            }
 312   3            break;
 313   3          }
 314   2      
 315   2      
 316   2          case SONG_PLAY:                         /* one file openned */
 317   2          {
 318   3            if ((MP3STA1 & MSK_MPFREQ) == MSK_MPFREQ)
 319   3            {
 320   4      //      RXD = 0;
 321   4              do
 322   4              {
 323   5                Mp3_load(Fgetc());                /* send data while requested */
 324   5                if (gl_mem_failure)
 325   5                { /* hardware failure */
 326   6                  song_state = SONG_ERROR;        /* in case of read error */
 327   6                  break;
 328   6                }
 329   5              }
 330   4              while ((MP3STA1 & MSK_MPFREQ) == MSK_MPFREQ);  /* frame request ? */
 331   4      //      RXD = 1;
 332   4      
 333   4              if (Feof() == TRUE)                 /* end of file? */
 334   4              {
 335   5                song_stop();                      /* stop playing song */
 336   5                Fclose();
 337   5                if (file_seek_next(FILE_MP3, song_loop))   /* select next song */
 338   5                {
 339   6                  song_state = SONG_NEW;
 340   6                  gl_key_press = FALSE;           /* no key usage */
 341   6                }
 342   5                else
 343   5                {
 344   6                  song_state = SONG_STOP;
 345   6                }
 346   5              }
 347   4              gl_wa_tick = 0xFC;                  /* ## workaround tick counter */
 348   4            }
 349   3      
 350   3            if (gl_wa_tick == 0)                  /* ## time-out occured */
 351   3            {
 352   4              mp3_restart();                      /* ## relaunch playing */
 353   4            }
 354   3      
 355   3            if ((MP3STA & (MSK_ERRLAY | MSK_ERRSYN)) != 0)
 356   3            {
 357   4              mp3_restart();
 358   4              break;
 359   4            }
 360   3      
 361   3            if (gl_key_press)                     /* a key is pressed? */
 362   3            {
 363   4              switch (gl_key)
 364   4              {
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 7   

 365   5                case KEY_PAUSE:
 366   5                  Aud_song_pause();               /* suspend sample request */
 367   5                  disp_clock_stop();              /* suspend clock timer */
 368   5                  print_state_pause();            /* display pause icon */
 369   5                  song_state = SONG_PAUSE;
 370   5                  break;
 371   5      
 372   5                case KEY_NEXT:
 373   5                  song_stop();                    /* stop playing song */
 374   5                  disp_clock_stop();              /* suspend clock timer */
 375   5                  Fclose();
 376   5                  file_seek_next(FILE_MP3, TRUE); /* select next song & loop */
 377   5                  song_state = SONG_NEW;
 378   5                  break;
 379   5      
 380   5                case KEY_PREV:
 381   5                  song_stop();                    /* stop playing song */
 382   5                  disp_clock_stop();              /* suspend clock timer */
 383   5                  Fclose();
 384   5                  file_seek_prev(FILE_MP3);       /* select previous song */
 385   5                  song_state = SONG_NEW;
 386   5                  break;
 387   5      
 388   5                case KEY_INC:
 389   5                  song_snd_inc();                 /* increment selected control */
 390   5                  print_sound_level();            /* display new level */
 391   5                  break;
 392   5      
 393   5                case KEY_DEC:
 394   5                  song_snd_dec();                 /* decrement selected control */
 395   5                  print_sound_level();            /* display new level */
 396   5                  break;
 397   5      
 398   5                case KEY_SOUND:
 399   5                  song_snd_select();              /* select next sound control */
 400   5                  print_sound();                  /* display selected sound icon */
 401   5                  print_sound_level();            /* display new level */
 402   5                  break;
 403   5      
 404   5                case KEY_REPEAT:
 405   5                  song_loop = ~song_loop;         /* display repeat or not */
 406   5                  print_repeat(song_loop);
 407   5                  break;
 408   5      
 409   5                case KEY_STOP:
 410   5                  song_stop();                    /* stop playing song */
 411   5                  Fclose();
 412   5                  song_state = SONG_STOP;
 413   5                  break;
 414   5      
 415   5                case KEY_LOCK:
 416   5                  print_kbd_lock();               /* print keyboard status */
 417   5                  break;
 418   5      
 419   5                default:
 420   5                  break;
 421   5              }
 422   4              gl_key_press = FALSE;               /* ack key usage */
 423   4            }
 424   3            break;
 425   3          }
 426   2      
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 8   

 427   2      
 428   2          case SONG_PAUSE:                        /* one file openned */
 429   2          {
 430   3            if (gl_key_press)                     /* a key is pressed? */
 431   3            {
 432   4              switch (gl_key)
 433   4              {
 434   5                case KEY_PLAY:
 435   5                  disp_clock_start();             /* restart clock timer */
 436   5                  Aud_song_play();                /* restart sample request */
 437   5                  print_state_play();             /* display play icon */
 438   5                  song_state = SONG_PLAY;
 439   5                  break;
 440   5      
 441   5                case KEY_NEXT:
 442   5                  song_stop();                    /* stop playing song */
 443   5                  Fclose();
 444   5                  file_seek_next(FILE_MP3, TRUE); /* select next song */
 445   5                  print_file_name();              /* display song name */
 446   5                  song_state = SONG_IDLE;
 447   5                  break;
 448   5      
 449   5                case KEY_PREV:
 450   5                  song_stop();                    /* stop playing song */
 451   5                  Fclose();
 452   5                  file_seek_prev(FILE_MP3);       /* select previous song */
 453   5                  print_file_name();              /* display song name */
 454   5                  song_state = SONG_IDLE;
 455   5                  break;
 456   5      
 457   5                case KEY_INC:
 458   5                  song_snd_inc();                 /* increment selected control */
 459   5                  print_sound_level();            /* display new level */
 460   5                  break;
 461   5      
 462   5                case KEY_DEC:
 463   5                  song_snd_dec();                 /* decrement selected control */
 464   5                  print_sound_level();            /* display new level */
 465   5                  break;
 466   5      
 467   5                case KEY_SOUND:
 468   5                  song_snd_select();              /* select next sound control */
 469   5                  print_sound();                  /* display selected sound icon */
 470   5                  print_sound_level();            /* display new level */
 471   5                  break;
 472   5      
 473   5                case KEY_REPEAT:
 474   5                  song_loop = ~song_loop;         /* display repeat or not */
 475   5                  print_repeat(song_loop);
 476   5                  break;
 477   5      
 478   5                case KEY_STOP:
 479   5                  song_stop();                    /* stop playing song */
 480   5                  Fclose();
 481   5                  song_state = SONG_STOP;
 482   5                  break;
 483   5      
 484   5                case KEY_LOCK:
 485   5                  print_kbd_lock();               /* print keyboard status */
 486   5                  break;
 487   5      
 488   5                default:
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 9   

 489   5                  break;
 490   5              }
 491   4              gl_key_press = FALSE;               /* ack key usage */
 492   4            }
 493   3            break;
 494   3          }
 495   2      
 496   2      
 497   2          case SONG_NEW:
 498   2          {
 499   3            song_state = SONG_INIT;               /* new song */
 500   3            print_file_name();                    /* display file name */
 501   3            break;
 502   3          }
 503   2      
 504   2      
 505   2          case SONG_STOP:
 506   2          {
 507   3            disp_clock_reset();                   /* reset clock timer */
 508   3            print_file_name();                    /* display file name */
 509   3            song_state = SONG_IDLE;
 510   3            break;
 511   3          }
 512   2      
 513   2      
 514   2          case SONG_NO_SONG:
 515   2          {
 516   3            if (gl_key_press)                     /* a key is pressed? */
 517   3            {
 518   4              switch (gl_key)
 519   4              {
 520   5                case KEY_MEM:
 521   5                  mem_select_next();              /* select next memory */
 522   5                  song_state = SONG_START;
 523   5                  break;
 524   5      
 525   5                case KEY_MODE:
 526   5                  mode_set_init();                /* exit from song task */
 527   5                  song_state = SONG_START;
 528   5                  break;
 529   5      
 530   5                case KEY_LOCK:
 531   5                  print_kbd_lock();               /* print keyboard status  */
 532   5                  break;
 533   5              }
 534   4              gl_key_press = FALSE;               /* ack key usage */
 535   4            }
 536   3            else
 537   3            { /* check card presence */
 538   4              if (mem_check_card() == KO)
 539   4              {
 540   5                mem_select_next();
 541   5                song_state = SONG_START;          /* card has been unplugged */
 542   5              }
 543   4            }
 544   3            break;
 545   3          }
 546   2      
 547   2      
 548   2          case SONG_ERROR:
 549   2          {
 550   3            song_stop();                          /* stop playing song */
C51 COMPILER V6.20c  SONG_TASK                                                             07/10/2002 15:17:41 PAGE 10  

 551   3            Fclose();                             /* close opened file */
 552   3            disp_clock_reset();                   /* reset clock timer */
 553   3            print_state_error();                  /* display error icon */
 554   3            disp_name_stop();
 555   3            song_state = SONG_IDLE;
 556   3            break;
 557   3          }
 558   2        }
 559   1      }
 560          
 561          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    853    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   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 + -