DS18B20
一、DS18B20是什么?
DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
二、大概认知
1:测温范围为-55℃到+125℃,在-10℃到+85℃范围内误差为±0.4°。
2:返回16位二进制温度数值
3:主机和从机通信使用单总线,即使用单线进行数据的发送和接收
4:在使用中不需要任何外围元件,独立芯片即可完成工作。
5:掉电保护功能 DS18B20 内部含有 EEPROM ,通过配置寄存器可以设定数字转换精度和报警温度,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。
6:每个DS18B20都有独立唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值
7:宽电压供电,电压2.5V~5.5V
8:DS18B20返回的16位二进制数代表此刻探测的温度值,其高五位代表正负。如果高五位全部为1,则代表返回的温度值为负值。如果高五位全部为0,则代表返回的温度值为正值。后面的11位数据代表温度的绝对值,将其转换为十进制数值之后,再乘以0.0625即可获得此时的温度值。
长这样
三、流程图&注意事项
这里是用的是小蜜蜂老师的
小蜜蜂笔记
大家可以去看一下,这里我只是拿之前做笔记的图
代码部分
这是精确到小数点后两位的
int temp //这里要自己定义一个全局变量用来接收温度传感器的数值
void wendu()
{
int LSB,MSB;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
delay(800);
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
LSB=Read_DS18B20();
MSB=Read_DS18B20();
Init_DS18B20();
temp=0x00;
temp=MSB;
temp=(temp<<8)|LSB;
if((temp&0xf800)==0x0000)
{
temp>>=4;
temp=temp*100;
temp=temp+((LSB&0X0F)*6.25);
}
}
这是精确到小数点后一位的
int temp //这里要自己定义一个全局变量用来接收温度传感器的数值
void wendu()
{
int LSB,MSB;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
delay(800);
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
LSB=Read_DS18B20();
MSB=Read_DS18B20();
Init_DS18B20();
temp=0x00;
temp=MSB;
temp=(temp<<8)|LSB;
if((temp&0xf800)==0x0000)
{
temp>>=4;
temp=temp*10;
temp=temp+((LSB&0X0F)*0.625);
}
}
这是只要整数部分的
int temp //这里要自己定义一个全局变量用来接收温度传感器的数值
void wendu()
{
int LSB,MSB;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
delay(800);
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
LSB=Read_DS18B20();
MSB=Read_DS18B20();
Init_DS18B20();
temp=0x00;
temp=MSB;
temp=(temp<<8)|LSB;
if((temp&0xf800)==0x0000)
{
temp>>=4;
temp=temp+((LSB&0X0F)*0.0625);
}
}