我单纯的给一个浮点型的变量,然后按ADC例子里改了一个显示多位小数的函数,结果显示出来的数字跟我给的数字竟然不一样。。请教下问题出在哪,代码如下[mw_shl_code=c,true] float m;
int k;
extern float Unit_Price;
Unit_Price = 12.53;
LCD_Show_Font(30,70,9);
LCD_Show_Font(65,70,10);
LCD_Show_Font(102,70,8);
LCD_ShowString(120,70,200,40,40,"000.00");
LCD_Show_Font(240,70,11);
LCD_ShowString(275,70,200,24,24,"/KG");
m = Unit_Price;
k = m;
LCD_ShowxNum(120,70,k,3,40,0);
m -= k;
m *= 1000;
LCD_ShowxNum(200,70,m,2,40,0X80);[/mw_shl_code]
我自己取膜取了一个40*40的ASCII码的字库
[mw_shl_code=c,true]void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/LCD_Pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
if(mode&0X80)LCD_ShowChar(x+(size/2)*t,y,'0',size,mode&0X01);
else LCD_ShowChar(x+(size/2)*t,y,' ',size,mode&0X01);
continue;
}else enshow=1;
}
LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01);
}
} [/mw_shl_code]
这是显示数字的函数
[mw_shl_code=c,true]void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
u8 temp,t1,t;
u16 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2);
num=num-' ';
for(t=0;t<csize;t++)
{
if(size==12)temp=asc2_1206[num][t];
else if(size==16)temp=asc2_1608[num][t];
else if(size==24)temp=asc2_2412[num][t];
else if(size==40)temp=asc2_4040[num][t];
else return;
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
temp<<=1;
y++;
if(y>=lcddev.height)return;
if((y-y0)==size)
{
y=y0;
x++;
if(x>=lcddev.width)return;
break;
}
}
}
} [/mw_shl_code]
showchar函数,我只加了一句选择我的那个字库
我也试过用例程里的字库,显示也是错的,比如说我现在写的变量是12.53,显示出来的就是12.29,一头雾水啊。。
|