- //============================================================
- //函数名称 :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码发送给串口。
具体程序如下:
|