在我加入恢复指定背景 {MOD}函数以后音乐播放器实验提示MUSIC文件夹错误

2019-07-20 20:18发布

我不在audio_play(void)函数里用可以实现/读取指定区域背景 {MOD}和恢复指定区域背景 {MOD},但是在audio_play(void)里面就会报错,说的是“”MUSIC文件夹错误“”,不加这两函数的时候单独运行是可以正常播放的,
void app_read_bkcolor(u16 x,u16 y,u16 width,u16 height,u16 *ctbl)//读取指定区域背景 {MOD}
{
        u32        x0,y0,ccnt;
        ccnt=0;
        for(y0=y;y0<y+height;y0++)
        {
                for(x0=x;x0<x+width;x0++)
                {
                        ctbl[ccnt]=LCD_ReadPoint(x0,y0);
                        ccnt++;
                }
        }
}  

void app_recover_bkcolor(u16 x,u16 y,u16 width,u16 height,u16 *ctbl)//恢复指定区域背景 {MOD}
{
        u32 x0,y0,ccnt;
        ccnt=0;
        for(y0=y;y0<y+height;y0++)
        {
                for(x0=x;x0<x+width;x0++)
                {
                        LCD_Drawpoint(x0,y0,ctbl[ccnt]);
                        ccnt++;
                }
        }
}

主函数部分代码
int main(void)
{        

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#207;μí3&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        delay_init(168);  //3&#245;ê&#188;&#187;ˉ&#209;óê±oˉêy
        uart_init(115200);                //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú2¨ì&#216;&#194;ê&#206;a115200
        LED_Init();                                        //3&#245;ê&#188;&#187;ˉLED
        usmart_dev.init(84);                //3&#245;ê&#188;&#187;ˉUSMART
        TFTLCD_Init();                                        //LCD3&#245;ê&#188;&#187;ˉ  
        KEY_Init();                                        //°′&#188;ü3&#245;ê&#188;&#187;ˉ  
        W25QXX_Init();                                //3&#245;ê&#188;&#187;ˉW25Q128
        WM8978_Init();                                //3&#245;ê&#188;&#187;ˉWM8978
        WM8978_HPvol_Set(40,40);        //&#182;ú&#187;úò&#244;á&#191;éè&#214;&#195;
        WM8978_SPKvol_Set(0);                //à&#174;°èò&#244;á&#191;éè&#214;&#195;
       
        my_mem_init(SRAMIN);                //3&#245;ê&#188;&#187;ˉ&#196;ú2&#191;&#196;ú′&#230;3&#216;
        my_mem_init(SRAMCCM);                //3&#245;ê&#188;&#187;ˉCCM&#196;ú′&#230;3&#216;
        exfuns_init();                                //&#206;afatfs&#207;à1&#216;±&#228;á&#191;éê&#199;&#235;&#196;ú′&#230;  
          f_mount(fs[0],"0:",1);                 //1ò&#212;&#216;SD&#191;¨  
        POINT_COLOR=RED;      
        while(font_init())                         //&#188;ì2é×&#214;&#191;a
        {            
                LCD_ShowString(30,50,200,16,16,"Font Error!");
                delay_ms(200);                                  
                LCD_Fill(30,50,240,66,WHITE);//&#199;&#229;3y&#207;&#212;ê&#190;             
                delay_ms(200);                                  
        }           
        POINT_COLOR=RED;      
        Show_Str(60,50,200,16,"Explorer STM32F4&#191;a·¢°&#229;",16,0);                                             
        Show_Str(60,70,200,16,"ò&#244;à&#214;2¥·&#197;&#198;÷êμ&#209;é",16,0);                                             
        Show_Str(60,90,200,16,"&#213;yμ&#227;&#212;-×ó@ALIENTEK",16,0);                                             
        Show_Str(60,110,200,16,"2014&#196;ê5&#212;&#194;24è&#213;",16,0);
        Show_Str(60,130,200,16,"KEY0:NEXT   KEY2REV",16,0);
        Show_Str(60,150,200,16,"KEY_UPAUSE/PLAY",16,0);
       
        bjgm=mymalloc(SRAMIN,16);
        app_read_bkcolor(60,190,150,16,bjgm);       
        while(1)
        {
                audio_play();
        }
}


audio函数部分代码

void audio_play(void)
{
        u8 res;
        DIR wavdir;                         //&#196;&#191;&#194;&#188;
        FILINFO wavfileinfo;//&#206;&#196;&#188;tD&#197;&#207;¢
        u8 *fn;                           //3¤&#206;&#196;&#188;t&#195;&#251;
        u8 *pname;                        //′&#248;&#194;·&#190;&#182;μ&#196;&#206;&#196;&#188;t&#195;&#251;
        u16 totwavnum;                 //ò&#244;à&#214;&#206;&#196;&#188;t×üêy
        u16 curindex;                //í&#188;&#198;&#172;μ±&#199;°&#203;÷òy
        u8 key;                                //&#188;ü&#214;μ                  
        u16 temp;
        u16 *wavindextbl;        //ò&#244;à&#214;&#203;÷òy±í
       
        WM8978_ADDA_Cfg(1,0);        //&#191;a&#198;&#244;DAC
        WM8978_Input_Cfg(0,0,0);//1&#216;±&#213;ê&#228;è&#235;í¨μà
        WM8978_Output_Cfg(1,0);        //&#191;a&#198;&#244;DACê&#228;3&#246;   
       
        while(f_opendir(&wavdir,"0:/MUSIC"))//′ò&#191;aò&#244;à&#214;&#206;&#196;&#188;t&#188;D
        {            
                Show_Str(60,190,240,16,"MUSIC文件夹错误!",16,0);   //就是提示这个错误,我不加那两个函数可以正常播放,文件夹不会有错,搞不懂为什么加上那两函数这里就报错了
                delay_ms(200);                                  
                LCD_Fill(60,190,240,206,WHITE);//&#199;&#229;3y&#207;&#212;ê&#190;             
                delay_ms(200);                                  
        }                                                                           
        totwavnum=audio_get_tnum("0:/MUSIC"); //μ&#195;μ&#189;×üóDD§&#206;&#196;&#188;têy
          while(totwavnum==NULL)//ò&#244;à&#214;&#206;&#196;&#188;t×üêy&#206;a0               
        {            
                Show_Str(60,190,240,16,"&#195;&#187;óDò&#244;à&#214;&#206;&#196;&#188;t!",16,0);
                delay_ms(200);                                  
                LCD_Fill(60,190,240,146,WHITE);//&#199;&#229;3y&#207;&#212;ê&#190;             
                delay_ms(200);                                  
        }                                                                                  
          wavfileinfo.lfsize=_MAX_LFN*2+1;                                                //3¤&#206;&#196;&#188;t&#195;&#251;×&#238;′ó3¤&#182;è
        wavfileinfo.lfname=mymalloc(SRAMIN,wavfileinfo.lfsize);        //&#206;a3¤&#206;&#196;&#188;t&#187;o′&#230;&#199;&#248;·&#214;&#197;&#228;&#196;ú′&#230;
        pname=mymalloc(SRAMIN,wavfileinfo.lfsize);                                //&#206;a′&#248;&#194;·&#190;&#182;μ&#196;&#206;&#196;&#188;t&#195;&#251;·&#214;&#197;&#228;&#196;ú′&#230;
        wavindextbl=mymalloc(SRAMIN,2*totwavnum);                                //éê&#199;&#235;2*totwavnum&#184;&#246;×&#214;&#189;úμ&#196;&#196;ú′&#230;,ó&#195;óú′&#230;·&#197;ò&#244;à&#214;&#206;&#196;&#188;t&#203;÷òy
        while(wavfileinfo.lfname==NULL||pname==NULL||wavindextbl==NULL)//&#196;ú′&#230;·&#214;&#197;&#228;3&#246;′í
        {            
                Show_Str(60,190,240,16,"&#196;ú′&#230;·&#214;&#197;&#228;꧰ü!",16,0);
                delay_ms(200);                                  
                LCD_Fill(60,190,240,146,WHITE);//&#199;&#229;3y&#207;&#212;ê&#190;             
                delay_ms(200);                                  
        }           
        //&#188;&#199;&#194;&#188;&#203;÷òy
    res=f_opendir(&wavdir,"0:/MUSIC"); //′ò&#191;a&#196;&#191;&#194;&#188;
        if(res==FR_OK)
        {
                curindex=0;//μ±&#199;°&#203;÷òy&#206;a0
                while(1)//è&#171;2&#191;2é&#209;ˉò&#187;±é
                {
                        temp=wavdir.index;                                                                //&#188;&#199;&#194;&#188;μ±&#199;°index
                res=f_readdir(&wavdir,&wavfileinfo);                       //&#182;áè&#161;&#196;&#191;&#194;&#188;&#207;&#194;μ&#196;ò&#187;&#184;&#246;&#206;&#196;&#188;t
                if(res!=FR_OK||wavfileinfo.fname[0]==0)break;        //′í&#206;óá&#203;/μ&#189;&#196;&#169;&#206;2á&#203;,í&#203;3&#246;                  
                     fn=(u8*)(*wavfileinfo.lfname?wavfileinfo.lfname:wavfileinfo.fname);                         
                        res=f_typetell(fn);       
                        if((res&0XF0)==0X40)//è&#161;&#184;&#223;&#203;&#196;&#206;&#187;,&#191;′&#191;′ê&#199;2&#187;ê&#199;ò&#244;à&#214;&#206;&#196;&#188;t       
                        {
                                wavindextbl[curindex]=temp;//&#188;&#199;&#194;&#188;&#203;÷òy
                                curindex++;
                        }            
                }
        }   
           curindex=0;                                                                                        //′ó0&#191;aê&#188;&#207;&#212;ê&#190;
           res=f_opendir(&wavdir,(const TCHAR*)"0:/MUSIC");         //′ò&#191;a&#196;&#191;&#194;&#188;
        while(res==FR_OK)//′ò&#191;a3é1|
        {       
                dir_sdi(&wavdir,wavindextbl[curindex]);                        //&#184;&#196;±&#228;μ±&#199;°&#196;&#191;&#194;&#188;&#203;÷òy          
        res=f_readdir(&wavdir,&wavfileinfo);                       //&#182;áè&#161;&#196;&#191;&#194;&#188;&#207;&#194;μ&#196;ò&#187;&#184;&#246;&#206;&#196;&#188;t
        if(res!=FR_OK||wavfileinfo.fname[0]==0)break;        //′í&#206;óá&#203;/μ&#189;&#196;&#169;&#206;2á&#203;,í&#203;3&#246;
             fn=(u8*)(*wavfileinfo.lfname?wavfileinfo.lfname:wavfileinfo.fname);                         
                strcpy((char*)pname,"0:/MUSIC/");                                //&#184;′&#214;&#198;&#194;·&#190;&#182;(&#196;&#191;&#194;&#188;)
                strcat((char*)pname,(const char*)fn);                          //&#189;&#171;&#206;&#196;&#188;t&#195;&#251;&#189;ó&#212;úoó&#195;&#230;
        //        LCD_Fill(60,190,240,190+16,WHITE);                               
                app_recover_bkcolor(60,150,180,16,bjgm);                //这里我将原来的清屏函数换成恢复背景 {MOD}
                Show_Str(60,190,240-60,16,fn,16,0);                                //&#207;&#212;ê&#190;&#184;è&#199;ú&#195;&#251;×&#214;
                audio_index_show(curindex+1,totwavnum);
                key=audio_play_song(pname);                                          //2¥·&#197;&#213;a&#184;&#246;ò&#244;&#198;μ&#206;&#196;&#188;t
                if(key==KEY2_PRES)                //é&#207;ò&#187;&#199;ú
                {
                        if(curindex)curindex--;
                        else curindex=totwavnum-1;
                }else if(key==KEY0_PRES)//&#207;&#194;ò&#187;&#199;ú
                {
                        curindex++;                          
                        if(curindex>=totwavnum)curindex=0;//μ&#189;&#196;&#169;&#206;2μ&#196;ê±oò,×&#212;&#182;ˉ′óí·&#191;aê&#188;
                }else break;        //2úéúá&#203;′í&#206;ó          
        }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
LVZHENHAI
1楼-- · 2019-07-20 22:53
本帖最后由 LVZHENHAI 于 2016-9-5 19:49 编辑

[mw_shl_code=c,true] u16 *bjgm;
int main(void)
{        

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#207;μí3&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        delay_init(168);  //3&#245;ê&#188;&#187;ˉ&#209;óê±oˉêy
        uart_init(115200);                //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú2¨ì&#216;&#194;ê&#206;a115200
        LED_Init();                                        //3&#245;ê&#188;&#187;ˉLED
        usmart_dev.init(84);                //3&#245;ê&#188;&#187;ˉUSMART
         TFTLCD_Init();                                        //LCD3&#245;ê&#188;&#187;ˉ  
         KEY_Init();                                        //°′&#188;ü3&#245;ê&#188;&#187;ˉ  
        W25QXX_Init();                                //3&#245;ê&#188;&#187;ˉW25Q128
        WM8978_Init();                                //3&#245;ê&#188;&#187;ˉWM8978
        WM8978_HPvol_Set(40,40);        //&#182;ú&#187;úò&#244;á&#191;éè&#214;&#195;
        WM8978_SPKvol_Set(0);                //à&#174;°èò&#244;á&#191;éè&#214;&#195;
        
        my_mem_init(SRAMIN);                //3&#245;ê&#188;&#187;ˉ&#196;ú2&#191;&#196;ú′&#230;3&#216;
        my_mem_init(SRAMCCM);                //3&#245;ê&#188;&#187;ˉCCM&#196;ú′&#230;3&#216;
        exfuns_init();                                //&#206;afatfs&#207;à1&#216;±&#228;á&#191;éê&#199;&#235;&#196;ú′&#230;  
          f_mount(fs[0],"0:",1);                 //1ò&#212;&#216;SD&#191;¨  
        POINT_COLOR=RED;      
        while(font_init())                         //&#188;ì2é×&#214;&#191;a
        {            
                LCD_ShowString(30,50,200,16,16,"Font Error!");
                delay_ms(200);                                 
                LCD_Fill(30,50,240,66,WHITE);//&#199;&#229;3y&#207;&#212;ê&#190;            
                delay_ms(200);                                 
        }           
        POINT_COLOR=RED;      
         Show_Str(60,50,200,16,"Explorer STM32F4&#191;a·¢°&#229;",16,0);                                             
        Show_Str(60,70,200,16,"ò&#244;à&#214;2¥·&#197;&#198;÷êμ&#209;é",16,0);                                             
        Show_Str(60,90,200,16,"&#213;yμ&#227;&#212;-×ó@ALIENTEK",16,0);                                             
        Show_Str(60,110,200,16,"2014&#196;ê5&#212;&#194;24è&#213;",16,0);
        Show_Str(60,130,200,16,"KEY0:NEXT   KEY2REV",16,0);
        Show_Str(60,150,200,16,"KEY_UPAUSE/PLAY",16,0);
        
      bjgm=mymalloc(SRAMIN,16);
        app_read_bkcolor(60,190,150,16,bjgm);  
    //这两行我要是屏蔽了程序又能正常运行了,不会显示MUSIC文件夹错误  
        while(1)
        {
                audio_play();
        }
}[/mw_shl_code]
LVZHENHAI
2楼-- · 2019-07-21 03:45
 精彩回答 2  元偷偷看……
LVZHENHAI
3楼-- · 2019-07-21 08:49
哈哈知道了1个像素点占2字节,保存背景 {MOD}的时候分配的字节太少了造成的

一周热门 更多>