为了在OLED上显示小数,我在网上搜到了很多方法,但都不合我的心意,在此发表我对显示小数的一些看法和讲解,并且附上程序。(程序以示例原有基础上加以改变)
一、程序可以显示正负小数,并且只显示一位小数,如果自己想显示多下面给出了具体方法。
void OLED_ShowBNum(u8 x,u8 y,float num,u8 len,u8 size2)//len:带小数点、负号数据个数
{
u8 t,temp,i=0;
u8 enshow=0;
u16 k;
if(num<0)
{
num=-num;
i=1; //负数标志
}
k=num*10; //此处为显示一位小数*10转化为整数,若要显示几位就@我(自己想办法)
for(t=0;t<len;t++)
{
temp=(k/oled_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
if(((k/oled_pow(10,len-t-2)%10)!=0)&&(i==1))//判断是否为负数且在最高位前一位
{
OLED_ShowChar(x+(size2/2)*t,y,'-',size2);
i=0; //清除判断后一位的标志
}
else
OLED_ShowChar(x+(size2/2)*t,y,' ',size2); //如果没到数字就显示空格
continue;
}else enshow=1; //此处是判断是否要显示数字
}
if(t==len-1)
{
OLED_ShowChar(x+(size2/2)*t,y,'.',size2);
//判断是否为最后一位的前一位(显示一位小数)
t++;
}
OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); //一位一位显示下去
}
}
其实自己改显示多少位小数并不难,就改一下i,len-t-1那里就好,不行@我
|