方式一:通过sprintf将小数转换成字符串,通过字符串显示函数LCD_ShowString()显示
/*
* @param x,y 起点坐标
* @param num 需要显示的浮点数,数字范围(0.0~4294967295.0)
* @param float_n 需要显示的小数点后位数
* @param size 字体大小(支持16/24/32号字体)
*/
void LCD_ShowFloatNum_Sprintf(u16 x, u16 y,float num,u8 float_n,u8 size)
{
uint32_t mi_temp=1;
uint32_t zhengshu=0;
uint32_t xiaoshu=0;
uint8_t zhengshu_counter=0;
uint8_t xiaoshu_counter=0;
for (int var = 0; var < float_n; ++var)
{
mi_temp=10*mi_temp;
}
zhengshu=(uint32_t)num;//整数计算
xiaoshu=(uint32_t)((num-zhengshu)*mi_temp);//小数部分转整数计算
zhengshu_counter=Calc_IntNum(zhengshu);
xiaoshu_counter=Calc_IntNum(xiaoshu);
uint8_t str_len=zhengshu_counter+xiaoshu_counter+1;
char Str_Data [str_len]; // destination string
//uint16_t dec_part,float_part;
//dec_part = (uint16_t) num * 10; //整数部分:3位小数*1000
//float_part = (num*10)-dec_part; //小数部分
sprintf (Str_Data, "%ld.%ld",zhengshu,xiaoshu); // Decimal precision: 3 digits
LCD_ShowString( x, y, str_len*size/2, size, size, Str_Data);
// u16 width, u16 height,
}
方式二:计算出浮点数整数部分、小数部分、整数部分的数字数和小数部分的数字数,通过数字显示函数LCD_ShowNum()和LCD_ShowChar(仅数点)显示,三部分拼接而成
/*
* @param x,y 起点坐标
* @param num 需要显示的浮点数,数字范围(0.0~4294967295.0)
* @param float_n 需要显示的小数点后位数
* @param size 字体大小(支持16/24/32号字体)
*/
void LCD_ShowFloatNum(u16 x, u16 y,float num,u8 float_n,u8 size)
{
uint32_t mi_temp=1;
uint32_t zhengshu=0;
uint32_t xiaoshu=0;
uint8_t zhengshu_counter=0;
uint8_t xiaoshu_counter=0;
for (int var = 0; var < float_n; ++var)
{
mi_temp=10*mi_temp;
}
zhengshu=(uint32_t)num;//整数计算
xiaoshu=(uint32_t)((num-zhengshu)*mi_temp);//小数部分转整数计算
zhengshu_counter=Calc_IntNum(zhengshu);
xiaoshu_counter=Calc_IntNum(xiaoshu);
LCD_ShowNum(x, y, zhengshu, zhengshu_counter, size); //显示整数部分
LCD_ShowChar((x+size*zhengshu_counter/2), y, '.', size); //显示小数点
LCD_ShowNum((x+size*zhengshu_counter/2+size/2), y, xiaoshu, float_n, size); //显示整数部分
}
浮点数--“整数部分的数字数和小数部分的数字数”--计算函数,返回数字个数文章来源:https://www.toymoban.com/news/detail-599389.html
uint8_t Calc_IntNum(uint64_t calc_num)
{
uint8_t Counter=0;
uint16_t num2=calc_num;
float num_temp=(float)num2/10;
for (int var = 0; var < 1000; ++var)
{
if (num_temp*10>=1)
{
num_temp=num_temp/10;
Counter++;
}
else
{
break;
}
}
return Counter;
}
实现平台和效果显示文章来源地址https://www.toymoban.com/news/detail-599389.html
到了这里,关于STM32实现TFT LCD浮点数显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!