找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS18b20温度怎么计算?

[复制链接]
跳转到指定楼层
楼主
uint retemp(){
        uint a,b,tt;
        uint t;
        init_ds18b20();
        writebyte(0xcc);
        writebyte(0x44);
        init_ds18b20();
        writebyte(0xcc);
        writebyte(0xbe);
        a = readbyte();
        b = readbyte();
        t = b;
        t <<= 8;
        t = t|a;
        if((t<=0xfc90)&&(t>=0x00)){                                 //当温度大于-55° 小于0°
                num = 0;
    tt = t*0.0625*10;
                return(tt);
        }else if((t>0x00)&&(t<=0xffff)){                             //当温度大于0°小于127°时
                num = 1;
    tt = (~t+2)*0.0625*10;
                return(tt);
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:290752 发表于 2018-5-15 15:05 | 只看该作者
你从18D20读到的16位数据,中间八位就是温度的整数位值。可以参考下面的程序:
work_temp(uint tem)
{
uchar n=0;
if(tem>6348)                        // 温度值正负判断
     {tem=65536-tem;n=1;}            // 负温度求补码,标志位置1
      display[4]=tem&0x0f;           // 取小数部分的值
  display[0]=ditab[display[4]];  // 存入小数部分显示值
      display[4]=tem>>4;             // 取中间八位,即整数部分的值
  display[3]=display[4]/100;     // 取百位数据暂存
  display[1]=display[4]%100;     // 取后两位数据暂存
  display[2]=display[1]/10;      // 取十位数据暂存
  display[1]=display[1]%10;  

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:111634 发表于 2018-5-15 21:16 | 只看该作者
本帖最后由 zl2168 于 2018-5-15 21:17 编辑

实例97  一线式DS18B20测温
Proteus仿真一下,确认有效。
实例97 DS18B20测温.rar (51.78 KB, 下载次数: 19)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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