📄 新建 文本文档.txt
字号:
}
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 + -