转自:http://m646208823.blog.163.com/blog/static/16690295320129231137835/
//x,y :起点坐标
//len :小数点后的位数
//size:字体大小,此处省略,默认1608字体
//color:颜色,此处仅保留前景色,可自行修改
//num:数值(0~4294967295);
void LCD_ShowNum(u16 x,u16 y,float num,u8 len,u16 color)
{
u8 t,k,temp;
u8 len1; //整数部分长度
u32 num1,num2,k2;
float Num_R;
Num_R=num;
num1=num;//取整数部分
len1=GetNumDig(num1); //获得num的整数位数
num2=(Num_R-num1)*mypow(10,len); // 10的len次方 //小数部分转长度为len的整数
for(t=0;t<len1;t++) //显示整数部分
{
temp=(num/mypow(10,len1-t-1))%10;
if(enshow==0&&t<(len1-1))
{
if(temp==0)
{
LCD_ShowChar(x+8*t,y,' ',color);//便于数字的对齐显示,可以去掉,因为数字长度len1确定,不会出现首位为0.若是确定的位数,则可以直接给len1赋值
continue; //进入下一个循环
}else enshow=1;
}
LCD_ShowChar(x+8*t,y,temp+'0',color);
}
LCD_ShowChar(x+8*len1,y,'.',color); //显示小数点
for(k=0;k<len;k++) //显示小数部分
{
temp=(num2/mypow(10,len-k-1))%10;
LCD_ShowChar(x+8*k,y,temp+'0',color);
}
}
//m^n函数
u32 mypow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}
//获取数字num的长度 函数
//num:数值(0~4294967295);
///方法1
u8 GetNumDig(u32 num)
{
u8 len=1;
for(len=1;len<12;len++)
{
if(num<10) return len;
num=num/10;
}
return len;
}
//方法2//
u8 GetNumDig(u32 num)
{
u8 len=0;
do
{
num=num/10;
len++;
}
while(num!=0);
return len;
}