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

📄 voice_task.lst

📁 基于AT89C51SND1的MP3的程序设计(包括播放mp3和录音功能)
💻 LST
📖 第 1 页 / 共 3 页
字号:
 463   2          {
 464   3            disp_clock_reset();                   /* reset clock timer */
 465   3      
 466   3            for (i = 255; i  != 0; i--)
 467   3            {
 468   4              voice_buffer[i] = 0x00;
 469   4            }
 470   3            voice_buffer[0] = 0x00;
 471   3      
 472   3            if (File_entry_root(FILE_WAV) == OK)  /* WAV file in root dir? */
 473   3            {
 474   4              do
 475   4              {
 476   5                (char *)file_name = File_get_name();    /* Get file name */
 477   5                if ((file_name[0] == 'V') &&
 478   5                    (file_name[1] == 'O') &&
 479   5                    (file_name[2] == 'I') &&
 480   5                    (file_name[3] == 'C') &&
 481   5                    (file_name[4] == 'E') &&
 482   5                    ((file_name[5] >= '0') && (file_name[5] <= '9')) &&
 483   5                    ((file_name[6] >= '0') && (file_name[6] <= '9')) &&
 484   5                    ((file_name[7] >= '0') && (file_name[7] <= '9'))  
 485   5                    )
 486   5                {
 487   6                  /* Calculate actual index */
 488   6                  i =  (Byte)(file_name[5] - '0') * 100;
C51 COMPILER V7.06   VOICE_TASK                                                            05/05/2005 12:12:04 PAGE 9   

 489   6                  i += (Byte)(file_name[6] - '0') * 10;
 490   6                  i += (Byte)(file_name[7] - '0') * 1;
 491   6                  voice_buffer[i] = 0xFF;
 492   6                }
 493   5              }
 494   4              while (File_goto_next() == OK);   /* Do it still we have not reached the last file */
 495   4            }
 496   3            else
 497   3            {
 498   4              file_name = buff;
 499   4            }
 500   3      
 501   3            i = 0;
 502   3            if (voice_buffer[i] != 0x00)
 503   3            {
 504   4              i++;
 505   4              while ((voice_buffer[i] != 0x00) && (i != 0)) i++;  /* determine a free index */
 506   4            }
 507   3      
 508   3            if (voice_buffer[i] == 0)           /* Find a free indice ? */
 509   3            {
 510   4              file_name[0] = 'V';
 511   4              file_name[1] = 'O';
 512   4              file_name[2] = 'I';
 513   4              file_name[3] = 'C';
 514   4              file_name[4] = 'E';
 515   4              file_name[5] = '0' + (i / 100);
 516   4              file_name[6] = '0' + ((i % 100) / 10);
 517   4              file_name[7] = '0' + (((i % 100) % 10));
 518   4              file_name[8] = 'W';
 519   4              file_name[9] = 'A';
 520   4              file_name[10] = 'V';
 521   4      
 522   4              if (Fcreate(file_name, ATTR_FILE) != OK)     /* Create file */
 523   4              {
 524   5                 voice_state = VOICE_ERROR;
 525   5              }
 526   4              else
 527   4              {
 528   5                print_file_name();                  /* display new file name */
 529   5                voc_cpt = 0;
 530   5                print_state_record();               /* display record icon */
 531   5                voc_rec_init();
 532   5                disp_clock_start();                 /* start clock timer */
 533   5                voice_state = VOICE_RECORD;
 534   5              }
 535   4            }
 536   3            else
 537   3            {
 538   4              voice_state = VOICE_ERROR;
 539   4            }
 540   3            break;
 541   3          }
 542   2      
 543   2      
 544   2          case VOICE_RECORD:
 545   2          {
 546   3            while ((Byte)voc_cpt != gl_pointer)
 547   3            {
 548   4              Fputc(voice_buffer[(Byte)voc_cpt]);
 549   4              if (Feod())                         /* check end of disk */
 550   4              {
C51 COMPILER V7.06   VOICE_TASK                                                            05/05/2005 12:12:04 PAGE 10  

 551   5                Voc_rec_stop();                   /* stop voice sampling */
 552   5                voice_state = VOICE_REC_STOP;
 553   5                break;                            /* exit while loop */
 554   5              }
 555   4              voc_cpt++;
 556   4            }
 557   3      
 558   3            if (gl_key_press)                     /* a key is pressed? */
 559   3            {
 560   4              switch (gl_key)
 561   4              {
 562   5                case KEY_PAUSE:
 563   5                  disp_clock_stop();              /* suspend clock timer */
 564   5                  Voc_rec_pause();
 565   5                  print_state_pause();            /* display pause icon */
 566   5                  voice_state = VOICE_REC_PAUSE;
 567   5                  break;
 568   5      
 569   5                case KEY_STOP:
 570   5                  Voc_rec_stop();                 /* stop voice sampling */
 571   5                  voice_state = VOICE_REC_STOP;
 572   5                  break;
 573   5      
 574   5                default:
 575   5                  break;
 576   5              }
 577   4              gl_key_press = FALSE;               /* ack key usage */
 578   4            }
 579   3            break;
 580   3          }
 581   2      
 582   2      
 583   2          case VOICE_REC_PAUSE:
 584   2          {
 585   3            if (gl_key_press)                     /* a key is pressed? */
 586   3            {
 587   4              switch (gl_key)
 588   4              {
 589   5                case KEY_REC:
 590   5                  disp_clock_start();             /* restart clock timer */
 591   5                  print_state_record();           /* display record icon */
 592   5                  Voc_rec_start();                /* restart sampling */
 593   5                  voice_state = VOICE_RECORD;
 594   5                  break;
 595   5      
 596   5                case KEY_STOP:
 597   5                  Voc_rec_stop();                 /* stop voice sampling */
 598   5                  voice_state = VOICE_REC_STOP;
 599   5                  break;
 600   5      
 601   5                default:
 602   5                  break;
 603   5              }
 604   4              gl_key_press = FALSE;               /* ack key usage */
 605   4            }
 606   3            break;
 607   3          }
 608   2      
 609   2      
 610   2          case VOICE_REC_STOP:
 611   2          {
 612   3            /* update wave header */
C51 COMPILER V7.06   VOICE_TASK                                                            05/05/2005 12:12:04 PAGE 11  

 613   3            Fseek(-voc_cpt);                      /* beginning of file */
 614   3            Fputc(((Byte*)&gl_wav_header)[0]);    /* 'R' */
 615   3            Fputc(((Byte*)&gl_wav_header)[1]);    /* 'I' */
 616   3            Fputc(((Byte*)&gl_wav_header)[2]);    /* 'F' */
 617   3            Fputc(((Byte*)&gl_wav_header)[3]);    /* 'F' */
 618   3            voc_cpt -= 8;
 619   3            Fputc(((Byte*)&voc_cpt)[3]);          /* wave length */
 620   3            Fputc(((Byte*)&voc_cpt)[2]);
 621   3            Fputc(((Byte*)&voc_cpt)[1]);
 622   3            Fputc(((Byte*)&voc_cpt)[0]);
 623   3      
 624   3            for (i = 8; i != WAV_HEADER_SIZE-4; i++)
 625   3            {
 626   4              Fputc(((Byte code *)&gl_wav_header)[i]);
 627   4            }
 628   3            voc_cpt -= 36;
 629   3            Fputc(((Byte*)&voc_cpt)[3]);          /* data length */
 630   3            Fputc(((Byte*)&voc_cpt)[2]);
 631   3            Fputc(((Byte*)&voc_cpt)[1]);
 632   3            Fputc(((Byte*)&voc_cpt)[0]);
 633   3            for (i = 255; i != 0; i--)
 634   3            {
 635   4              Fputc(0x80);                        /* fill first sector data */
 636   4            }
 637   3            for (i = 257 - WAV_HEADER_SIZE; i != 0; i--)
 638   3            {
 639   4              Fputc(0x80);                        /* fill first sector data */
 640   4            } 
 641   3            Fclose();
 642   3            disp_end_of_play();
 643   3            disp_clock_reset();                   /* reset clock timer */
 644   3            print_file_type();                    /* display wav icon */
 645   3            voice_state = VOICE_IDLE;
 646   3            break;
 647   3          }
 648   2      
 649   2      
 650   2          case VOICE_ERROR:
 651   2          {
 652   3            disp_clock_reset();                   /* reset clock timer */
 653   3            print_state_error();                  /* display error icon */
 654   3            disp_name_stop();
 655   3            voice_state = VOICE_IDLE;
 656   3            break;
 657   3          }
 658   2      
 659   2      
 660   2          case VOICE_DELETE:
 661   2          {
 662   3            i = Fdelete();
 663   3            if ((i == DEL_RET_OK) || (i == DEL_RET_ERROR_DIR))
 664   3            { /* at least 1 *.wav file in root */
 665   4              Frefresh(FILE_WAV);
 666   4              print_file_name();                  /* display file name */
 667   4              voice_state = VOICE_IDLE;
 668   4            }
 669   3            else
 670   3            { /* no  more *.wav file */
 671   4              print_state_blank();                /* select blank icon */
 672   4              print_screen(VOICE_SCREEN);         /* display voice screen */
 673   4              print_voice_vol(Voc_get_volume());  /* display volume level */
 674   4              voice_state = VOICE_NO_MSG;
C51 COMPILER V7.06   VOICE_TASK                                                            05/05/2005 12:12:04 PAGE 12  

 675   4            }
 676   3            break;
 677   3          }
 678   2        }
 679   1      }
 680          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1757    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =    256      15
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       1
   IDATA SIZE       =      1    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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