请问18b20输出的数据温度与实际的温度是什么样的关系?18b20输出温度与实际的温度怎么算的?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 05:02:36
请问18b20输出的数据温度与实际的温度是什么样的关系?18b20输出温度与实际的温度怎么算的?

请问18b20输出的数据温度与实际的温度是什么样的关系?18b20输出温度与实际的温度怎么算的?
请问18b20输出的数据温度与实际的温度是什么样的关系?
18b20输出温度与实际的温度怎么算的?

请问18b20输出的数据温度与实际的温度是什么样的关系?18b20输出温度与实际的温度怎么算的?
18b20RAM中有16位的温度字节,高八位字节定义符号和数据,低八位字节全部是数据位.数据位和实际温度对应如下:
低八位 2^3,2^2,2^1,2^0,2^-1,2^-2,2^-3,2^-4
高八位 前五位是符号位 2^6 ,2^5 ,2^4 (2^3表示2的3次方)
温度与数字输出的对应关系
+125 0000011111010000 07D0H
+85 0000010101010000 0550H
+25.0625 0000000110010001 0191H
+10.125 0000000010100010 00A2H
+0.5 0000000000001000 0008h
0 0000000000000000 0000H
-0.5 1111111111111000 FFF8H
-10.125 1111111101011110 FF5EH
-25.0625 1111111001011111 FE6FH
-55 1111110010010000 FC90H

#include"reg51.h"

sbit DQ =P1^7;    //定义通信端口

//延时函数

void delay(unsigned int i)

{     

while(i--);

}

//初始化函数

Init_DS18B20(void)

 {

 unsigned char x=0;

 DQ = 1;     //DQ复位

 delay(8);   //稍做延时

 DQ = 0;     //单片机将DQ拉低

 delay(80); //精确延时 大于 480us

 DQ = 1;     //拉高总线

 delay(14);

 x=DQ;       //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

 delay(20);

}

//读一个字节

ReadOneChar(void)

{

 unsigned char i=0;

 unsigned char dat = 0;

 for (i=8;i>0;i--)

 {

    DQ = 0; // 给脉冲信号

    dat>>=1;

    DQ = 1; // 给脉冲信号

    if(DQ)

    dat|=0x80;

    delay(4);

 }

 return(dat);

}

//写一个字节

WriteOneChar(unsigned char dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

   DQ = 0;

   DQ = dat&0x01;

   delay(5);

   DQ = 1;

   dat>>=1;

}

//delay(4);

}

//读取温度

float ReadTemperature(void) 

{

 unsigned char a=0;

 unsigned char b=0;

 unsigned int t=0;

 float tt=0;

 Init_DS18B20();

 WriteOneChar(0xCC); // 跳过读序号列号的操作

 WriteOneChar(0x44); // 启动温度转换

 Init_DS18B20();

 WriteOneChar(0xCC); //跳过读序号列号的操作

 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

 a=ReadOneChar();

 b=ReadOneChar();

 t=b;

 t<<=8;

 t=t|a;

 tt=t*0.0625;

 //t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用

 return(tt);   //反回值就是处理后的温度

}

 unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xef,0x6f};// 显示段码值0123456789

main()

{            

 float i=0;

 unsigned char a,b=1,j=0;

    while(1)

    {

     i=ReadTemperature();//读温度

     a=(unsigned char)i;

        i=i*10;

  b=(unsigned char)i%10;

 

     P2=2;

  P0=dofly[a%10]+0x80; 

  delay(600);  

  P2=1;

  P0=dofly[a/10];

  delay(400);

  P2=3;

 // b=2;

  P0=dofly[b]; 

 

     }

}

18B20返回的是16位二进制数,乘以0.0625即可转化为实际温度。 建议你参看一个程序,容易理解些。 我也是初学,懂得也不多,呵呵

请问18b20输出的数据温度与实际的温度是什么样的关系?18b20输出温度与实际的温度怎么算的? 关于18B20温度转换问题首先是分辨率是12.一、请问18B20里面两个寄存器是怎么存温度的,就是整数小数都在哪几位?二、读出数据后,当然读出的是16进制数,这个数怎么变成正确的表示实际温度的 18b20与DHT11哪个测的温度准确性高请说明原因 18B20的温控中,为什么只要将测到的数值乘于 0.0625 即可得到实际温度? 数据误差计算数据类型如下,输出电压和温度是线性关系,该如何算实际输出电压与理论输出电压的误差啊,求高人指教.序号 设定温度(℃) 实际输出电压(uV) 理论输出电压(uV)1 50 2587 2585 DS18B20传出来的数据与温度值之间是什么关系 怎么转换?用的是51单片机 ,18b20采集一次温度后传出16位数值,这些数值和温度之间什么关系?如何转换?还有.转换要进行数学运算 ,51单片机能进行多 DS18B20传出来的数据与温度值之间是什么关系 怎么转换?用的是51单片机 ,18b20采集一次温度后传出16位数值,这些数值和温度之间什么关系?如何转换?还有.转换要进行数学运算 ,51单片机能进行多 18b20温度采用16位分辨率是怎样计算的. ds18b20测到的温度与实际温度不一样是怎么回事 请问亮度温度与真实温度的关系?是不是亮度温度与真实温度要小啊 DS18B20 的CRC校验时怎么回事?最近想做多个18b20温度采集 系统不知道什么是CRC校验单个18B20可以采集温度,多个的还没有成功, 用18b20测温度,当温度过高或过低时用蜂鸣器报警的程序怎么写啊? 16进制取反怎么算.顺便举点例子.就是18b20负温度的转化 变压器油温表显示的温度与外界温度有关吗?油温表上显示的油温是实际温度还是什么温度? 那种真空计的测量与温度无关,模拟量输出? 求教室的实际温度 请问耳温计测量的温度和实际温度差几度 是加还是减 请问,压缩空气与温度的关系?