野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26001|回复: 5

STM32液晶触摸和MP3的整合问题

[复制链接]
发表于 2013-11-11 15:29:47 | 显示全部楼层 |阅读模式
想自己做个基于STM32的液晶触摸MP3 ,整合了一下火哥光盘的例程,但是现在就是能控制音乐开始,不能控制音乐关闭和暂停,就是开始音乐后就进入播放的过程,不能再去读取别的动作标志位。不知道该怎么处理 了自己写的一点处理。
//通过触摸来决定是哪个功能                       
          if(touch_flag == 1)
                {
                        if(Get_touch_point(&display, Read_2046_2(), &touch_para ) !=DISABLE)
                        {
                                if((display.x>0&&display.x<239)&&(display.y>0&&display.y<80))
                           {
                                        LCD_Rectangle(0,0,40,40,WHITE);
                                        flag=1;
                                 }
                                if((display.x>0&&display.x<239)&&(display.y>80&&display.y<160))
                           {
                                        LCD_Rectangle(51,0,40,40,WHITE);
                                        flag1=1;
                                 }       
                                 
                                 if((display.x>0&&display.x<239)&&(display.y>160&&display.y<240))
                           {
                                        LCD_Rectangle(102,0,40,40,WHITE);
                                        flag2=1;
                                 }
                        }               
                }
                                       
                                       
                                       
                if(flag==1)
                                {        /* ------------------- 一曲开始 --------------------*/
                                        printf( " \r\n 开始播放 \r\n" );
                                        for (;;)
                                        {                       
                                                res = f_read( &fsrc, buffer, sizeof(buffer), &br );
                                                if ( res == 0 )
                                                {               
                                               
                                                       
                                                        count = 0;                                                                /* 512字节完重新计数 */
                                                       
                                                        Delay_us( 1000 );         /* 10ms 延时 */
                                                       
                                                        while ( count < 512)                  /* SD卡读取一个sector,一个sector为512字节 */       
                                                        {                                                
                                                                if ( DREQ != 0 )              /* 等待DREQ为高,请求数据输入 */
                                                                {
                                                                for (j=0; j<32; j++ ) /* VS1003的FIFO只有32个字节的缓冲 */
                                                                        {                                                                               
                                                                                VS1003_WriteByte( buffer[count] );                                                                               
                                                                                count++;
                                                                        }
                                                                }                                         
                                                        }
                                               
                                                }
                                                if (res || br == 0) break;   /* 出错或者到了MP3文件尾 */                  
                                        }
                                        printf( " \r\n 播放结束 \r\n" );
                                        /* ------------------- 一曲结束 --------------------*/
                                        count = 0;
                                        /* 根据VS1003的要求,在一曲结束后需发送2048个0来确保下一首的正常播放 */
                                        while ( count < 2048 )       
                                        {       
                                                if ( DREQ != 0 )
                                                {
                                                        for ( j=0; j<32; j++ )
                                                        {                                                                  
                                                                VS1003_WriteByte( 0 );                                                               
                                                                count++;
                                                        }
                                                }
                                        }
                                        count = 0;
                                        TXDCS_SET( 1 );   /* 关闭VS1003数据端口 */
                                        f_close(&fsrc);         /* 关闭打开的文件 */
                                }
                               
                        if(flag2==1)  break;





回复

使用道具 举报

 楼主| 发表于 2013-11-11 15:31:39 | 显示全部楼层
自己做个沙发,我这样子做  ,能通过触摸能控制音乐的开启,但是不知道怎么处理其他的一些标志位,让它可以暂停和关闭抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

发表于 2013-11-11 16:20:53 | 显示全部楼层
暂停 不要把正在播放的文件关闭,就停止把数据输出到vs1003即可。停止 把正在播放的文件关闭,同时停止把数据输出到vs1003
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-11 17:08:50 | 显示全部楼层
flyleaf 发表于 2013-11-11 16:20
暂停 不要把正在播放的文件关闭,就停止把数据输出到vs1003即可。停止 把正在播放的文件关闭,同时停止把数 ...

那请问下 我用了个子函数调用了下
void Function()
{
                if(touch_flag == 1)
                {
                        if(Get_touch_point(&display, Read_2046_2(), &touch_para ) !=DISABLE)
                        {
                                if((display.x>0&&display.x<239)&&(display.y>0&&display.y<80))
                           {
                                        LCD_Rectangle(0,0,40,40,WHITE);
                                        open=1;
                                 }
                                if((display.x>0&&display.x<239)&&(display.y>80&&display.y<160))
                           {
                                        LCD_Rectangle(51,0,40,40,WHITE);
                                        stop_pass=~stop_pass;                 //在使用时要消抖处理,1时stop 0时pass
                                 }       
                                 
                                 if((display.x>0&&display.x<239)&&(display.y>160&&display.y<240))
                           {
                                        LCD_Rectangle(102,0,40,40,WHITE);
                                        exIt=1;
                                 }
                        }               
                }
       
}

然后在主函数里使用   
while (1)
   {
      Function();
      MP3_Play();
    }
当我选择了 开始播放的时候,其他的触屏按键功能就没用了,请问我的Function();功能要放在什么地方检测?我嘴有点笨 感觉说了这么多还是有点不能明确表达我的关键疑问
回复 支持 反对

使用道具 举报

发表于 2013-11-11 20:44:15 | 显示全部楼层
直接放到检测touch_flag的中断里边检测(这样的话汇编文件里的栈空间要搞大一点),或者加在mp3_play函数里边的循环体中,播完一段就检测一次~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-12 15:13:30 | 显示全部楼层
随风 发表于 2013-11-11 20:44
直接放到检测touch_flag的中断里边检测(这样的话汇编文件里的栈空间要搞大一点),或者加在mp3_play函数里 ...

真的很感谢,看了你的提示我再回头看了下中断的那部分 ,发现一直理解错了,现在吧处理函数放到中断里面做了 刚烧了下看看 有效  谢谢!真棒!!非常感谢
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-1 09:26 , Processed in 0.032270 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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