阿波罗板~音乐播放把红外~干死了! 红外乱码了,大神求解
希望实现 通过红外 播放下一首。。结果 几乎不鸟我。。。极低概率有效。。求解 ,都是用的例程代码,没有什么改动 除了下部分:
while(1)
{
ir_key=Remote_Scan();
key=KEY_Scan(0);
if(key==WKUP_PRES||ir_key==ir_pause)//暂停
{
if(ir_key==ir_pause)key=WKUP_PRES;//dyx
if(audiodev.status&0X01)audiodev.status&=~(1<<0);
else audiodev.status|=0X01;
}
if(key==KEY2_PRES||key==KEY0_PRES||ir_key==ir_up||ir_key==ir_down)//下一曲/上一曲
{
if(ir_key==ir_up)key=KEY2_PRES;//dyx
if(ir_key==ir_down)key=KEY0_PRES;//dyx
res=key;
break;
}
wav_get_curtime(audiodev.file,&wavctrl);//得到总时间和当前播放的时间
audio_msg_show(wavctrl.totsec,wavctrl.cursec,wavctrl.bitrate);
t++;
if(t==20)
{
t=0;
LED0_Toggle;
}
if((audiodev.status&0X01)==0)delay_ms(10);
else break;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
应该是 读U盘的时候 关闭了 总中断 导致红外接收出错了。。。
@原子哥 是这个缘故吧?
u8 SD_ReadDisk(u8* buf,u32 sector,u8 cnt)
{
u8 sta=SD_OK;
long long lsector=sector;
u8 n;
lsector<<=9;
INTX_DISABLE();//关闭总中断(POLLING模式,严禁中断打断SDIO读写操作!!!)
if((u32)buf%4!=0)
{
for(n=0;n<cnt;n++)
{
sta=HAL_SD_ReadBlocks(&SDCARD_Handler,(uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);//单个sector的读操作
memcpy(buf,SDIO_DATA_BUFFER,512);
buf+=512;
}
}else
{
sta=HAL_SD_ReadBlocks(&SDCARD_Handler,(uint32_t*)buf,lsector,512,cnt);//单个sector的读操作
}
INTX_ENABLE();//开启总中断
return sta;
感谢原子哥回复
我试过了,屏蔽播放函数 //audio_play(); 都是好的,没有问题
但只屏蔽 //key=audio_play_song(pname); //播放这个音频文件
但是这里就会乱码而且 高电平的Dval值 有些超出设定的范围。。
一旦取消注释 就乱码
//播放音乐
void audio_play(void)
{
u8 res,ir_key;
DIR wavdir; //目录
FILINFO *wavfileinfo;//文件信息
u8 *pname; //带路径的文件名
u16 totwavnum; //音乐文件总数
u16 curindex; //当前索引
u8 key; //键值
u32 temp;
u32 *wavoffsettbl; //音乐offset索引表
WM8978_ADDA_Cfg(1,0); //开启DAC
WM8978_Input_Cfg(0,0,0);//关闭输入通道
WM8978_Output_Cfg(1,0); //开启DAC输出
while(f_opendir(&wavdir,"0:/MUSIC"))//打开音乐文件夹
{
Show_Str(60,190,240,16,"MUSIC文件夹错误!",16,0);
delay_ms(200);
LCD_Fill(60,190,240,206,WHITE);//清除显示
delay_ms(200);
} ir_key=Remote_Scan();
// totwavnum=audio_get_tnum("0:/MUSIC"); //得到总有效文件数
// while(totwavnum==NULL)//音乐文件总数为0
// {
// Show_Str(60,190,240,16,"没有音乐文件!",16,0);
// delay_ms(200);
// LCD_Fill(60,190,240,146,WHITE);//清除显示
// delay_ms(200);
// }
// wavfileinfo=(FILINFO*)mymalloc(SRAMIN,sizeof(FILINFO)); //申请内存
// pname=mymalloc(SRAMIN,_MAX_LFN*2+1); //为带路径的文件名分配内存
// wavoffsettbl=mymalloc(SRAMIN,4*totwavnum); //申请4*totwavnum个字节的内存,用于存放音乐文件off block索引
//// while(!wavfileinfo||!pname||!wavoffsettbl)//内存分配出错
// {
// Show_Str(60,190,240,16,"内存分配失败!",16,0);
// delay_ms(200);
// LCD_Fill(60,190,240,146,WHITE);//清除显示
// delay_ms(200);
// }
//记录索引
// res=f_opendir(&wavdir,"0:/MUSIC"); //打开目录
// if(res==FR_OK)
// {
// curindex=0;//当前索引为0
// while(1)//全部查询一遍
// {
// temp=wavdir.dptr; //记录当前index
// res=f_readdir(&wavdir,wavfileinfo); //读取目录下的一个文件
// if(res!=FR_OK||wavfileinfo->fname[0]==0)break; //错误了/到末尾了,退出
// res=f_typetell((u8*)wavfileinfo->fname);
// if((res&0XF0)==0X40)//取高四位,看看是不是音乐文件
// {
// wavoffsettbl[curindex]=temp;//记录索引
// curindex++;
// }
// }
// }
// curindex=0; //从0开始显示
// res=f_opendir(&wavdir,(const TCHAR*)"0:/MUSIC"); //打开目录
// while(res==FR_OK)//打开成功
// {
//
// dir_sdi(&wavdir,wavoffsettbl[curindex]); //改变当前目录索引
// res=f_readdir(&wavdir,wavfileinfo); //读取目录下的一个文件
// if(res!=FR_OK||wavfileinfo->fname[0]==0)break; //错误了/到末尾了,退出
// strcpy((char*)pname,"0:/MUSIC/"); //复制路径(目录)
// strcat((char*)pname,(const char*)wavfileinfo->fname); //将文件名接在后面
// LCD_Fill(60,190,lcddev.width-1,190+16,WHITE); //清除之前的显示
// Show_Str(60,190,lcddev.width-60,16,(u8*)wavfileinfo->fname,16,0);//显示歌曲名字
// audio_index_show(curindex+1,totwavnum);
// key=audio_play_song(pname); //播放这个音频文件
// if(key==KEY2_PRES) //上一曲
// {
// if(curindex)curindex--;
// else curindex=totwavnum-1;
// }else if(key==KEY0_PRES)//下一曲
// {
// curindex++;
// if(curindex>=totwavnum)curindex=0;//到末尾的时候,自动从头开始
// }else break; //产生了错误
// }
// myfree(SRAMIN,wavfileinfo); //释放内存
// myfree(SRAMIN,pname); //释放内存
// myfree(SRAMIN,wavoffsettbl); //释放内存
}
一周热门 更多>