OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4242|回复: 11

利用原子哥VS1053添加停止功能

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-21
在线时间
13 小时
发表于 2016-6-30 23:17:06 | 显示全部楼层 |阅读模式
利用原子哥实现的MP3播放器实现停止功能,已经实现播放/暂停功能,请教怎么实现停止功能呢?代码如下:
u8 mp3_play_song(u8 *pname)
{         
        FIL* fmp3;
    u16 br;
        u8 res,rval;          
        u8 *databuf;                             
        u16 i=0;
        u8 key;
        uint8_t sign = 1;
        uint8_t sign1 = 1;
       
        rval=0;            
        fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));
        databuf=(u8*)mymalloc(SRAMIN,4096);               
        if(databuf==NULL||fmp3==NULL)rval=0XFF ;
        if(rval==0)
        {          
                  VS_Restart_Play();                                         
                VS_Set_All();                                                                 
                VS_Reset_DecodeTime();                                                  
                res=f_typetell(pname);                                                                                                                               
                if(res==0x4c)
                {       
                        VS_Load_Patch((u16*)vs1053b_patch,VS1053B_PATCHLEN);
                }                                                                                                                         
                res=f_open(fmp3,(const TCHAR*)pname,FA_READ);//′ò¿aÎļt         
                if(res==0)
                {
                        VS_SPI_SpeedHigh();                                                  
                        while(rval==0)
                        {
                                res=f_read(fmp3,databuf,4096,(UINT*)&br);
                                i=0;
                                do
                            {         
                                        if(VS_Send_MusicData(databuf+i)==0)
                                        {
                                                i+=32;
                                        }else   
                                        {
                                                key = key_scan(0);
                                                switch(key)
                                                {
                                                        case KEY5_PRES:
                                                                  rval = 3;
                                                                  break;
                                                        case KEY4_PRES:   //实现播放/暂停
                                                                if(sign == 1)
                                                                {
                                                                        sign = 0;
                                                                }       
                                                                else
                                                                {
                                                                        sign = 1;
                                                                }               
                                                                break;
                                                        case KEY2_PRES:
                                                                rval=1;               
                                                                break;
                                                        case KEY3_PRES:
                                                                rval=2;               
                                                                break;
                                                        case KEY1_PRES:   //停止功能实现,可是不能实现,还是暂停
                                                                if(sign == 1)
                                                                {
                                                                        sign = 0;
                                                                        i = 0;
                                                                }       
                                                                else
                                                                {
                                                                        sign1 = 1;
                                                                }                //ÏÂò»Çú
                                                                break;
                                                }
                                                mp3_msg_show(fmp3->fsize);         
                                                while(sign == 0)
                                                {
                                                        key = key_scan(0);
                                                        if(key == KEY4_PRES)
                                                        {
                                                                sign = 1;
                                                        }
                                                }
                                               
                                        }
                                }while(i<4096);
                                if(br!=4096||res!=0)
                                {
                                        rval=0;
                                        break;          
                                }                                                          
                        }
                        f_close(fmp3);
                }else rval=0XFF;//3&#246;&#207;&#214;′í&#206;ó                     
        }                                                              
        myfree(SRAMIN,databuf);                                                 
        myfree(SRAMIN,fmp3);
        return rval;                                                 
}
在停止按键按下之后,使 i = 0;直接回到歌曲播放的原点,然后利用播放功能按键直接播放,但是红色部分是播放/暂停功能,还有停止功能,请各位指教实现停止代码哪里有问题?
@原子哥  谢谢大家啦


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-21
在线时间
13 小时
 楼主| 发表于 2016-6-30 23:17:46 | 显示全部楼层
自己顶一个  谢谢大家啦
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-21
在线时间
13 小时
 楼主| 发表于 2016-7-1 09:14:38 | 显示全部楼层
顶,请教原子哥解答下疑惑,谢谢啦
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12544
金钱
12544
注册时间
2015-11-5
在线时间
2147 小时
发表于 2016-7-1 09:17:52 | 显示全部楼层

回帖奖励 +10 金钱

帮顶,@正点原子
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-7-1 09:57:41 | 显示全部楼层
应该有关闭的逻辑的啊,你用的这个标志还是暂停标志啊!关闭的思想是按键按下把没有播放的数据不发送且认为已发送全部数据,这样下次播放就重新读取文件播放了啊。。。
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-21
在线时间
13 小时
 楼主| 发表于 2016-7-1 10:11:10 | 显示全部楼层
@365mcu大哥,你说的我基本明白了。你的意思是停止按钮要有自己的逻辑标志来判断,触发停止按键的时候直接把播放数据i = 0,  然后直接在停止按键里面检测播放按键的按下,启动重新播放。谢谢大哥,我先试试
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2016-7-1 10:36:13 来自手机 | 显示全部楼层
参考我的遥控播放器代码,可以遥控实现你的那些功能
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-21
在线时间
13 小时
 楼主| 发表于 2016-7-1 11:34:31 | 显示全部楼层
@365mcu大哥,谢谢啦,问题解决。
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-21
在线时间
13 小时
 楼主| 发表于 2016-7-1 11:35:44 | 显示全部楼层
wangyan915205 发表于 2016-7-1 10:36
参考我的遥控播放器代码,可以遥控实现你的那些功能

请问 你的遥控播放器代码在哪里?
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-21
在线时间
13 小时
 楼主| 发表于 2016-7-1 11:36:05 | 显示全部楼层
365mcu 发表于 2016-7-1 09:57
应该有关闭的逻辑的啊,你用的这个标志还是暂停标志啊!关闭的思想是按键按下把没有播放的数据不发送且认为 ...

谢谢大哥,问题解决啦
回复 支持 反对

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-7-1 11:46:15 | 显示全部楼层
479220091 发表于 2016-7-1 11:36
谢谢大哥,问题解决啦

不用谢,是你自己搞出来的
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2016-7-1 22:28:20 | 显示全部楼层
479220091 发表于 2016-7-1 11:35
请问 你的遥控播放器代码在哪里?

在论坛搜素一下,我发错位置了。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 08:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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