BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #12038同步于 2012/4/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

单片机C语言编程问题, 跪求大牛指导!

Hbin
2012/4/12镜像同步5 回复
小弟目前遇到一个问题请大牛解答 这个函数的大体意思是读取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);//从当前偏移量处继续发送 } }
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
Hbin机器人#1 · 2012/4/12
急求问题分析,小弟感激涕零!!!
king007机器人#2 · 2012/4/13
按键消抖没有?
Hbin机器人#3 · 2012/4/13
消抖加了...~~~找不出问题啊.....头疼死了... if(PAU==0) //按键 { delay100us(100);//消抖。。。。。 if(PAU==0) { PAUSE=~PAUSE;//置反标志位 play_song(PlayIdex,Offset1);//从当前偏移量处继续发送 } } 【 在 king007 的大作中提到: 】 : 按键消抖没有?
ArmStrong机器人#4 · 2012/4/14
你的按键是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) : ...................
Hbin机器人#5 · 2012/4/15
多谢,没有用中断方式,我也感觉有点乱,我再想想,谢谢!! 【 在 ArmStrong 的大作中提到: 】 : 你的按键是GPIO吗?用的中断方式吗? 如果你的程序泡在play_song里面判断PAU处,你中 : 断处理程序和play_song就有冲突. : 你这个程序写得逻辑有点乱.程序出问题,先确定是不是硬件问题或者键值获取问题,比如 : ...................