📄 song_task.lst
字号:
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 + -