硬件介绍
蓝桥杯嵌入式拓展版提供的温度传感器是DS18B20。关于他的驱动文件比赛的的时候是提供的,但是以防万一,自己还是要会写读写文件。
DS18B20
float ds18b20_GetVal(void)
{
float Val=0;
u8 val[2];
u8 i = 0;
u16 x = 0;
ow_reset();
ow_byte_wr(0xCC);
ow_byte_wr(0x44);
delay_us(750000);
ow_reset();
ow_byte_wr( 0xCC );
ow_byte_wr ( 0xbe );
for ( i=0 ;i<2; i++) {
val[i] = ow_byte_rd();
}
x = val[1];
x <<= 8;
x |= val[0];
x = x&0x07ff;
Val = x/16.0;
return Val;
}
我把这个函数改了一下,在最后三行我讲解一下。
首先DS18B20采集到的温度是16位的,如果说高5位都是1则是负温度,需要对采集到的数值进行取反并且加一才是真实温度,但是我相信比赛的时候是不可能存在这个现象的。如果是0,则直接将16进制转换为10进制就可以了。因此在这里我是直接进行与操作0x07ff默认它是零上温度。
然后后面进行除以16这里可不是进制转换,而是测量值到实际温度的转换,DS18B20的精度为0.0625度,即读回数据的最低位代表0.0625度,实际测量值t×0.0625就转换为实际温度值。
比如 读回的数据为: 0000 0001 1001 0000,十六进制为0x190,十进制400,乘以0.0625后得25,即实际温度是25度。