📄 meansure.c
字号:
#include <Meansure.h>
sbit P00=P0^0;
sbit P01=P0^1;
//启动传输
void s_transstart()
{
unsigned char i=9;
while(i--<0)
{
P01=1;
P01=0;
}
P01=1;P00=0;
P01=0;P00=1;
P01=1;P00=0;
}
//写字节数据
char s_write_byte(unsigned char value)
{
unsigned char i,error=0;
for (i=0x80;i>0;i/=2)
{
if (i & value) DATA=1;
else
DATA=0;
SCK=1;
; ; ;
SCK=0;
}
DATA=1;
SCK=1;
error=DATA;
SCK=0;
return error;
}
//读字节数据
char s_read_byte (unsigned char ack)
{
unsigned char i,val=0;
DATA=1;
for (i=0x80;i>0;i/=2)
{
SCK=1;
if(DATA) val=(val | i);
SCK=0;
}
DATA=!ack;
SCK=1;
; ; ;
SCK=0;
DATA=1;
return val;
}
//读状态寄存器
char s_read_statusreg(unsigned char *p_value,unsigned char *p_checksum)
{
unsigned char error=0;
s_transstart();
error=s_write_byte(ACK);
*p_value=s_read_byte(ACK);
*p_checksum=s_read_byte(noACK);
return error;
}
//写状态寄存器
char s_write_statusreg(unsigned char *p_value)
{
unsigned char error=0;
s_transstart();
error+=s_write_byte(STATUS_REG_R);
error+=s_write_byte(*p_value);
return error;
}
//读温湿度数据
char s_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(SCK);
*(p_value+1)=s_read_byte(SCK);
*p_checksum=s_read_byte(SCK);
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 th_ture;
float t_c;
t_c=t*0.01-40;
rh_lin=c3*rh*rh+c2*rh+c1;
th_ture=(t_c-25)*(t1+t2*rh)+rh_lin;
*p_temperature=t_c;
*p_humidity=th_ture;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -