使用STM32实现TFT LCD浮点数显示功能

方式一:通过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);    //显示整数部分

}

浮点数–“整数部分的数字数和小数部分的数字数”–计算函数,返回数字个数

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;
}

实现平台和效果显示

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32实现TFT LCD浮点数显示功能

发表回复