kingsabbit 发表于 2008-3-24 13:32:22

MP3范例板(Mega64+VS1003)SD卡程序改进

MP3范例板(Mega64+VS1003)SD卡程序改进:原程序的按键检测程序有问题,播放时会出同按上/下一首曲时跳变N首曲,因此本人进行了改进
点击此处下载ourdev_237476.txt(文件大小:8K)

kingsabbit 发表于 2008-3-24 13:37:41

说明:基本程程基本没有改变,保留原设计作者的程序代码,只是按键检测部分增加了延时,并等待按键释放,保证了按键一次操作的准确性。重新改动的程序已在MPS范例板上进行测试,相比以前正常了好多,请大家更进,文件中的库文件请大家改为原来的,改动地方如下:
//修改后的MP3文件
//选上一首/下一首曲有问题的改进,不会发生
void mp3_play(unsigned long FirstClust)
        {
        uint32 LBA,NextCluster;
        uint16 i,data_pointer,rate;
        uint8 n,t1;
        //unsigned char kk={0x00};
        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(100);
                                                                while(1)        //等待按键释放
                                                                                {
                                                                                if((PINE&STOP))   break;
                                                                                }
                                                                flag^=0x01;
                                                           }
                                  //VOLUP键按下
                                  if(!(PINE&VOLDOWN))
                                                           {
                                                           //延时消抖
                                                  delay_nus(250);
                                                  if(!(PINE&VOLDOWN))
                                                                                  {
                                                                                  vol=vol+((uint)(2<<8)+2);
                                                                                   if(vol>=0xFAFA) vol=0xF0F0;
                                                                     else vs1003_cmd_write(0x0b,vol);    //每次左右声道VOL减2
                                                                                  }
                                                           }
                                  //VOLDOWN键按下
                                  if(!(PINE&VOLUP))
                                          {
                                          //延时消抖
                                                        delay_nus(250);
                                                        delay_nus(250);
                                                        delay_nus(250);
                                                        delay_nus(250);
                                                        if(!(PINE&VOLUP))
                                                                          {
                                                                           vol=vol-((uint)(2<<8)+2);
                                                                           if(vol<=0x0505) vol=0x0505;
                                                                           else vs1003_cmd_write(0x0b,vol);   //每次左右声道VOL加2
                                                              }
                                                        }
                                  //NEXT键按下
                                  if(!(PINE&NEXTSONG))
                                                  {
                                                  //延时消抖
                                                                delay_nms(100);
                                                                while(1)        //等待按键释放
                                                                        {
                                                                        if((PINE&NEXTSONG))   break;
                                                                        }
                                                                goto NEXT;       //跳到下一首歌曲
                                                  }
                          //PREV键按下
                                  if(!(PINE&PREVSONG))
                                                  {       
                                                  //延时消抖
                                                  delay_nms(100);
                                                                while(1)        //等待按键释放
                                                                                {
                                                                                if((PINE&PREVSONG))   break;
                                                                                }
                                                                if (t>0)        //不为第一首则向前一首
                                                                                {
                                                                                t=t-2;        //返回的循环自动增一,所以这减2
                                                                                }
                                                                else
                                                                                {
                                                                                t=t-1;        //当第一首时刚减去返回的循环自动增一的值即可
                                                                                }
                                                          goto NEXT;//返回前一首歌曲
                                                                }       
                                       data_pointer=0;
              while(data_pointer<512)                //每次512位的数据送解码
                                      {   
                            if(PINB&MP3_DATA_REQ)                //允许发送下一数据请求时
                                       {
                               for(n=0;n<32;n++)
                                                                   {
                                  vs1003_data_write(BUFFER);
                                  data_pointer++;   
                                                  }
                                                                                }
                                                     if (data_pointer==511) break;   //如果现在的数据不够了,则跳出来
                                                     }
                                        }
                       
                        NextCluster = fatNextCluster(NextCluster);
                        if (NextCluster >=(CLUST_RSRVD&FAT_MASK))break;
                        }
                        NEXT:
                        //kk=t+32+17;        //调试用,用于检测功能
                        //LCD_clear();
                        //LCD_write_String(0,0,kk);
                        delay_nus(1);//下一首歌曲
       
        }



附件中已注明,敬请注意!

kingofkings 发表于 2008-3-24 21:58:19

呵呵,可以算个COOL帖了,但是错区了,AVR的版主可以加裤子了~

kingofkings 发表于 2008-3-24 22:01:42

以下蓝色文字由版主:kingofkings 于:2008-03-24,22:01:42 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:AVR32技术论坛
即将移去的分区:AVR (原ourAVR.com) 技术论坛
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font>

lonelynw 发表于 2008-3-25 12:48:17

楼主可否将FAT文件奉上?偶也在搞个MP3,外挂的是金士顿1G的SD卡,查询得知为FAT32格式……
借用你的FAT文件,(*^__^*) 嘻嘻……
劳烦发个邮件或者Q邮啊:lonely84@163.com    Q:464466045

lonelynw 发表于 2008-3-25 12:48:42

不胜感激~~~~

kingsabbit 发表于 2008-3-25 22:45:01

阿莫的MP3范例板中有,如果在这上存,怕你看不明白~见谅~保留MP3范例板原作者的版本

xinjie1023 发表于 2009-8-22 10:43:25

学习学习再学习

kingsabbit 发表于 2009-10-5 00:18:30

有的网友说阿莫提供的OK.hex不行,经上面网友反应,特把上述原代码共享

MP3板SD卡MP3播放ourdev_488351.rar(文件大小:170K) (原文件名:MP3板SD卡MP3播放1.rar)

希望网友能看明白1楼所作的说明,也可能是我的意思让网友不太明白吧

fy024 发表于 2009-10-5 18:11:28

mark

shanyao 发表于 2010-1-3 08:42:16

来个MARK

lengmo 发表于 2010-1-4 00:00:44

mark

zhigang 发表于 2010-1-4 19:11:55

Mark

bwsz1 发表于 2010-3-11 15:34:26

学习 学习

feixuehanyi 发表于 2010-10-13 07:36:42

mark

lab1224 发表于 2010-10-19 11:47:49

mark

lixupeng 发表于 2011-6-19 10:27:06

mark!!!
页: [1]
查看完整版本: MP3范例板(Mega64+VS1003)SD卡程序改进