TempHumiValue_t temp_humi_Value;
// TempHumiValue_t *temp_humi_Va;
u16 tem,hum;
u16 buff[6];
float Temperature=0;
float Humidity=0;
IIC_Start();
IIC_SendByte(addr<<1 | write);//写7位I2C设备地址加0作为写取位,1为读取位
IIC_wait_ACK();
IIC_SendByte(0x2C);
IIC_wait_ACK();
IIC_SendByte(0x06);
IIC_wait_ACK();
IIC_Stop();
delay_ms(50);
IIC_Start();
IIC_SendByte(addr<<1 | read);//写7位I2C设备地址加0作为写取位,1为读取位
if(IIC_wait_ACK()==0)
{
buff[0]=IIC_RcvByte();
IIC_ACK();
buff[1]=IIC_RcvByte();
IIC_ACK();
buff[2]=IIC_RcvByte();
IIC_ACK();
buff[3]=IIC_RcvByte();
IIC_ACK();
buff[4]=IIC_RcvByte();
IIC_ACK();
buff[5]=IIC_RcvByte();
IIC_NACK();
IIC_Stop();
}
tem = ((buff[0]<<8) | buff[1]);//温度拼接
hum = ((buff[3]<<8) | buff[4]);//湿度拼接
/*转换实际温度*/
Temperature= tem ;// T = -45 + 175 * tem / (2^16-1)
Humidity= hum;// RH = hum*100 / (2^16-1)
temp_humi_Value.temperature=Temperature;
temp_humi_Value.humidity=Humidity;
if((Temperature>=-20)&&(Temperature<=125)&&(Humidity>=0)&&(Humidity<=100))//过滤错误数据
{
temp_humi_Value.temperature=Temperature;
temp_humi_Value.humidity=Humidity;
printf("温度为%f,湿度为%f%% \r\n",temp_humi_Value.temperature,temp_humi_Value.humidity);
}
hum=0;
tem=0;
|