LCD浮点数显示函数的探讨

Posted Coder_C

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LCD浮点数显示函数的探讨相关的知识,希望对你有一定的参考价值。

LCD浮点数显示函数的探讨
原创 2017年12月19日

单片机开放附赠的学习资料里面很少见到显示浮点数的函数,显示浮点数的操作也相当烦坠!

一般转换显示法

拿STM32单片机资源,我们选取ADC采样部分函数来看显示过程

        adcx=Get_Adc_Average(ADC_Channel_5,20);
        LCD_ShowxNum(134,130,adcx,4,16,0);   
        temp=(float)adcx*(3.3/4096);          
        adcx=temp;                          
        LCD_ShowxNum(134,150,adcx,1,16,0);    
        temp-=adcx;                         
        temp*=1000;                           
        LCD_ShowxNum(150,150,temp,3,16,0X80); 
        LED0=!LED0;
        delay_ms(250);  



分别取出整数部分和小数部分,分别显示出来

调整改进

void OLED_ShowFloatNum(u8 x,u8 y,double num,u8 len,u8 size)
{ 
    u32 interger=(u32)num;
    u32 fractional=(u32)((num-interger)*1000);
    u32 x_tmp;
    if(num<0)
    {
        OLED_ShowString(x,y,"Minus!",16);
    }       
    else
    {
        if(interger>=100)
        {
                x_tmp=x;
                OLED_ShowNum(x,y,interger,3,size);
        }
        else if(interger>=10&&interger<=99)
        {
            x_tmp=x-8;
            OLED_ShowNum(x,y,interger,2,size);
        }
        else if(interger>=1&&interger<=9)
        {
            x_tmp=x-16;
            OLED_ShowNum(x,y,interger,1,size);
        }
        else
        {
            x_tmp=x-16;
            OLED_ShowNum(x,y,0,1,size);
        }

        OLED_ShowChar(x_tmp+24,y,.,size,1);

        if(fractional>=100)
            OLED_ShowNum(x_tmp+32,y,fractional,3,size);
        else if(fractional>=10&&fractional<=99)
        {
            OLED_ShowNum(x_tmp+40,y,fractional,2,size);
            OLED_ShowChar(x_tmp+32,y,0,size,1);
        }
        else if(fractional>=1&&fractional<=9)
        {
            OLED_ShowNum(x_tmp+48,y,fractional,1,size);
            OLED_ShowChar(x_tmp+40,y,0,size,1);
            OLED_ShowChar(x_tmp+32,y,0,size,1);   
        }
        else
        {
            OLED_ShowChar(x_tmp+32,y,0,size,1);
            OLED_ShowChar(x_tmp+40,y,0,size,1);
            OLED_ShowChar(x_tmp+48,y,0,size,1);
        }
    }
} 



另一种直接调用c语言函数sprintf

定义buffer,这里注意添加头文件#include“stdio.h”

 adcx=Get_Adc_Average(ADC_Channel_0,10);
 temp=(float)adcx*(3.3/4096);
 sprintf(buffer,"%5.2f",temp);//浮点型数据转为指定格式的字符串
 LCD_ShowString(152,150,200,16,16,buffer); //直接送字符显示函数

 

以上是关于LCD浮点数显示函数的探讨的主要内容,如果未能解决你的问题,请参考以下文章

51单片机编程sprintf怎么用?

LPC2138串口屏幕显示的横竖屏切换问题

lcd1602显示17个字母

python使用np.linspace函数生成均匀的浮点数列表实战:生成浮点数列表生成浮点数列表(指定是否包含末尾值)

proteus仿真里面lcd44显示屏如何进行三行显示,甚至四行更多?谢谢!

C/C++ 数据类型 表示最大 最小数值 探讨