MSP430 OELD只能显示小于65535的数

2019-07-15 15:13发布

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)
{                 
  u8 t,temp;
  u8 enshow=0;                                                   
  for(t=0;t<len;t++)
  {
    temp=(num/oled_pow(10,len-t-1))%10;//求出每一位的数字  从高到低
   
    if(enshow==0&&t<(len-1))           //首位不显示0
    {      
      if(temp==0)
      {
        OLED_ShowChar(x+(size/2)*t,y,' ');//size 字高  程序字体取用16*8
        continue;
      }
      else enshow=1;               
    }
  OLED_ShowChar(x+(size/2)*t,y,temp+'0'); //将0-9的数字转换为ACSII码值
  }
}
void OLED_ShowFloat(u8 x,u8 y,float num,u8 size)
{  
  u8 len=3;
  u8 t,temp,n=0;
  u8 enshow=0;
  //显示整数部分
  for(t=0;t<len;t++)
  {
    temp=((u32)num/oled_pow(10,len-t-1))%10;
    if(enshow==0&&t<(len-1))            
    {      
      if(temp==0)
      {
        //OLED_ShowChar(x+(size/2)*t,y,' ');
        continue;
        //结束单次循环
      }
      else enshow=1;               
    }
    n++;
    OLED_ShowChar(x+(size/2)*n,y,temp+'0');//将0-9的数字转换为ACSII码值
  }
  //显示小数部分
  num*=1000;
  num=(u32)num%1000;                      //取三位小数
  OLED_ShowChar(x+(size/2)*(n+1),y,'.');
  OLED_ShowChar(x+(size/2)*(n+2),y,((u32)num/100)+'0');
  OLED_ShowChar(x+(size/2)*(n+3),y,((u32)num%100/10)+'0');
  OLED_ShowChar(x+(size/2)*(n+4),y,((u32)num%10)+'0');
}
第一个是显示整数的函数,但是只能显示小于65535的数,觉得是单片机位数的原因,不知道是不是;第二个是显示浮点数的函数,存在的问题是只能显示小于65.354的数,超过这个数,小数部分就会显示错误。新手上路,请教大牛们!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
人中狼
2019-07-15 17:40
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)这里NUM虽然是32位,但是计算时计算的位数取决于LEN,这就要看你写入的参数LEN是多少了。
void OLED_ShowFloat(u8 x,u8 y,float num,u8 size)这里面
//显示小数部分
  num*=1000;
  num=(u32)num%1000;                      //取三位小数
这里已经写明了只计算三位小数

一周热门 更多>