您现在所在的是:

单片机论坛

回帖:10个,阅读:2014 [上一页] [1] [2] [下一页]
27947
guanyumou 版主
文章数:10552
年度积分:1130
历史总积分:27947
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2014/11/20 12:24:49
#0楼
如题
单片机读取一个32位的16进制数,符合IEEE754国际标准的四字节形式,我要想把它转换为10进制并放大100倍后,在数码管上显示!请问怎么操作?
比如我单片机读过来的数据是16进制:43FA0000,换算后实际是10进制浮点数500.00,我想放大100倍后用于在数码管显示,浮点数这块如何处理呢?
大师能给一个参考程序吗,尤其是浮点数处理这块!
[此贴子已经被作者于2014/11/20 14:30:46编辑过]
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219
1013
NUAAtyj
文章数:37
年度积分:50
历史总积分:1013
注册时间:2014/3/2
发站内信
发表于:2014/11/20 12:53:03
#1楼
按照你需要的精度可以把float 或者 double的浮点数乘以一个倍数如100 转换u32或者s32 变成了整数   方面处理 送去显示 至于16进制与10进制转换是显示部分需要考虑的 16进制转10的C语言程序很多 例如12864屏幕小数部分可以加小数点   IEEE-754格式标准底数只有23位精度
1254
hushunlin
文章数:106
年度积分:50
历史总积分:1254
注册时间:2014/9/26
发站内信
发表于:2014/11/20 13:16:40
#2楼
问题不是很清楚嘛,你是数据格式不好转换,还是说带有小数无法再数码管上显示呢
27947
guanyumou 版主
文章数:10552
年度积分:1130
历史总积分:27947
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2014/11/20 14:02:28
#3楼
以下是引用NUAAtyj2014/11/20 12:53:03的发言:
按照你需要的精度可以把float 或者 double的浮点数乘以一个倍数如100 转换u32或者s32 变成了整数   方面处理 送去显示 至于16进制与10进制转换是显示部分需要考虑的 16进制转10的C语言程序很多 例如12864屏幕小数部分可以加小数点   IEEE-754格式标准底数只有23位精度
有程序否?
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219
3356
svpama
文章数:469
年度积分:50
历史总积分:3356
注册时间:2007/3/20
发站内信
发表于:2014/12/13 13:06:21
#4楼
U8 buf[4] = {0x43,0xFA,0x00,0x00};

FP32 *p;

p = (FP32*)buf; //  通常这样就可以解决问题

*p = *p * 100; // 这样做不好,但只是为了理解
LED0 = (S32)(*p)%10;
LED1 = (S32)(*p)/10%10;
LED2 = (S32)(*p)/100%10;
LED3 = (S32)(*p)/1000%10;
[此贴子已经被作者于2014/12/13 13:09:57编辑过]
27947
guanyumou 版主
文章数:10552
年度积分:1130
历史总积分:27947
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2014/12/14 20:22:37
#5楼
以下是引用svpama2014/12/13 13:06:21的发言:
U8 buf[4] = {0x43,0xFA,0x00,0x00};

FP32 *p;

p = (FP32*)buf; //  通常这样就可以解决问题

*p = *p * 100; // 这样做不好,但只是为了理解
LED0 = (S32)(*p)%10;
LED1 = (S32)(*p)/10%10;
LED2 = (S32)(*p)/100%10;
LED3 = (S32)(*p)/1000%10;
[此贴子已经被作者于2014/12/13 13:09:57编辑过]

FP32这是 浮点数的定义吗?
S32是32位整数的定义吗?
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219
3356
svpama
文章数:469
年度积分:50
历史总积分:3356
注册时间:2007/3/20
发站内信
发表于:2014/12/15 18:36:34
#6楼
是的,FP32指浮点32位,S32指32位整形数。
不过有个问题,就是大小端不同的时候,需要把顺序调整好,如:
buf[0]的数放在buf[3]的位置,
buf[1]的数放在buf[2]的位置,
,,,
即倒过来,或者不同的单片机或编译器而异。
整理一下,这样可能会好理解:
U8 buf[4] = {0x43,0xFA,0x00,0x00};
FP32 *p;
FP32 f;
S32 n;

p = (FP32*)buf; //  通常这样就可以解决问题
f = *p;

f = f*100;

n = (S32)f;
LED0 = n%10;
LED1 = n/10%10;
LED2 = n/100%10;
LED3 = n/1000%10;
[此贴子已经被作者于2014/12/15 18:43:36编辑过]
27947
guanyumou 版主
文章数:10552
年度积分:1130
历史总积分:27947
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2014/12/16 12:31:02
#7楼
以下是引用svpama2014/12/15 18:36:34的发言:
是的,FP32指浮点32位,S32指32位整形数。
不过有个问题,就是大小端不同的时候,需要把顺序调整好,如:
buf[0]的数放在buf[3]的位置,
buf[1]的数放在buf[2]的位置,
,,,
即倒过来,或者不同的单片机或编译器而异。
整理一下,这样可能会好理解:
U8 buf[4] = {0x43,0xFA,0x00,0x00};
FP32 *p;
FP32 f;
S32 n;

p = (FP32*)buf; //  通常这样就可以解决问题
f = *p;

f = f*100;

n = (S32)f;
LED0 = n%10;
LED1 = n/10%10;
LED2 = n/100%10;
LED3 = n/1000%10;
[此贴子已经被作者于2014/12/15 18:43:36编辑过]
谢了!
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219
1994
steelen
文章数:345
年度积分:54
历史总积分:1994
注册时间:2001/6/23
发站内信
发表于:2015/2/9 17:57:43
#8楼
最好用sprintf()函数是正解
立志做客户可信赖可依赖的工控核心产品供应商
www.tengcon.com
27947
guanyumou 版主
文章数:10552
年度积分:1130
历史总积分:27947
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2015/2/11 22:44:55
#9楼
以下是引用steelen2015/2/9 17:57:43的发言:
最好用sprintf()函数是正解
我需要在数码管显示!
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004