LCD浮点数显示函数的探讨

来源:互联网 发布:extjs4 获取grid数据 编辑:程序博客网 时间:2024/06/05 04:51

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

一般转换显示法

拿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); //直接送字符显示函数
原创粉丝点击