SHT11程序Word文档格式.docx
《SHT11程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《SHT11程序Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
S:
ucharnum;
ucharerror=0;
/**************************
延时函数
***************************/
voiddelayms(uintcount)
{
uinti,j;
for(i=0;
i<
count;
i++)
for(j=0;
j<
110;
j++);
}
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
/*****************************
液晶部分
*******************************/
voidwrite_com(ucharcom)
lcdrs=0;
P0=com;
delay(5);
lcden=1;
lcden=0;
voidwrite_data(uchardate)
lcdrs=1;
P0=date;
voiddisply_T(floattemperature)
floattemp;
intt_qian,t_bai,t_shi,t_ge;
temp=temperature*100;
t_qian=(int)temp/1000;
t_bai=(int)temp%1000/100;
t_shi=(int)temp%100/10;
t_ge=(int)temp%10;
write_com(0x80+0x02);
write_data(0x30+t_qian);
delay(10);
write_com(0x80+0x03);
write_data(0x30+t_bai);
write_com(0x80+0x05);
write_data(0x30+t_shi);
write_com(0x80+0x06);
write_data(0x30+t_ge);
voiddisply_H(floattemperature)
write_com(0x80+0x0a);
write_com(0x80+0x0b);
write_com(0x80+0x0d);
write_com(0x80+0x0e);
/****************************
SHT11
******************************/
voidstart()//启动时序
sck=1;
_nop_();
dat=0;
sck=0;
sck=1;
dat=1;
ucharw_byte(ucharval)//写命令
uchari;
for(i=0x80;
i>
i=i/2)
{
if(i&
val)
dat=1;
else
dat=0;
sck=0;
}
error=dat;
returnerror;
ucharr_byte(bitack)//从传感器读数据
uchari,val=0;
if(dat)
val=val|i;
dat=!
ack;
returnval;
voidcom()
9;
start();
uintmeasure_T()
ucharval_1,val_2;
uinttempval;
com();
error+=w_byte(0x03);
if(error!
=0)
else
{
while(dat==1)
if(dat==0)
val_1=r_byte
(1);
val_2=r_byte(0);
tempval=val_2+val_1*256;
error=1;
returntempval;
uintmeasure_H()
error+=w_byte(0x05);
floatc_T(uinttemp_val)
constfloatd1=-40.0;
constfloatd2=+0.01;
floattemp_final;
temp_val=temp_val&
0x3fff;
//取出低14位
temp_final=d1+d2*(float)temp_val;
for(i=100;
i--)
delay
(1);
returntemp_final;
floatc_H(floatt,floath)
uchari;
constfloatC1=-4.0;
constfloatC2=+0.0405;
constfloatC3=-0.0000028;
constfloatT1=+0.01;
constfloatT2=+0.00008;
floatrh=h;
floatrh_lin;
floatrh_true;
floatt_C;
t_C=t*0.01-40;
rh_lin=C3*rh*rh+C2*rh+C1;
rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;
if(rh_true>
100)rh_true=100;
if(rh_true<
0.1)rh_true=0.1;
returnrh_true;
voidinit()
rw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;
num<
7;
num++)
write_data(table[num]);
delay(20);
write_com(0x80+0x40);
8;
write_data(table1[num]);
voidmain()
floatdis_tempval,dis_humival;
uinttempval,humival;
init();
while
(1)
tempval=measure_T();
humival=measure_H();
if(error==0)
delayms(500);
dis_tempval=c_T(tempval);
disply_T(dis_tempval);
dis_humival=c_H(dis_tempval,humival);
disply_H(dis_humival);
else
{continue;