OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4770|回复: 7

关于例程中的LCD显示浮点数

[复制链接]

15

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2014-2-17
在线时间
39 小时
发表于 2016-6-20 00:52:58 | 显示全部楼层 |阅读模式
5金钱
原子哥在么?实验十三,LCD的例子中怎么显示浮点数呢?u16 XX;

如果我要显示这样的
“此时的温度值为YY度”,其中,YY是浮点变量,YY=XX/100。或者不用汉子,用英文“ the  temperate is YY ℃”,YY是浮点变量,YY=XX/100。

我该定义YY为什么类型的变量?然后,LCD的数字显示,我尝试了,void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);这个函数只能显示整数,怎么让其显示

最佳答案

查看完整内容[请看2#楼]

先把要显示的浮点数变成字符串, 再直接显示字符串就行了 /******************************************************************************************** 函数名:浮点数转化为字符串函数 调 用:CX_printf(*str, float Fdat,u8 Hc,u8 Fl); 参 数:*str 字符串转换后保存的首地址 Fdat:数值(+-0.0005~999999.9999); Hc:整数长度(即要显示的位数) Fl:小数长度(即要显示的位数) 返回值:转换结果保 ...
花自飘零水自流,生命不息,奋斗不止
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-6-20 00:52:59 | 显示全部楼层
本帖最后由 likunxue 于 2016-6-20 01:16 编辑

先把要显示的浮点数变成字符串, 再直接显示字符串就行了
/********************************************************************************************
函数名:浮点数转化为字符串函数
调  用:CX_printf(*str, float Fdat,u8 Hc,u8 Fl);
参  数:*str 字符串转换后保存的首地址
        Fdat:数值(+-0.0005~999999.9999);         
        Hc:整数长度(即要显示的位数)
        Fl:小数长度(即要显示的位数)
返回值:转换结果保存 字符串指针所指向的地址中
********************************************************************************************/
void CX_printf(u8 *str, float Fdat,u8 Hc,u8 Fl)
     {  
     u32 const Pow[]={1,10,100,1000,10000,100000,10000000,100000000,1000000000};
     u32 Dat1, Dat2;
     u8 i,tem,at;
     if(Fdat < 0){Fdat = -Fdat;        *str ='-'; str ++; }
     if(Hc>8)Hc=8; //限制整数部份最多8个位
     if(Fl>4)Fl=4; //限制小数部份最多4个位的精度
     Dat1 = Fdat;  //取整数部份
     Dat2 = (Fdat-Dat1) * Pow[Fl];//取小数部份并将其转换为整数
     i = ((Fdat-Dat1)*Pow[Fl+1])- Dat2 *10; //四舍五入处理
     if(i>=5)
       {
       Dat2 += 1;
       if(Dat2 ==Pow[Fl]){Dat2 =0;Dat1 += 1;}
       }
     at = 0; //清标志位
     for(i=0;i<Hc;i++)        //处理整数部份
        {
        tem = (Dat1/Pow[Hc-i-1])%10; //取得当前位数字
        if(tem == 0){if(at != 0){*str = 0x30; str ++;}}
        else{
            at = 0xff; //置标位位
            *str = tem + 0x30;
            str ++;
            }
        }
     if(at == 0){*str = 0x30; str ++;}  //如果整数部份为零则补零
     *str = '.'; //写入小数点
     str ++;
     for(i=0;i<Fl;i++)          //处理小数部份
        {
        tem = (Dat2/Pow[Fl-i-1])%10; //取得当前位数字
        *str = tem + 0x30;
        str ++;
        }
     *str = '\0' ; //装入结束符号
     }

回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12541
金钱
12541
注册时间
2015-11-5
在线时间
2146 小时
发表于 2016-6-20 08:53:51 | 显示全部楼层
阿弥陀佛。。。
回复

使用道具 举报

15

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2014-2-17
在线时间
39 小时
 楼主| 发表于 2016-6-20 10:33:20 | 显示全部楼层
likunxue 发表于 2016-6-20 01:14
先把要显示的浮点数变成字符串, 再直接显示字符串就行了
/********************************************* ...

谢谢,知道你的意思了,我待会尝试下,你这个解决了浮点数显示的问题。
花自飘零水自流,生命不息,奋斗不止
回复

使用道具 举报

15

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2014-2-17
在线时间
39 小时
 楼主| 发表于 2016-6-20 17:16:34 | 显示全部楼层
开荤的唐僧 发表于 2016-6-20 10:33
谢谢,知道你的意思了,我待会尝试下,你这个解决了浮点数显示的问题。

测试过了,效果还不错
花自飘零水自流,生命不息,奋斗不止
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-7-29
在线时间
16 小时
发表于 2017-8-5 14:07:03 | 显示全部楼层
likunxue 发表于 2016-6-20 00:52
先把要显示的浮点数变成字符串, 再直接显示字符串就行了
/********************************************* ...

我如果想显示浮点数567.899,在主函数应该怎样写,望指教,谢谢
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-7-29
在线时间
16 小时
发表于 2017-8-5 14:12:46 | 显示全部楼层
开荤的唐僧 发表于 2016-6-20 17:16
测试过了,效果还不错

我如果想显示浮点数567.899,在主函数应该怎样写,望指教,谢谢
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2019-1-18
在线时间
14 小时
发表于 2019-2-15 14:03:18 | 显示全部楼层
likunxue 发表于 2016-6-20 00:52
先把要显示的浮点数变成字符串, 再直接显示字符串就行了
/********************************************* ...

感谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 20:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表