Beispiel #1
0
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;
}
Beispiel #2
0
/********以下是读取温度值函数********/
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();
	}
}