ds18b20模块代码😄
float read_18()
{
float temp;
unsigned char LSB,MSB;
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
LSB=Read_DS18B20();
MSB=Read_DS18B20();
temp=(MSB<<8|LSB)*0.0625;
return temp;
}
同学们会看到我这里的返回值类型为float浮点型,其有一个好处:当读取到的温度(float型)赋值给变量(int型)时会以取整的方式赋值(也就是将整数部分赋值给int型变量)。
当有题目需要显示小数点后几位数据时就乘10的几次方,例如:
显示小数位 | 乘数 |
---|---|
1位 | x10 |
2位 | x100 |
n位 | x 1 0 n 10^n 10n |
赛题中常见的刷新时间小于0.5S或其他时间的解决办法
上面是芯片手册的文档信息比赛时可以查阅
由上可知12bit表示的数据虽然比较精确,但是他的最大更新时间为750ms,在一些比赛要求中显然是不能达标的。于是我们就需要更改为11bit模式、甚至9bit模式
更改ds18b20数据模式
代码如下:
void write_18(unsigned char add)
{
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x4e);//更换模式
Write_DS18B20(0x64);//最高温度:100
Write_DS18B20(0x00);//最低温度: 0
Write_DS18B20(add);//设置模式
}
RESOLUTION | add |
---|---|
9 | 0x1f |
10 | 0x3f |
11 | 0x5f |
12 | 0x7f |
默认情况下DS18b20为12bit模式