找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2239|回复: 9
打印 上一主题 下一主题
收起左侧

关于一段ds18b20单片机程序的理解

[复制链接]
跳转到指定楼层
楼主
ID:100982 发表于 2022-10-10 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. if (res) //读取成功时,刷新当前温度显示
  2. {
  3. intT = temp >> 4; //分离出温度值整数部分
  4. decT = temp & 0xF; //分离出温度值小数部分
  5. len = IntToString(str, intT); //整数部分转换为字符串
  6. str[len++] = '.'; //添加小数点
  7. decT = (decT*10) / 16; //二进制的小数部分转换为 1 位十进制位
  8. str[len++] = decT + '0'; //十进制小数位再转换为 ASCII 字符
  9. while (len < 6) //用空格补齐到 6 个字符长度
  10. {
  11. str[len++] = ' ';
  12. }
  13. str[len] = '\0'; //添加字符串结束符
  14. LcdShowStr(0, 0, str); //显示到液晶屏上
  15. }
复制代码
decT = (decT*10) / 16; //二进制的小数部分转换为 1 位十进制位
这段程序的话为啥要把dect *10,这里干吗要乘以10啊?不是很理解
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2022-10-10 13:28 来自触屏版 | 只看该作者
除以1.6,规避浮点运算就是先乘以10再除以16。
回复

使用道具 举报

板凳
ID:100982 发表于 2022-10-10 13:30 | 只看该作者
188610329 发表于 2022-10-10 13:28
除以1.6,规避浮点运算就是先乘以10再除以16。

为什么是除以1.6
回复

使用道具 举报

地板
ID:624769 发表于 2022-10-10 13:45 来自触屏版 | 只看该作者
wifen 发表于 2022-10-10 13:30
为什么是除以1.6

用0-f,即0-15表示小数部分,除以1.6可以得到十分位,除以0.16可以得到十分位和百分位,你随便代入几个数字就能理解了。
回复

使用道具 举报

5#
ID:100982 发表于 2022-10-10 14:10 | 只看该作者
188610329 发表于 2022-10-10 13:45
用0-f,即0-15表示小数部分,除以1.6可以得到十分位,除以0.16可以得到十分位和百分位,你随便代入几个数 ...

decT = temp & 0xF; //分离出温度值小数部分
这个地方分离出来的不是4个16进制数吗?decT = (decT*10) / 16这样的话不是只得到一位?
回复

使用道具 举报

6#
ID:1034262 发表于 2022-10-10 14:21 | 只看该作者
看我的:
t = (adc * 5) >> 3;        // adc * (0.0625 * 10) = adc * 0.625 = dat * 5 / 8,  1位小数
回复

使用道具 举报

7#
ID:624769 发表于 2022-10-10 15:13 来自触屏版 | 只看该作者
wifen 发表于 2022-10-10 14:10
decT = temp & 0xF; //分离出温度值小数部分
这个地方分离出来的不是4个16进制数吗?decT = (decT*10) / ...

你搞错了,
decT = temp & 0xF; //分离出温度值小数部分
这个地方分离出来的不是4个16进制数吗?

这个地方是分离出4个2进制,即一个16进制,他的取值范围只有0-15,他每增加减少1,代表温度上升下降0.0625度, 即十六分之一度,你要用十进制表示,也就了不起是,计算到百分位而已了,10分位基本也够了。
回复

使用道具 举报

8#
ID:100982 发表于 2022-10-10 16:18 | 只看该作者
188610329 发表于 2022-10-10 15:13
你搞错了,
decT = temp & 0xF; //分离出温度值小数部分
这个地方分离出来的不是4个16进制数吗?

明白了,十分感谢
回复

使用道具 举报

9#
ID:390416 发表于 2022-10-11 12:16 | 只看该作者
51单片机+DS1302+DS18B20+74HC595的LED16x32点阵温度万年历源代码分享 http://www.51hei.com/bbs/dpj-200968-1.html
回复

使用道具 举报

10#
ID:100982 发表于 2022-10-11 15:09 | 只看该作者
人人学会单片机 发表于 2022-10-11 12:16
51单片机+DS1302+DS18B20+74HC595的LED16x32点阵温度万年历源代码分享 http://www.51hei.com/bbs/dpj-20096 ...

感谢,哈哈,晚点去下载来膜拜
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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