void I2C_Sht31(void)
{
IIC_Start();
IIC_SendByte(SHT30W); //发送设备地址+写信号
while(IIC_wait_ACK()); //从机应答
IIC_SendByte(0x22); //命令高8位,0x2220,周期测量
while(IIC_wait_ACK());
IIC_SendByte(0x20); //命令低8位
while(IIC_wait_ACK());
//IIC_Stop(); //周期读取sht30数据,按照时序图,不需要发送停止命令
delay1ms(20); //此处延时必须要有,等待测量完成,才能读取数据
IIC_Start();
IIC_SendByte(SHT30W); //发送设备地址+写信号
while(IIC_wait_ACK()); //从机应答
IIC_SendByte(0xe0); //命令高8位,0xe000,准备读取数据模式
while(IIC_wait_ACK());
IIC_SendByte(0x00); //命令低8位
while(IIC_wait_ACK());
//IIC_Stop(); //周期读取sht30数据,按照时序图,不需要发送停止命令
IIC_Start();
IIC_SendByte(SHT30R); //发送设备地址+读信号
while(IIC_wait_ACK());
BUFt[0] = IIC_ReadByte(1); //温度高
BUFt[1] = IIC_ReadByte(1); //温度低
BUFt[2] = IIC_ReadByte(1); //温度crc
BUFt[3] = IIC_ReadByte(1); //湿度高
BUFt[4] = IIC_ReadByte(1); //湿度低
BUFt[5] = IIC_ReadByte(0); //湿度crc
IIC_Stop();
temp = (BUFt[0]<<8) | BUFt[1];
humi = (BUFt[3]<<8) | BUFt[4];
temp = (unsigned int)(175*(float)temp / 65535 - 45);
humi = (unsigned int)(100*(float)humi / 65535);
delay1ms(10);
}
基于您的代码,它只计算和保存温度,而不是湿度。
如果您想要湿度,请在代码中添加对湿度的处理:
humi = (BUFt[3]<<8) | BUFt[4];
humi = (unsigned int)(100*(float)humi / 65535);
然后,您可以在程序的其他地方使用 humi 变量来访问读取到的湿度值。
float humidity = (float)humi / 100.0;