LCD浮點數顯示函式的探討
阿新 • • 發佈:2019-01-08
微控制器開放附贈的學習資料裡面很少見到顯示浮點數的函式,顯示浮點數的操作也相當煩墜!
一般轉換顯示法
拿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); //直接送字元顯示函式