单片机中的浮点数转换成串口可打印格式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
查看文章
Float2Char函数:将单片机中的浮点数转换成串口可打印格式
2010-07-15 13:48
unsigned char Float2Char(float value, unsigned char *array);
可用于单片机中将浮点数的各个位的数值转换成字符串,转换结果保存在字符数组里,然后通过串口发送至串口调试助手上显示。
实现方法是把浮点数的各位分别提取出来,保存成一个各元素都是ASCII码的数组。
参考网上的程序并做了修改。
/********************************************************
VC6.0中测试代码
*/
#include <stdio.h>
#define uint8 unsigned char
#define uint32 unsigned int
unsigned char Float2Char(float value, unsigned char *array);
void main()
{
float fvalue = 26.8977f;
uint8 len = 0;
uint8 array[20];
uint8 i;
len = Float2Char( fvalue, array );
for( i=0; i<len; i++)
{
printf("%c",array[i]);
}
printf("len = %d\n", len); //len = 7
}
// 函数名:unsigned char Float2Char(float Value,char *array)
// 描述:将浮点数的各个位的数值转换成字符串,通过串口发送至上位机显示// 参数:float Value为欲转换的正数浮点数值,转换结果保存在字符数组*array里
unsigned char Float2Char(float value, unsigned char *array)
{
uint8 IntegerPart;
float DecimalPart;
uint8 i = 0;
uint8 j = 0;
char temp;
//分离整数和小数
if(value >= 1)
{
IntegerPart = (uint8)value;
DecimalPart = value - IntegerPart; }
else
{
IntegerPart = 0;
DecimalPart = value - IntegerPart; }
//处理整数部分
if(IntegerPart == 0)
{
array[0] = '0';
array[1] = '.';
i = 1;
}
else
{
while(IntegerPart > 0)
{
array[i] = IntegerPart % 10 + '0'; IntegerPart /= 10;
i++;
}
i--;
//fix the result
for(j=0; j<i; j++)
{
temp = array[j];
array[j] = array[i - j];
array[i - j] = temp;
}
i++;
array[i] = '.';
}
//convert the Decimalpart
i++;
array[i++] = (uint32)(DecimalPart * 10)%10 + '0';
array[i++] = (uint32)(DecimalPart * 100)%10 + '0';
array[i++] = (uint32)(DecimalPart * 1000)%10 + '0';
array[i++] = (uint32)(DecimalPart * 10000)%10 + '0';
array[i] = '\0';
return i;
}
/*********************************************************/
/******************************************************
CC2430中测试代码,已通过
*/
float f_temp = 26.89984f;
uint8 len;
uint8 tarray[15];
len = Float2Char( f_temp, tarray);
HalUARTWrite( SPI_MGR_DEFAULT_PORT, tarray, 8 );
/*******************************************************
*/。