例程里没有LCD显示浮点数,我调试了一下午,把结果分享给大家参考,硬件是2013款板子根据例程void LCD_Num_6x12_O(u16 x,u16 y,u32 num, u16 Color) 改的。刚开始学,代码写的比较粗糙,不要见笑。
/******************************************************
* 函数名:LCD_FloatNum_6x12_O
* 描述 :在指定坐标处悬浮显示6*12大小的浮点数字
* 输入 : -x 显示位置横向坐标 0 ~ 319
-y 显示位置纵向坐标 0 ~ 239
-num 需要显示的数字
-weishu需要显示的小数位数
-Color 数字颜色
* 输出 :无
* 举例 : LCD_Num_6x12_O(200, 100, 6666.6666,2, BLACK);
* 注意 : 显示方向为横向
*********************************************************/
void LCD_FloatNum_6x12_O(u16 x,u16 y,float num, u8 weishu, u16 Color) //显示浮点数,超出显示有效数字的小数位直接去掉,没有四舍五入
{
u32 res=(int)(num*pow(10,weishu)); //^是异或不是次方
u32 res1=(int)(num*pow(10,weishu));
u8 t=0;
u8 w=weishu;
u8 z=0;
Set_direction(0);
if( res ==0 )
{
LCD_Char_6x12_O(x, y, '0',Color);
return;
}
while( res ) /*得到数字长度t*/
{
res/=10;
t++;
}
//计算整数部分的个数z,总个数字长度t不包括小数点
if (t==w)//整数部分为零,而且小数点后第一位不是零时
{
z=1;
t=t+1;
}
else if (t<w)//整数部分为零,而且小数点后第一位是零时
{
z=1;
t=t+2;
}
else//整数部分不为零
{
z=t-w;
}
t=t+1;//总数字长度再加上小数点.的一位
while(w)//显示小数部分
{
LCD_Char_6x12_O(x+(6*(t--)-6), y, (res1%10)+'0',Color);
res1 /= 10 ;
w=w-1;
}
//显示小数点
LCD_Char_6x12_O(x+(6*(t--)-6), y,'.',Color);
t=t-1;
//显示整数部分
while(z)
{
LCD_Char_6x12_O(x+6+(6*(t--)-6), y, (res1%10)+'0',Color);
res1 /= 10 ;
z=z-1;
}
} |