//x,y :起点坐标 //len :小数点后的位数 //size:字体大小 //color:颜色 //num:数值(0~4294967295); #define PRECISION 0.00001 void LCD_ShowNum(u16 x,u16 y,float num1,u8 len,u8 size,u16 bak_color,u16 color) { u8 t,k,temp,flag=0; u8 enshow=0,len1; u32 num,num2; float Num_R; if(num1-0.0<PRECISION) { // num1=abc(num1); 整形取绝对值 num1=fabs(num1); flag=1; } Num_R=num1; num=num1; len1=GetNumDig(num); num=num1; num2=(Num_R-num)*mypow(10,len); if(flag==1) { LCD_ShowChar(x,y,'-',size,0,bak_color,color); //显示负号 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+(size/2)*t,y,' ',size,0,bak_color,color); continue; }else enshow=1; } LCD_ShowChar(x+8+(size/2)*t,y,temp+'0',size,0,bak_color,color); } LCD_ShowChar(x+8+(size/2)*len1,y,'.',size,0,bak_color,color); //显示小数点 for(k=len1+1;k<len1+1+len;k++) //显示小数部分 { temp=(num2/mypow(10,len-k-1+len1+1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { LCD_ShowChar(x+8+(size/2)*(len1+1),y,' ',size,0,bak_color,color); continue; }else enshow=1; } LCD_ShowChar(x+8+(size/2)*k,y,temp+'0',size,0,bak_color,color); } } else { 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+(size/2)*t,y,' ',size,0,bak_color,color); continue; }else enshow=1; } LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0,bak_color,color); } LCD_ShowChar(x+(size/2)*len1,y,'.',size,0,bak_color,color); //显示小数点 for(k=len1+1;k<len1+1+len;k++) //显示小数部分 { temp=(num2/mypow(10,len-k-1+len1+1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { LCD_ShowChar(x+(size/2)*(len1+1),y,' ',size,0,bak_color,color); continue; }else enshow=1; } LCD_ShowChar(x+(size/2)*k,y,temp+'0',size,0,bak_color,color); } } } //仅以备份