用KEIL编C语言程序,51单片机,提取字符数据转化成十进制输出的数据不对,本人初学编程啊 5

这是整个程序的一个函数,调用到这个函数的时候出问题了,这个函数的功能是截取(用了jiequ()这个函数)两个字符,并将这个字符化成int整形,然后截取这个整形数据中的其中... 这是整个程序的一个函数,调用到这个函数的时候出问题了,这个函数的功能是截取(用了jiequ()这个函数)两个字符,并将这个字符化成int整形,然后截取这个整形数据中的其中几位,最后是将这个整形数据的十进制数赋给数组buf[]并最后显示在LCD在,但是为什么我显示的数,下面是我的程序
void MMSI()
{
uchar str[5],sign;
uchar buf[9];
uint i,j,mmsi;
str[5]=jiequ(2,4); //截取outsix[]数组里的第2,3,4,5四个个字符,将其赋给str[5]
sscanf(str, "%s", &mmsi); //只保留整型的第0到29位
mmsi=mmsi>>2&0x3fffffff; //将保留的整型数据化成十进制保存在buf[]里
sprintf(buf, "%d", mmsi);
while(1)
{
sign=scan();
if(sign==13) //按键扫描为13这个按键就停止执行这个程序
break;
lcd_pos(0,0);
j=0;
while(dis2[j]!='\0')
{
lcd_wdat(dis2[j]);
j++;
}
lcd_pos(2,0);
for(i=0;i<6;i++)
{
lcd_wdat(buf[i]); //显示buf[]里存的转化后的十进制数
delay(5);
}
}
}
展开
 我来答
百度网友954cd3c
2012-05-26
知道答主
回答量:10
采纳率:0%
帮助的人:9万
展开全部
你看看你的两个while是不是用错了,它们两个在一起用个总while,而它们两个的关系可以用if并列,试试看吧,
追问
好像不是的,因为第一个while是为了让下面的信息在LCD上一直显示而不是一闪就没有了,然后下面的while是让一行事先定义好的汉字在LCD上显示,他们两个不是冲突的啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2012-05-22 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1079万
展开全部
uint 能保存多少位的数据?
mmsi=mmsi>>2&0x3fffffff; 这不是超出了吗
更多追问追答
追问
我刚才把它设成 long行了,可是还是不对
追答
也许是你的思路还不太清晰,建议,先画流程图,再根据流程图写程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式