//============================================================
//函数名称 :Turn_Float_to_str
//函数功能 :将浮点型数据转换成字符串数组输出给串口调试助手
//输入变量 :要转化的数据date 。
//返 回 值 :字符串的数组str[]
//============================================================
void Turn_Float_to_str(float date)
{
u8 len1,len2,i;//len1是整数部分的位数,len2是小数部分的位数
//【!】字符串类型的数据定义的时候需要初始化,发送完成之后需要复位,因为
u8 str1[5],str2[5],str[10];//str1[],str2[5]分别存放整数部分 小数部分的每一位数字(肯定是从个位开始倒序存的)str[10]把他们正过来再添加小数点
u16 zhengshu,xiaoshu;
u16 a1;//a1做中间变量,防止提取整数部分时zhengshu的值改变 影响下面xiaoshu计算,
//test by zzz 20201101【!】
//经测试,若使用强制数据类型转换在某些情况下会出现数据异常,但是问题并没能复现,所以将代码改了回来,如果后续测试出现问题可以考虑修改此处,下面小数部分同
zhengshu=(u16)date;//把浮点数的整数部分提取出来
a1=zhengshu;
len1=number_figure(zhengshu);//调用函数number_figure()计算整数部分的长度
//把整数部分每位提取出来
//如果整数部分是零
if(len1==0)
{
str[0]=0x30;
len1=1;
}
else
{
for(i=0;i<len1;i++)
{
str1[i]=(u8)(a1%10);
a1 /=10;
str[len1-1-i]=str1[i]+0x30;//十进制数与其对应的字符他们的ASCLL码相差0x30
}
}
xiaoshu=(u16)((date-zhengshu)*100);//保留两位小数
len2=number_figure(xiaoshu);
for(i=0;i<len2;i++)
{
str2[i]=(u8)(xiaoshu%10);
xiaoshu /=10;
str[len1+len2-i]=str2[i]+0x30;
}
str[len1]=0x2E;
sendArry(USART2,str,(len1+len2+1));
a1 = 0;
}
如果要通过串口调试助手显示浮点型数据,就要把浮点型数据每一位对应的ASCLL码发送给串口。
具体程序如下:
|