找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2093|回复: 3
收起左侧

单片机温度转换的算法有一行代码始终想不明白

[复制链接]
ID:189772 发表于 2018-3-28 21:52 | 显示全部楼层 |阅读模式
看到一位大侠的贴子,地址如下:
摘要部分如下,
unsigned chardis[]={0x00,0x00,0x00,0x00,0x00,0x00};//显示数据
unsigned char TemL;
unsigned char TemLH;
unsigned char TemLL;
unsigned char TemH;
unsigned long Tem;
bit TempS;

TemL=r_18b20();    //低字节
TemH=r_18b20();   //高字节

TemLH=TemL>>4; 低字节的4位整数
TemLL=TemL&0x0F; 低字节的4位小数
Tem=(TemH*16 + TemLH + TemLL*0.0625)*10000;

TemH*16相当于TemH右移4位,高字节的4位有效的整数位,

Tem=(TemH*16 + TemLH + TemLL*0.0625)*10000;这一句始终想不明白,为什么只有小数部分乘以0。0625?




回复

使用道具 举报

ID:189772 发表于 2018-3-29 07:39 | 显示全部楼层
求大神解答呀,高分悬赏
回复

使用道具 举报

ID:164602 发表于 2018-3-29 08:24 | 显示全部楼层
“不要迷信哥,哥只是个传说”
你发现得对啥,我认为那个就是错的。
虽然那个实验显示了东西,但不一定是正确的湿度嘛。
这里有个正确的,你看看。

                temp=tp*0.0625*100+0.5;       
                //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
                //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
                //算加上0.5,还是在小数点后面。

想得通了哈。
回复

使用道具 举报

ID:189772 发表于 2018-3-29 19:59 | 显示全部楼层
2的负4次方正好是0.0625,所以,小数部分部分乘以0。0625是正确的,只是程序处理方面,我还没有完全弄明白,不管如何,谢谢你
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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