搜索
bottom↓
回复: 3

阿永那款MP3板,按键下首歌之后播放的顺序并不是枚举的顺序,各位研究下

[复制链接]

出0入0汤圆

发表于 2006-11-15 10:41:55 | 显示全部楼层 |阅读模式
/*枚举根目寻下的MP3文件*/

while(1)

{

  for ( c = 0; c < 255; c ++ )

  {  /* 最多搜索前255个文件 */

        strcpy( mCmdParam.Open.mPathName,"\\*" );  /* 搜索根目录下文件名*/

        i = strlen( (char *)mCmdParam.Open.mPathName );  /* 计算文件名长度,以处理文件名结束符 */

        mCmdParam.Open.mPathName[ i ] =0xFF;  /* 将结束符替换为255说明序号在变量中 */

        CH375vFileSize=c;       /*指定搜索的序号,几乎没有上限*/

        i = CH375FileEnumer( );  /* 文件名中含有通配符*,则为搜索文件而不打开 */

        if ( i == ERR_MISS_FILE ) break;  /* 再也搜索不到匹配的文件,已经没有匹配的文件名 */

        if ( i != ERR_SUCCESS ) break; /* 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 */

        if(CH375vFileSize!=0xFFFFFFFF)   /*枚举到MP3文件*/

        {

           mp3_play( (char *)mCmdParam.Open.mPathName );

        }

   }

}

//NEXT键按下

if(!(PINE&NEXTSONG))

    {

        delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);

        if(!(PINE&NEXTSONG))  goto NEXT;       //跳到下一首歌曲

    }

这里跳转,C的值加一,但实际上并不是下首歌。

而如果不按NEXT键,MP3将顺序播放。顺序播放枚举是顺序,而设定指定搜索号,却不能和顺序播放的序号相同。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2006-11-15 16:35:37 | 显示全部楼层
顶下,大家来说下

出0入0汤圆

发表于 2006-11-15 23:46:38 | 显示全部楼层
这只是判断按键按下去的,一按下去就可能超时了,所以又触发了N次。你还得在程序中自已加上判断按键抬起来的零碎代码。阿永只是做了板子的演示,可是它并不是产业化的MP3产品啊。





if(!(PINE&NEXTSONG))                                  //NEXT键按下

{

    delay_nus(250);                                   //防抖延时

    if(!(PINE&NEXTSONG))                              //防抖时间后再检测

    {               

        while(!(PINE&NEXTSONG))                       //NEXT键抬起

            {

                if (PINE&NEXTSONG)   goto NEXT;       //跳到下一首歌曲

            }

    }

}

出0入0汤圆

发表于 2006-11-16 19:51:27 | 显示全部楼层
以下是本人测试SD卡时用的播放程序,效果还不错,有兴趣的朋友可以参考参考!



//播放MP3程序  

void mp3_play(unsigned long FirstClust)

{  

   unsigned long LBA,NextCluster;

   unsigned int i,data_pointer,rate,data;

   unsigned char n,t1;

   NextCluster = FirstClust;

   

   while (1)

   {       

          LBA =fatClustToSect(NextCluster);

          for (i=0;i<SectorsPerCluster;i++)

          {

                 if(flag==0)  

                    ReadBlock(LBA+i);      //读完后文件指针自动后移

                  

        //按键处理程序

            //ST/PS键按下

             if(!(PINE&STOP))

             {

                delay_nms(20);

                    if(!(PINE&STOP))

                    {

                       flag^=0x01;                          

                    }

             }

          //VOLUP键按下

             if(!(PINE&VOLDOWN))  

             {

                delay_nms(20);

                if(!(PINE&VOLDOWN))  

                    {                       

                       vol=vol+((unsigned int)(2<<8)+2);

                       if(vol>=0xF0F0)

                          vol=0xF0F0;

                   else

                          VS1003_cmd_write(0x0b,vol);    //每次左右声道VOL减2

                    }

             }

          //VOLDOWN键按下

             if(!(PINE&VOLUP))

             {

                    delay_nms(20);

                    if(!(PINE&VOLUP))

                    {               

                       vol=vol-((unsigned int)(2<<8)+2);

                       if(vol<=0x0505)

                              vol=0x0505;

                       else

                              VS1003_cmd_write(0x0b,vol);   //每次左右声道VOL加2

                }

                 }

           //NEXT键按下

             if(!(PINE&NEXTSONG))

             {

                    delay_nms(20);               

                    if(!(PINE&NEXTSONG))

                        {                                  

                           goto NEXT;       //跳到下一首歌曲

                        }   

             }

            //PREV键按下

             if(!(PINE&PREVSONG))

             {

                    delay_nms(20);

                    if(!(PINE&PREVSONG))

                    {               

                       t=t-2;

                           goto NEXT;  //返回前一首歌曲

                }

                 }

               

                 data_pointer=0;

         while(data_pointer<512)

         {   

            if(VS1003_DREQ_PIN&VS1003_DREQ_BIT)

            {

               for(n=0;n<32;n++)

                       {

                  VS1003_data_write(BUFFER[data_pointer]);

                  data_pointer++;   

                      }

                    }

                if (data_pointer==511)

                           break;   //如果现在的数据不够了,则跳出来

             }

          }   

          NextCluster = fatNextCluster(NextCluster);

          if(NextCluster >=(CLUST_RSRVD&FAT_MASK))

             break;

   }

   NEXT: delay_nms(50);  /* 下一首歌曲*/       

}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 21:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表