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

📄 新建 文本文档.txt

📁 mp3播放器
💻 TXT
📖 第 1 页 / 共 2 页
字号:
     }

     i = total_size;
    }


   if (Sector_Buf[i] != 0xFF)  //if not 0xFF,there is not the Frame head, but extend label
    i += 10;     //then add 10 Bytes

                                                                   
   if ((Sector_Buf[i] == 0xFF) && (Sector_Buf[i + 1] & 0xF0 == 0xF0))//get MP3 information from FF FX XX XX 4bytes,
   {
    MP3_Framehead[0] = Sector_Buf[i];
    MP3_Framehead[1] = Sector_Buf[i + 1];
    MP3_Framehead[2] = Sector_Buf[i + 2];
    MP3_Framehead[3] = Sector_Buf[i + 3];
   }

   if (MP3_Framehead[1] & 0x08)
   {
    switch ((MP3_Framehead[2] & 0x0C) >> 2)
    {
     case 0x00 : MP3FsInit(24, 126, 3, 5); break;          //Fs=44.1kHz
     case 0x01 : MP3FsInit(124, 575, 3, 4); break;         //Fs=48kHz
     case 0x02 : MP3FsInit(124, 511, 3, 9); AUDCON0 = 0x76; break;//Fs=32kHz
     default : break;
    }
   }
   else
   {
    switch ((MP3_Framehead[2] & 0x0C) >> 2)
    {
     case 0x00 : MP3FsInit(24, 126, 3, 11); break;         //Fs=22.05kHz
     case 0x01 : MP3FsInit(124, 575, 3, 9); break;         //Fs=24kHz
     case 0x02 : MP3FsInit(124, 511, 3, 19); AUDCON0 = 0x76; break;  //Fs=16kHz
     default : break;
    }
   }
       
   DataRead = 0;
#endif
   return 1;
}

extern bool CheckVS1003B_DRQ(void);
void VS1003B_WriteDAT(unsigned char dat);

//演唱MP3
//演唱完当前歌曲返回
//遇按键选曲时返回。
uint uiVolumeCount;  //当前音量值
void VS1003B_WriteCMD(unsigned char addr, unsigned int dat);

void KbProcess(ucKeyValue)  //按键处理
{
static uchar ucFrequenceID = 0;
 uchar idata ucDispBuff[5];

 switch(ucKeyValue)
 {
  case c_Key_Up:
   NowPlaying++;   //指向下一曲。
   MP3InitFlag = 1;
   ChangeSong = 1;
   break;
  
  case c_Key_Down:
   NowPlaying--;   //指向下一曲。
   MP3InitFlag = 1;
   ChangeSong = 1;
   break;
  
  case c_Key_Left:   //Volume --
      uiVolumeCount=uiVolumeCount+((uint16)(1<<8)+1);
      if(uiVolumeCount>=0xFEFE)
    {

    }
         else
    {
     VS1003B_WriteCMD(0x0b,uiVolumeCount);
    }
   break;
  
  case c_Key_Right:   //Volume ++
       uiVolumeCount=uiVolumeCount-((uint16)(1<<8)+1);
      if(uiVolumeCount > 0x0101)
    {
     VS1003B_WriteCMD(0x0b,uiVolumeCount);
    }
    else
    {
     uiVolumeCount = 0x0101;
    }
   break;
  case c_Key_Ok:
   ComShowString(c_COM1,"start Bass Enchane");
   LCD_ShowString(4,0,"Bass Enchane");
   sprintf(ucDispBuff,"Bass Value:%2x",(uint)ucFrequenceID);
   LCD_ShowString(5,0,ucDispBuff);
   ComShowString(c_COM1,"Write Value To Chip");
   VS1003B_SetBassEnhance(0x0f,ucFrequenceID);
   ucFrequenceID++;
   if(ucFrequenceID >15)
   {
    ucFrequenceID = 0;
   }
//   VS1003B_SetVirtualSurroundOn();
   break;
  case c_Key_Cancel:
  
   VS1003B_SetVirtualSurroundOff();
   break;

 }

}

 
sbit LED3Pin = P0^4;

void PlayMP3(unsigned char *SongName)
{
 int i =0,m =0;
 static uint16 pointer=0;
 uchar p;
 uchar ucFileExtNameString[4];  
 uchar xdata ucDispBuff[20];
 uchar j;//sjd

  memset(ucFileExtNameString,0x0,4);
  memcpy(ucFileExtNameString,SongName+8,3);
  ComShowString(c_COM1,"Current Play File ExtName is:");
  ComShowString(c_COM1,ucFileExtNameString);
    
  //sprintf(ucDispBuff,"Music Mode:%s",ucFileExtNameString);//sjd
  ucDispBuff[0]='N';ucDispBuff[1]='a';ucDispBuff[2]='m';ucDispBuff[3]='e';ucDispBuff[4]=':';
  for(j=0;j<11;j++)
  {
   ucDispBuff[5+j]=SongName[j];
  }
  ucDispBuff[5+j]=0;
//  LCD_ShowString(3,0,"Mode:");
  LCD_ShowString(3,0,ucDispBuff);
    
  while (1)
  {  
//   ComShowString(c_COM1,"Start Read Mp3 File Sector");
    RDCOUNT = ReadSector(SongName, Sector_Buf);
//   ComShowString(c_COM1,"Read Data Length is:");
//   ComSendText(c_COM1,&RDCOUNT,2);
   LED3Pin = ~LED3Pin;  //指示灯闪烁
//   ComSendText(c_COM1,Sector_Buf,512);
   pointer=0;
   while(1)
   {
    if(CheckVS1003B_DRQ())
       {
        for(p=0;p<32;p++)
        {
        VS1003B_WriteDAT(Sector_Buf[pointer]);
        pointer++;
        }
     if(pointer>=511) break;
       }
   }
//-------------------------------------------------------
//   for (i=0; i<RDCOUNT; i++)
//   {
//    while (!(MP3STA1 & MPBREQ))
//     while (!PlayState);  //暂停播放控制手柄
//
//    MP3DAT = Sector_Buf[i];
//   }
//--------------------------------插入按键处理-----------------------
   if(KbHit())
   {
    if(KbHit())  //双保险,2级防抖
    {
     uchar ucKeyValue;
     
     ucKeyValue = KbGet();
     KbProcess(ucKeyValue);  //按键处理
    }
    while(KbHit());  //等待按键释放
   }
//--------------------------------按键处理结束---------------------------------
   if (ChangeSong)
   {
    DataRead = 0;
    ChangeSong = 0;
    //判定当前播放的歌曲是否为Midi
    if(strcmp(ucFileExtNameString,"MID") == 0)
    {
     ComShowString(c_COM1,"Midi File End Process");
     VS1003B_Fill2048Zero();
    }
    m =1;
   }

   if (RDCOUNT < 512)
   {
//读取到最后一包数据的处理
    //判定当前播放的歌曲是否为Midi
    if(strcmp(ucFileExtNameString,"MID") == 0)
    {
     ComShowString(c_COM1,"Midi File End Process");
     VS1003B_Fill2048Zero();
    }

    NowPlaying++;   //指向下一曲。
    MP3InitFlag = 1;
    m =1;
   }


   if(m)
     { 
//程序返回上一层重新初始化引导
//       while(MP3STA1 & MPFREQ)
//         MP3DAT = 0x00;
    return;
     }

  }
 
}

 

 

void printu(char * str) 
{
 ComShowString(c_COM1,str);
}

void printuf(char *str, unsigned char cb)
{
 ComShowString(c_COM1,str);
 cb = cb;
}

void Mp3FileMangement(void)
{
//    char i;
 uchar ucDispBuff[15];  //for 84 Col Limited Char Count is 14
// uchar xdata ucTempBuff[20];
  printu("Entering MP3-PLAY Mode...\n");
//     MP3_Init();    //初始化MP3环境.
//  Mute(1);                                                
//  KeyBoardInit();                                             
//  MP3InitFlag = 1;
//  NowPlaying=0;
//  EA = 1;                                                     
//  LED = 0;   //LED Light on                                                  

  uiVolumeCount= 0x1111;

  LCD_Clear();
  NumofSong = GetMP3List();
   VS1003B_SoftReset();

   if(NumofSong == 0)
    {
     printu("There is no MP3 file in the USB Disk!\n");
   LCD_ShowString(1,0,"No Mp3 File Find");
//     LED = 1;                                                  
    }
  else
  {
   printuf("Song Number: %x\n", NumofSong);
   sprintf(ucDispBuff,"Song Number: %x\n", NumofSong);
   LCD_ShowString(1,0,ucDispBuff);
  }
  ComSendText(c_COM1,&NumofSong,1);
       
  printu("PlayState: STOP    Hit PLAY key\n\n");
 
  while(1)
  {
      printuf("Now play the song No.%d   ",(uint)NowPlaying+1);
   sprintf(ucDispBuff,"Song Index:  %x",NowPlaying+1);
   LCD_ShowString(2,0,ucDispBuff);

//   memset(ucTempBuff,0x0,20);
//   memcpy(ucTempBuff,Song_Buff+(11 * NowPlaying),11);
//   ComShowString(c_COM1,"File Name is:");
//   ComShowString(c_COM1,ucTempBuff);

//   for(i=0;i<11;i++)
//      printuf("%c",Song_Buff[11 * NowPlaying + i]);
//   printu("\n");
      
   if(NumofSong != 0)
   {
    ComShowString(c_COM1,"Start Play Mp3");
    if(MP3InitFlag)
    {//初始化MP3演唱的环境。
     ComShowString(c_COM1,"InitMp3");
     if ( !PlayInit(&Song_Buff[11 * NowPlaying]) )
        {
          printu("Bad MP3 file or error!\n");
          while(1);
      }
     MP3InitFlag = 0;
    }
//    Mute(0);
    ComShowString(c_COM1,"Send Data To VS1003B");
    PlayMP3(&Song_Buff[11 * NowPlaying]);
//    Mute(1);
   }
   if(NowPlaying == NumofSong)
   { 
       NowPlaying= 0;
    //PlayState = STOP;  //Bypass this line to repeat playing circularly
    }
//   LED =~LED;
  }
  
   }
// }
//}

⌨️ 快捷键说明

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