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是两个元素。。这是什么情况呢? 展开
{
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是两个元素。。这是什么情况呢? 展开
3个回答
展开全部
buff[3]声明是3个字节,实际要留一个字节来保存0x00表示字符串的结束,所以你能用的只有2个字节。
所以要显示29.11那么,字符串时5个字节,但是要加上0x00的话就应该时6个字节,那应该声明buff[6]才对。
所以要显示29.11那么,字符串时5个字节,但是要加上0x00的话就应该时6个字节,那应该声明buff[6]才对。
追问
您好,我还想追问一下:如果把buff[]设置成全局变量的话,那么串口调试助手上显示的小数点有6位,这是为什么啊?
追答
你用的%f参数,按照C的定义是显示到小数点后面6位,你要限制长度的话,就要使用更多的的参数,比如%.2f参数表示只取小数点后2位。
展开全部
你这样容易导致错误的,也许现在测试是对的,当大工程的时候就导致系统奔溃,还是【5】甚至可以多给点。
你的问题是虽然你定义的空间不够,还是会在RAM下面跟着的地址中进行存放相关数据。
编译的时候应该出现了提醒
你的问题是虽然你定义的空间不够,还是会在RAM下面跟着的地址中进行存放相关数据。
编译的时候应该出现了提醒
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看看你的comm() 函数是怎么写的···
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询