shtc3.c
#include "shtc3.h"
#include "delay.h"
#include "myiic.h"
float Temperature=0;
float Humidity=0;
void Shtc3_Init(void)
{
IIC_Init();
}
void Shtc3_Read_Result(void)
{
u16 tem,hum;
u16 buff[6];
/*shtc3唤醒*/
IIC_Start();
IIC_Send_Byte(0xE0);
IIC_Wait_Ack();
IIC_Send_Byte(0x35);
IIC_Wait_Ack();
IIC_Send_Byte(0x17);
IIC_Wait_Ack();
IIC_Stop();
delay_us(250);
/*shtc3测量*/
IIC_Start();
IIC_Send_Byte(0xE0);
IIC_Wait_Ack();
IIC_Send_Byte(0x5C);
IIC_Wait_Ack();
IIC_Send_Byte(0x24);
IIC_Wait_Ack();
IIC_Stop();
delay_ms(50);
/*shtc3读取*/
IIC_Start();
IIC_Send_Byte(0xE1);
IIC_Wait_Ack();
buff[0]=IIC_Read_Byte(1);
buff[1]=IIC_Read_Byte(1);
buff[2]=IIC_Read_Byte(1);
buff[3]=IIC_Read_Byte(1);
buff[4]=IIC_Read_Byte(1);
buff[5]=IIC_Read_Byte(1);
IIC_Stop();
delay_us(250);
/*进入睡眠模式*/
IIC_Start();
IIC_Send_Byte(0xE0);
IIC_Wait_Ack();
IIC_Send_Byte(0xB0);
IIC_Wait_Ack();
IIC_Send_Byte(0x98);
IIC_Wait_Ack();
IIC_Stop();
delay_us(250);
hum = ((buff[0]<<8) | buff[1]);//湿度拼接
tem = ((buff[3]<<8) | buff[4]);//温度拼接
/*转换实际温度*/
Temperature= (175.0*(float)tem/65535.0-45.0) ;// T = -45 + 175 * tem / (2^16-1)
Humidity= (100.0*(float)hum/65535.0);// RH = hum*100 / (2^16-1)
hum=0;
tem=0;
}
shtc3.h
#ifndef _SHTC3_H
#define _SHTC3_H
#include "sys.h"
extern float Temperature;
extern float Humidity;
//#define SHTC3_ADDR (0X70)
//#define SHTC3_CMD_DEV_WRITE (0xE0)
//#define SHTC3_CMD_DEV_READ (0xE1)
//#define SHTC3_CMD_SOFT_RESET 0x805D
//#define SHTC3_CMD_READ_ID 0xEFC8
//#define SHTC3_CMD_WAKEUP 0x3517
//#define SHTC3_CMD_SLEEP 0xB098
//#define SHTC3_CMD_READ_TEMP_DATA 0x7866
//#define SHTC3_CMD_READ_HUM_DATA 0x5C24
void Shtc3_Init(void);
void Shtc3_Read_Result(void);
#endif
IIC用自己得就可以,我用的原子哥的。