page71

导航

单总线协议的DS18B20

指路一篇文章:https://blog.csdn.net/weixin_46043648/article/details/108344336主要讲原理

处理温度读取的数据有点考验人:

这里用int型传递温度数据:

以下是为了后续处理温度时保留2位小数,本来转换的值要乘以0.0625.所以放大100倍。

unsigned int read_temperature()
{
unsigned int low,high;
unsigned int temp;
unsigned int temperature;           //用u16型保存温度值。
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
Delay_OneWire(200);

init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);

low=Read_DS18B20();
high=Read_DS18B20();

temp=(high&0x0f);         //屏蔽高4符号位(留下了一位符号位),
temp=temp<<8;        //左移8位后或上低8位;
temp|=low;
temperature=temp*6.25;         
return temperature;
}

 

posted on 2020-11-13 21:40  page71  阅读(137)  评论(0编辑  收藏  举报