返回信息流小弟目前遇到一个问题请大牛解答
这个函数的大体意思是读取SD卡中.txt中的数据,并把数据一个个通过串口发送出去,通过按键可以控制要不要发送,其中参数m为txt的序号,Offset为txt文件中数据偏移量,PAUSE为按键暂停标志位,现在的问题是按键控制效果很不理想,有时暂停 有时不暂停,求问题分析!
void play_song(unsigned long m,unsigned long Offset)
{
if(!FAT32_Open_File(&FileInfo,"\\*.txt",m))//打开文件
{
while((FAT32_Read_File(&FileInfo,Offset,1,buf)==1) && PAUSE )//从偏移量处往后读取一个字符存在buf中(buf[0])
{
if(buf[0]=='w')//把字符’w'后的4位数据读出来存到buf_n中,并把4位字符转换成整形存到变量delayt中,将delayt作为延时参数
{
int j;
for(j=0;j<4;j++)//读取‘w'后4位存到buf_n中
{
FAT32_Read_File(&FileInfo,Offset+j,1,buf);
buf_n[j]=buf[0];
}
delayt=atoi(buf_n);//转换成int型
Offset+=4;//省略这4位
delay100us(delayt*1000);//延时sleep
//UART_Put_Num(delayt);
//UART_Send_Enter();
}
Offset++;
UART_Send_Byte(buf[0]);//串口发送
if(PAU==0) //按键操作
{
delay100us(100);
if(PAU==0)
{
Offset1=Offset;//获取当前偏移量
PAUSE=~PAUSE;//标志位置反
}
}
}
}
else
{
clear_area(0xff,0xff);
display_str(30,38,"CAN'T OPEN FILE",0,0);
}
}
按键操作函数中 这个按键的处理
if(PAU==0) //按键
{
delay100us(100);
if(PAU==0)
{
PAUSE=~PAUSE;//置反标志位
play_song(PlayIdex,Offset1);//从当前偏移量处继续发送
}
}
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #12038同步于 2012/4/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
单片机C语言编程问题, 跪求大牛指导!
Hbin
2012/4/12镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
消抖加了...~~~找不出问题啊.....头疼死了...
if(PAU==0) //按键
{
delay100us(100);//消抖。。。。。
if(PAU==0)
{
PAUSE=~PAUSE;//置反标志位
play_song(PlayIdex,Offset1);//从当前偏移量处继续发送
}
}
【 在 king007 的大作中提到: 】
: 按键消抖没有?
你的按键是GPIO吗?用的中断方式吗? 如果你的程序泡在play_song里面判断PAU处,你中
断处理程序和play_song就有冲突.
你这个程序写得逻辑有点乱.程序出问题,先确定是不是硬件问题或者键值获取问题,比如
GPIO按键有过冲问题,你这里delay了100us,效果不知道行不行,一般按键都delay 20ms的
.
然后就是全局变量的问题,要谨慎仔细地使用全局变量.【 在 Hbin (Hbin) 的大作中提到: 】
: 小弟目前遇到一个问题请大牛解答
: 这个函数的大体意思是读取SD卡中.txt中的数据,并把数据一个个通过串口发送出去,通过按键可以控制要不要发送,其中参数m为txt的序号,Offset为txt文件中数据偏移量,PAUSE为按键暂停标志位,现在的问题是按键控制效果很不理想,有时暂停 有时不暂停,求问题分析!
: void play_song(unsigned long m,unsigned long Offset)
: ...................
多谢,没有用中断方式,我也感觉有点乱,我再想想,谢谢!!
【 在 ArmStrong 的大作中提到: 】
: 你的按键是GPIO吗?用的中断方式吗? 如果你的程序泡在play_song里面判断PAU处,你中
: 断处理程序和play_song就有冲突.
: 你这个程序写得逻辑有点乱.程序出问题,先确定是不是硬件问题或者键值获取问题,比如
: ...................