void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;//求出每一位的数字 从高到低
if(enshow==0&&t<(len-1)) //首位不显示0
{
if(temp==0)
{
OLED_ShowChar(x+(size/2)*t,y,' ');//size 字高 程序字体取用16*8
con
tinue;
}
else enshow=1;
}
OLED_ShowChar(x+(size/2)*t,y,temp+'0'); //将0-9的数字转换为ACSII码值
}
}
void OLED_ShowFloat(u8 x,u8 y,float num,u8 size)
{
u8 len=3;
u8 t,temp,n=0;
u8 enshow=0;
//显示整数部分
for(t=0;t<len;t++)
{
temp=((u32)num/oled_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
//OLED_ShowChar(x+(size/2)*t,y,' ');
continue;
//结束单次循环
}
else enshow=1;
}
n++;
OLED_ShowChar(x+(size/2)*n,y,temp+'0');//将0-9的数字转换为ACSII码值
}
//显示小数部分
num*=1000;
num=(u32)num%1000; //取三位小数
OLED_ShowChar(x+(size/2)*(n+1),y,'.');
OLED_ShowChar(x+(size/2)*(n+2),y,((u32)num/100)+'0');
OLED_ShowChar(x+(size/2)*(n+3),y,((u32)num%100/10)+'0');
OLED_ShowChar(x+(size/2)*(n+4),y,((u32)num%10)+'0');
}
第一个是显示整数的函数,但是只能显示小于65535的数,觉得是
单片机位数的原因,不知道是不是;第二个是显示浮点数的函数,存在的问题是只能显示小于65.354的数,超过这个数,小数部分就会显示错误。新手上路,请教大牛们!
void OLED_ShowFloat(u8 x,u8 y,float num,u8 size)这里面
//显示小数部分
num*=1000;
num=(u32)num%1000; //取三位小数
这里已经写明了只计算三位小数
一周热门 更多>