1. 程式人生 > >LCD浮點數顯示函式的探討

LCD浮點數顯示函式的探討

微控制器開放附贈的學習資料裡面很少見到顯示浮點數的函式,顯示浮點數的操作也相當煩墜!

一般轉換顯示法

拿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); //直接送字元顯示函式