硬件介紹
藍橋杯嵌入式拓展版提供的溫度傳感器是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度。