打印

LCD显示浮点数的程序

[复制链接]
467|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丑帅丑帅的|  楼主 | 2018-7-4 08:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例程里没有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;
  }

}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

741

主题

742

帖子

0

粉丝