float Get_DS18B20_Temperature(void) /** * \brief 主机向Ds18b20读温度值 * * \param None * * \retval Temperature */ { uint8_t TL; uint16_t TH; float Temperature; DS18B20_Init(); DS18B20_WriteOneByte(SKIP_ROM); //跳过读序列号的操作 DS18B20_WriteOneByte(CONVERT_T); //启动温度转换 DS18B20_DelayXus(20); DS18B20_Init(); DS18B20_WriteOneByte(SKIP_ROM); //跳过读序列号的操作 DS18B20_WriteOneByte(READ_SCRATCHPAD); //读温度寄存器,共9个byte,前两个byte为温度值 TL = DS18B20_ReadOneByte(); //TL存低字节 TH = DS18B20_ReadOneByte(); //TH存高字节 // TH <<= 4; // TH += (TL & 0xF0) >> 4; // Temperature = TH; TH <<= 8; TH |= TL; Temperature = TH * 0.0625; return Temperature; }
/********以下是读取温度值函数********/ Ds18B20_GetTemperture(void) { DS18B20_Init(); //DS18B20初始化 if(yes0==0) //若yes0为0,说明DS18B20正常 { DS18B20_WriteOneByte(0xCC); // 跳过读序号列号的操作 DS18B20_WriteOneByte(0x44); // 启动温度转换 Lcd_delay(200); //调用显示函数延时,等待A/D转换结束,分辨率为12位时需延时750ms以上 DS18B20_Init(); DS18B20_WriteOneByte(0xCC); //跳过读序号列号的操作 DS18B20_WriteOneByte(0xBE); //读取温度寄存器 TL = DS18B20_ReadOneByte(); //温度低8位 TH= DS18B20_ReadOneByte(); //温度高8位 } else { DS18B20_display_error(); } }