您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 基于89C51单片机SHT11温湿度传感器电路图于程序作者
基于89C51单片机SHT11温湿度传感器电路图于程序作者:张志杰SHT11.h文件:#ifndef__SHT11_H__#define__SHT11_H__/*************************SHT11相关命令**************************/#defineucharunsignedchar#defineuintunsignedint#defineTEM_TEST0x03//温度检测命令#defineHUM_TEST0x05//湿度检测命令#defineREG_READ0x07//读寄存器#defineREG_WRITE0x06//写寄存器#defineFUNCTION_SET0x01//设置SHT11的工作精度为8位/湿度12位温度/**************************SHT11端口定义***************************/sbitSHT11_DATA=P3^1;sbitSHT11_SCK=P3^0;sbitP33=P3^3;sbitP32=P3^2;sbitP36=P3^6;sbitP37=P3^7;ucharflag_tempeture=0;//显示温度位置的标志ucharflag_humidity=0;//显示湿度位置的标志ucharcodestr1[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//温度图标ucharcodestr6_sht11[]=%RH;ucharcodestr4_sht11[]=humi=;ucharcodestr2_sht11[]=temp=;ucharcodestr7_sht11[]=;//清除没不要的显示/***************************函数名称:Delay()函数功能:SHT11内部延时****************************/voidDelay(){;;}/***************************函数名称:Delay_Ms()函数功能:SHT11检测等待延时函数说明:11ms/55ms/210ms分别对应8位/12位/14位测量结果对应的形参为N则延时Nms****************************/voidDelay_Ms(uintms)//ms延时函数(AT89C51@11.0592MHz){uinti;ucharj;for(i=0;ims;i++){for(j=0;j200;j++);for(j=0;j102;j++);}}/**************************函数功能:SHT11启动时序***************************/voidSHT11_Start(){SHT11_SCK=1;SHT11_DATA=1;Delay();SHT11_DATA=0;Delay();SHT11_SCK=0;Delay();SHT11_SCK=1;Delay();SHT11_DATA=1;}/******************************函数名称:SHT11_Sendbyte(uchardat)函数功能:向SHT11发送8bite数据******************************/voidSHT11_Sendbyte(uchardat){uchari;SHT11_SCK=0;Delay();for(i=0;i8;i++){if(dat&0x80){SHT11_DATA=1;Delay();}else{SHT11_DATA=0;Delay();}dat=dat1;SHT11_SCK=1;Delay();SHT11_SCK=0;}}/*********************************函数名称SHT11_Answer():函数功能:检测SHT11的响应信号(在第九个时钟周期)***********************************/voidSHT11_Answer(){SHT11_SCK=1;Delay();while(SHT11_DATA==1);SHT11_SCK=0;SHT11_DATA=1;}/************************************函数名称:SHT11_Test_Finish()函数功能:检测SHT11温湿度检测是否完毕*************************************/voidSHT11_Test_Finish(){while(SHT11_DATA==1);}/************************************函数名称:SHT11_Receivebyte()函数功能:从SHT11接收8bite数据*************************************/ucharSHT11_Receivebyte(){uchari;uchardat;SHT11_SCK=0;Delay();for(i=0;i8;i++){SHT11_SCK=1;Delay();dat=dat1;if(SHT11_DATA){dat=dat|0x01;Delay();}else{dat=dat&0xfe;Delay();}SHT11_SCK=0;Delay();}SHT11_DATA=1;//释放数据总线return(dat);}/***********************************函数名称:MCU_Answer()函数功能:单片机向SHT11发送应答信号*************************************/voidMCU_Answer(){SHT11_SCK=0;Delay();SHT11_DATA=0;Delay();SHT11_SCK=1;Delay();SHT11_SCK=0;Delay();SHT11_DATA=1;//释放数据总线这条指令非常重要不加的话导致单片机不能读取低8位}/***********************************函数名称:SHT11_End()当接收两个8byte数据后部接收CRC校验码************************************/voidSHT11_End(){SHT11_DATA=1;SHT11_SCK=1;Delay();SHT11_SCK=0;Delay();}/*************************************函数名称:voidSHT11_Write_Register(ucharcommand,uchardat)函数说明:向SHT11的状态寄存器设置功能command为REG_WRITE0x06写寄存器dat为设置SHT11的功能可以设置检测的数据位数*/voidSHT11_Write_Register(ucharcommand,uchardat){SHT11_Start();SHT11_Sendbyte(command);SHT11_Answer();SHT11_Sendbyte(dat);SHT11_Answer();}/***************************************函数名称:ucharSHT11_Read_Register(ucharcommand)函数说明:command为REG_READ0x07//读寄存器返回值为状态寄存器的值位6显示当前检测完一次数据后电源供电情况当位6为0时表明VDD2.47V当位6为1时表明VDD2.47V即电量不足位0表明当前的测量分辨率当位0为1时表明测量精度:8位/湿度12位温度当位0为0时表明测量精度:12位湿度14位温度默认为0*******************************************/ucharSHT11_Read_Register(ucharcommand){uchardat;SHT11_Start();SHT11_Sendbyte(command);SHT11_Answer();dat=SHT11_Receivebyte();SHT11_End();return(dat);}/***************************************函数名称:SHT11_Measure(ucharcommand,uinttime);函数功能:设置SHT11检测功能,并返回相应的检测结果函数说明:command形参用于设定温度检测还是湿度检测,time形参用于设定检测过程中的等待时间,以确定检测结果的位数11ms/55ms/210ms分别对应8位/12位/14位****************************************/uintSHT11_Measure(ucharcommand,uchartime){uintdat=0;uchardata_high,data_low;SHT11_Start();SHT11_Sendbyte(command);SHT11_Answer();Delay_Ms(time);SHT11_Test_Finish();data_high=SHT11_Receivebyte();MCU_Answer();data_low=SHT11_Receivebyte();SHT11_End();dat=(dat|data_high);dat=(dat8)|data_low;return(dat);}/****************************************函数名称:Convert_Tempeture12bit(uintdat);函数功能:将检测到的数据转化为相应的温度数据函数说明:温度转换公式--T=d1+d2*SOt公式中的参数d1=-40,d2=0.04适用于12位测量精度*/floatSHT11_Convert_Tempeture12bit(uintdat){floattempeture1;tempeture1=-40+0.04*dat;if(tempeture123)tempeture1=tempeture1+1;if(tempeture155)tempeture1=tempeture1+1;if(P37==1){if(tempeture1=16&&tempeture130){P33=1;P32=0;}else{P33=0;P32=1;}}return(tempeture1);}/*****************************************函数名称:SHT11_Convert_Humidity8bit(uintdat,floattemp)函数功能:将检测到的数据转化为相应的湿度数据函数说明:相对湿度转换公式-----RHline=C1+C2*SOrh+C3*SOrh*SOrh(检测数据的线性化SOrh为单片机接收到的数据)-----RHtrue=(tempeture-25)*(t1+t2*SOrh)+RHline公式中的参数:C1=-4,C2=0,648,C3=-0.00072t1=0.01,t2=0.00128适用于8位测量精度*/uintSHT11_Convert_Humidity8bit(uintdat,floattemp){floatRHline,RHtrue;uintr;RHline=-4+0.648*dat-0.00072*dat*dat;RHtrue=(temp-25)*(0.01+0.00128*dat)+RHline;r=(RHtrue-3)*10+0.5;if(P37==0){if(r=400&&r600){P33=1;}else{P33=0;}if(r=600){P32=1;}else{P32=0;}}return(r);}#endifDis
本文标题:基于89C51单片机SHT11温湿度传感器电路图于程序作者
链接地址:https://www.777doc.com/doc-5214595 .html