51单片机 12864液晶显示温度

voidmain(){ucharbuff[3];init_com();Lcd_init();while(1){Ds_change();Get_temp();sprintf... void main()
{
uchar buff[3];
init_com();
Lcd_init();
while(1)
{
Ds_change();
Get_temp();
sprintf(buff,"%f",f_temp); //将浮点型温度格式化为字符型,需声明#include<stdio.h>
Delay(1000);
comm(buff); //串口发送数据
}
}
f_temp是浮点型。。。
现象是数组buff[4]的话,串口调试助手显示29.11,buff[3]的话串口调试助手 显示29.1,buff[2]的话显示29.,(29后面还有一个小数点),buff[1]的话显示29。。。buff[4]数组一共有4个元素,但是29.11是5个元素啊,以此类推buff[1]是一个元素,但是29是两个元素。。这是什么情况呢?
展开
 我来答
ATF144X
2013-09-16 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4596万
展开全部
buff[3]声明是3个字节,实际要留一个字节来保存0x00表示字符串的结束,所以你能用的只有2个字节。
所以要显示29.11那么,字符串时5个字节,但是要加上0x00的话就应该时6个字节,那应该声明buff[6]才对。
追问
您好,我还想追问一下:如果把buff[]设置成全局变量的话,那么串口调试助手上显示的小数点有6位,这是为什么啊?
追答
你用的%f参数,按照C的定义是显示到小数点后面6位,你要限制长度的话,就要使用更多的的参数,比如%.2f参数表示只取小数点后2位。
龙腾宵云
2013-09-16
知道答主
回答量:16
采纳率:0%
帮助的人:6.1万
展开全部
你这样容易导致错误的,也许现在测试是对的,当大工程的时候就导致系统奔溃,还是【5】甚至可以多给点。
你的问题是虽然你定义的空间不够,还是会在RAM下面跟着的地址中进行存放相关数据。
编译的时候应该出现了提醒
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哈啤猫
2013-09-16 · TA获得超过266个赞
知道小有建树答主
回答量:705
采纳率:60%
帮助的人:155万
展开全部
你看看你的comm() 函数是怎么写的···
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式