单片机开放附赠的学习资料里面很少见到显示浮点数的函数,显示浮点数的操作也相当烦坠!
一般转换显示法
拿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); //直接送字符显示函数
上一篇:关于STM32精准采频率的实现
下一篇:STM32F4四路ADC采样问题探讨
推荐阅读最新更新时间:2024-03-16 16:25