- 打卡等级:以坛为家I
- 打卡总天数:320
- 最近打卡:2025-05-02 21:03:38
金牌会员
- 积分
- 1146
|
买了一个OLED屏,里面有一个小数显示函数,我调用后,发现经常显示的数比实际小0.01
用USB串口跟踪,0.01到0.09显示和实际一样,但0.10、0.11、0.12显示就要小0.01,0.13又显示正常为0.13,百思不得其解是什么原因?
各位大神有知道是什么原因导致的吗?
IC是8H8K64U
显示函数如下:
//显示2个数字
//x,y :起点坐标
//num1:要显示的小数
//len :数字的位数
void OLED_ShowNum(u8 x,u8 y,float num1,u8 len)
{
u8 i;
u32 t,num;
x=x+len*8+8;//要显示的小数最低位的横坐标
num=num1*100;//将小数左移两位并转化为整数
OLED_Display_GB2312_string(x-24,y,".");//显示小数点
for(i=0;i<len;i++)
{
t=num%10;//取个位数的数值
num=num/10;//将整数右移一位
x-=8;
if(i==2){x-=8;}//当显示出来两个小数之后,空出小数点的位置
switch(t)
{
case 0 :OLED_Display_GB2312_string(x,y,"0");break;
case 1 :OLED_Display_GB2312_string(x,y,"1");break;
case 2 :OLED_Display_GB2312_string(x,y,"2");break;
case 3 :OLED_Display_GB2312_string(x,y,"3");break;
case 4 :OLED_Display_GB2312_string(x,y,"4");break;
case 5 :OLED_Display_GB2312_string(x,y,"5");break;
case 6 :OLED_Display_GB2312_string(x,y,"6");break;
case 7 :OLED_Display_GB2312_string(x,y,"7");break;
case 8 :OLED_Display_GB2312_string(x,y,"8");break;
case 9 :OLED_Display_GB2312_string(x,y,"9");break;
}
}
}
显示脚本:
t+=0.01;
r+=1;
printf("输出t和r:%f-%d",t,r);
OLED_ShowNum(0,0,t,5);//显示小数
OLED_ShowInt(0,2,r,5);//显示整数
OLED_ShowNum(0,4,t,3);//显示小数
OLED_ShowInt(0,6,r,3);//显示整数
跟踪照片如下:
|
|