1、 /显示温度位置的标志uchar flag_humidity=0; /显示湿度位置的标志uchar code str1= 0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00;/温度图标uchar code str6_sht11=%RH ; uchar code str4_sht11=humi=uchar code str2_sht11=temp=uchar code str7_sht11= /清除没不要的显示/*函数名称:Delay()函数功能:SHT11内部延时*/void Delay() ;Delay_Ms()SHT11检测等待延时函数说明:11ms/55ms/
2、210ms 分别对应8位/12位/14位 测量结果对应的形参为N 则延时Nmsvoid Delay_Ms(uint ms) / ms延时函数 (AT89C51 uint i; uchar j; for(i=0;ims;i+) for(j=0;j200;j+);102; SHT11启动时序void SHT11_Start() SHT11_SCK=1; SHT11_DATA=1; Delay(); SHT11_DATA=0; SHT11_SCK=0;/函数名称:SHT11_Sendbyte(uchar dat) 向SHT11发送8bite数据void SHT11_Sendbyte(uchar da
3、t) uchar i;8; if(dat&0x80) else dat=dat 当位6为1时表明VDD即电量不足 位0表明当前的测量分辨率 当位0为1时表明测量精度:8位/湿度 12位温度 当位0为0时表明测量精度:12位湿度 14位温度 默认为0 dat=SHT11_Receivebyte(); SHT11_End();SHT11_Measure(uchar command,uint time);设置SHT11检测功能,并返回相应的检测结果command形参用于设定温度检测还是湿度检测,time形参用于设定检测过程中的等待时间,以确定检测结果的位数11ms/55ms/210ms 分别对应8位
4、/12位/14位 uint SHT11_Measure(uchar command,uchar time) uint dat=0; uchar data_high,data_low; Delay_Ms(time); SHT11_Test_Finish(); data_high=SHT11_Receivebyte(); MCU_Answer(); data_low=SHT11_Receivebyte(); dat=(dat|data_high); dat=(dat23) tempeture1=tempeture1+1;55) if(P37=1)=16&tempeture1=400&r600)=6
5、00) return(r);#endif#include #include uchar DispData4 = 0, 1, 2, 3;code uchar DispSegmentP010=0x3f,0x06,0x1b,0x0f,0x26,0x2d,0x3d,0x07,0x3f,0x2f;code uchar DispSegmentP210=0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x00,0x22,0x22; / 0 1 2 3 4 5 6 7 8 9 %code uchar DispCtrl4 = 0xef, 0xdF, 0xbf ,0x7F;sbit P16=
6、P16;sbit P26=P26;sbit P34=P34;void Temp_delay(unsigned int j) for(i=100;i0;i-) for(j;jj-);void Show(uchar *Buffer) for (i=0; i4; i+) P1 = DispCtrli; P0 = DispSegmentP0*Buffer; P2 = DispSegmentP2*Buffer; if(P16=0) P26=1; Temp_delay(2); Buffer+;void DispConvert(uchar *DispAddr, uint Temp2Con) DispAddr
7、0 = Temp2Con/1000; DispAddr1 = (Temp2Con - DispAddr0*1000)/100; DispAddr2 = (Temp2Con - DispAddr0*1000 - DispAddr1*100)/10; DispAddr3 = Temp2Con - DispAddr0*1000 - DispAddr1*100 - DispAddr2*10; void main() uint temp; uint dat; uint Hum; /float f; while(1) Show(DispData); SHT11_Write_Register(REG_WRITE,FUNCTION_SET); temp=SHT11_Measure(TEM_TEST,0x37); temp=SHT11_Convert_Tempeture12bit(temp); dat=SHT11_Measure(HUM_TEST,0x0b); Hum=SHT11_Convert_Humidity8bit(dat,temp); if(P34=0) P36=1; P37=0; DispConvert(DispData,Hum); P36=0; P37=1; DispConvert(DispData,temp*10); 还有些地方不是很完美
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1