效果如上图,不知是什么原因?
RESTART:
Mp3Reset();
Vs1003SoftReset();
t = SongCount[Song];
CH376WriteVar32( VAR_START_CLUSTER, FileNameBuffer[ t ].DirStartClust ); /* 将当前文件所在上级目录的起始簇号设置为当前簇号,相当于打开上级目录 */
s = CH376FileOpen( FileNameBuffer[ t ].Name ); /* 打开文件 */
if ( s == USB_INT_SUCCESS ) { /* 成功打开了文件 */
SPI2_SetSpeed(SPI2_SPEED_4);//高速 CH376S
u32FileLen = CH376GetFileSize(); /* 获取文件大小 */
u32DataCnt=0; //清除上一次播放的数据
while (u32DataCnt < u32FileLen)
{
SPI2_SetSpeed(SPI2_SPEED_4);//高速 CH376S
pu8Temp = u8SectorBuf;
CH376SecRead(pu8Temp, 1, 0); /*以扇区为单位从当前位置读取数据块,不支持SD卡*/
u32DataCnt += 512;
SPI1_SetSpeed(SPI1_SPEED_8); //高速,对VS1003B,设置为4.5M
m = 0;
while (m < 512) //循环发送512个字节
{
// while (VS_DREQ == 0); //等待DREQ为高
if (VS_DREQ != 0 && pause==0)
{
VS_XDCS = 0; /*VS_XDCS = 0,选择vs1003的数据接口 */
for (j=0; j<32; j++)
{
SPI1_ReadWriteByte(*pu8Temp++);
}
VS_XDCS = 1; /*VS_XDCS = 1*/
m += 32;
}
if(Remote_Rdy)
{
key_red=Remote_Process();
// LCD_ShowNum(86,260,key_red,3,16);//显示键值
// LCD_ShowNum(186,260,Remote_Cnt,3,16);//显示按键次数
switch(key_red)
{
case 2:
LCD_ShowString(66,300, " NEXT ");
Song++;
if (Song>mtotal) Song = 0;
goto RESTART; //重新回到那里播
case 34:
LCD_ShowString(66,300, " PREV ");
Song--;
if (Song==0) Song = mtotal;
goto RESTART; //重新回到那里播放
case 168:
LCD_ShowString(66,300, " VOL+ ");
VS_VOLT += Remote_Cnt;
if(VS_VOLT > 250) VS_VOLT = 250;
VS_SET_VOL(VS_VOLT,VS_BASS);
break;
case 224:
LCD_ShowString(66,300, " VOL- ");
VS_VOLT -= Remote_Cnt;
if(VS_VOLT ==0) VS_VOLT =1;
VS_SET_VOL(VS_VOLT,VS_BASS);
break;
case 144:
LCD_ShowString(66,300, " EQ ");
VS_BASS += (Remote_Cnt*10);
if(VS_BASS > 150) VS_BASS =0;
VS_SET_VOL(VS_VOLT,VS_BASS);
break;
case 48:
LCD_ShowString(66,300, " 1 ");
Song = 1;
goto RESTART; //重新回到那里播放
case 24:
LCD_ShowString(66,300, " 2 ");
Song = 2;
goto RESTART; //重新回到那里播放
case 122:
LCD_ShowString(66,300, " 3 ");
Song = 3;
goto RESTART; //重新回到那里播放
case 16:
LCD_ShowString(66,300, " 4 ");
Song = 4;
goto RESTART; //重新回到那里播放
case 56:
LCD_ShowString(66,300, " 5 ");
Song = 5;
goto RESTART; //重新回到那里播放
case 90:
LCD_ShowString(66,300, " 6 ");
Song = 6;
goto RESTART; //重新回到那里播放
case 66:
LCD_ShowString(66,300, " 7 ");
Song = 7;
goto RESTART; //重新回到那里播放
case 74:
LCD_ShowString(66,300, " 8 ");
Song = 8;
goto RESTART; //重新回到那里播放
case 82:
LCD_ShowString(66,300, " 9 ");
Song = 9;
goto RESTART; //重新回到那里播放
case 194:
// LCD_ShowString(56+10,300, " Pause ");
pause=!pause;
// break;//加了break后无暂停此功能,
default: break;
}
key_red=0;
}
}
MP3_Msg_Show(u32FileLen,Song,mtotal);//MP3进度显示/播放时间
}
显示函数如下:加上这个函数时播放码率高的320k的歌曲时会有点卡~
u16 f_kbps=0;//歌曲文件位率
//显示播放时间,比特率 等事信息
void MP3_Msg_Show(u32 lenth,u16 index,u16 total)
{
static u16 playtime=0;//播放时间标记
u16 time=0;// 时间变量
u16 temp=0;
if(f_kbps==0xffff)//未更新过
{
playtime=0;
f_kbps=GetHeadInfo(); //获得比特率
}
POINT_COLOR=GREEN;
BACK_COLOR=MP3COLOR1;
if(f_kbps)//对位率不为0 的文件
{
time=(lenth/f_kbps)/125; //总时间
}else time=GetDecodeTime(); //对位率为0的文件,得到解码时间
time=GetDecodeTime(); //得到解码时间
if(playtime==0)playtime=time;
else if((time!=playtime)&&(time!=0))//1s时间到,更新显示数据
{
playtime=time;//更新时间
temp=GetHeadInfo(); //获得比特率
if(temp!=f_kbps)
{
f_kbps=temp;//更新KBPS
}
//显示播放时间
LCD_Show2Num(79,70,time/60,2,16,0); //分钟
LCD_ShowChar(94,70,':',16,0);
LCD_Show2Num(102,70,time%60,2,16,0);//秒钟
LCD_ShowChar(118,70,'/',16,0);
//显示总时间
if(f_kbps)time=(lenth/f_kbps)/125;//得到秒钟数 (文件长度(字节)/(1000/8)/比特率=持续秒钟数
else time=0;//非法位率
LCD_Show2Num(126,70,time/60,2,16,0);//分钟
LCD_ShowChar(142,70,':',16,0);
LCD_Show2Num(150,70,time%60,2,16,0);//秒钟
//显示当前曲目的索引,及总曲目数
LCD_Show2Num(62,90,index,3,16,0); //索引
LCD_ShowChar(86,90,'/',16,0);
LCD_Show2Num(94,90,total,3,16,0); //总曲目
//显示位率
LCD_ShowNum(122,90,f_kbps,3,16);//显示位率
LCD_ShowString(146,90,"Kbps");
}
}