1、 S:uchar num;uchar error=0;/* 延时函数*/void delayms(uint count) uint i,j; for(i=0;icount;i+) for(j=0;j0;x-) for(y=110;yy-);/* 液晶部分*/void write_com(uchar com) lcdrs=0; P0=com; delay(5); lcden=1; lcden=0;void write_data(uchar date) lcdrs=1; P0=date;void disply_T(float temperature) float temp; int t_qian,
2、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+0x0
3、6); write_data(0x30+t_ge);void disply_H(float temperature) write_com(0x80+0x0a); write_com(0x80+0x0b); write_com(0x80+0x0d); write_com(0x80+0x0e);/* SHT11*/void start() /启动时序 sck=1; _nop_(); dat=0; sck=0; sck=1; dat=1;uchar w_byte(uchar val) /写命令 uchar i; for(i=0x80;ii=i/2) if(i&val) dat=1; else dat
4、=0; sck=0; error=dat; return error;uchar r_byte(bit ack) /从传感器读数据 uchar i,val=0; if(dat) val=val|i; dat=!ack; return val;void com()9; start();uint measure_T() uchar val_1,val_2; uint tempval; 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); tempv
5、al=val_2+val_1*256; error=1; return tempval;uint measure_H() error+=w_byte(0x05);float c_T(uint temp_val) const float d1=-40.0; const float d2=+0.01; float temp_final; temp_val=temp_val&0x3fff; /取出低14位 temp_final=d1+d2*(float)temp_val; for(i=100;i-) delay(1); return temp_final;float c_H(float t,floa
6、t h) uchar i; 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=h; float rh_lin; float rh_true; float t_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_true100)rh_true=100; if(rh
7、_true0.1)rh_true=0.1; return rh_true;void init() rw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num7;num+) write_data(tablenum); delay(20); write_com(0x80+0x40);8; write_data(table1num);void main() float dis_tempval,dis_humival; uint tempval,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;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1