📄 i2c.c
字号:
#define DATA P1_1
#define SCK P1_0
#define ACK 1
#define noACK 0
#define MEASURE_TEMP 0x03 //测量温度命令
#define MEASURE_HUMI 0x05 //测量湿度命令
//读温湿度数据
chars_measure(unsigned char *p_value,unsigned char *p_checksum,unsigned char mode)
{
unsigned char error=0;
unsigned int i;
s_transstart(); //传输开始
switch(mode)
{
case TEMP:
error+=s_write_byte(measure_temp);break;
case HUMI:
error+=s_write_byte(measure_humi);break;
default:break;
}
for(i=0;i<65535;i++)
if(DATA==0) break;
if(DATA) error+=1;
*(p_value)=s_read_byte(ACK);
*(p_value+1)=s_read_byte(ACK);
*p_checksum=s_read_byte(noACK);
return error;
}
//温湿度值标度变换及温度补偿
void calc_sth15(float *p_humidity,float *p_temperature)
{
const float c1=-4.0;
const float c2=0.0405;
const float c3=-0.0000028;
const float t1=-0.01;
const float t2=-0.00008;
float rh=*p_humidity;
float t=*p_temperature;
float rh_lin;
float trh_ture;
float t_c;
t_c=t*0.01-40;
rh_lin=c3*rh*rh+c2*rh+c1;
trh_ture=(t_c-25)*(t1+t2*rh)+rh_lin;
*p_temperature=t_c;
*p_humidity=rh_ture;
}
从相对温度和湿度计算露点
char calc_dewpoint(float h,float t)
{
float logex,dewpoint;
logex=0.66077+7.5*t/(237.3+t)+[log10(h)-2];
dew_point=(logex-0.66077)*237.3/(0.66077+7.5-logex);
return dew_point;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -