您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > DHT11温湿度计设计与制作
DHT11温湿度计本制作采用stc89c52做为微处理器,采用DHT11温湿度传感器采集温湿度数据,该制作可以对空间内的温度、湿度数据进行采集并在1602液晶上显示,该制作硬件电路简单,在一定程度上节省了硬件资源。设计方案一、处理器选择stc89c52单片机Stc89c52单片机价格便宜,并且可以满足一般电子产品的需求,所以本制作选用stc89c52单片机作为该制作的处理器。二温湿度传感器的选择1传统的温度传感器、湿度传感器,一般为模拟传感器。Stc89c52单片机只能处理数字信号,所以使用该类型的传感器必须加上适当的转换电路(信号调理电路、A/D转换电路)这样是硬件电路设计起来复杂,而且这种类型的传感器测量误差比较大。2数字温湿度传感器DHT11►相对湿度和温度测量►全部校准,数字输出►卓越的长期稳定性►无需额外部件►超长的信号传输距离►超低能耗►4引脚安装►完全互换DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。根据以上描述本制作采用DHT11温湿度传感器用做实时温度、湿度采集系统方框图DHT11温湿度传感器Stc89c52单片机1602液晶显示制作原理图(图中液晶部分省去数据接口为P0口)制作实物图源程序#includereg52.h#defineuintunsignedint#defineucharunsignedcharucharDHT11[5],RTflag=0;ucharFLAG;//超时标志位uchara;sbitdat=P1^0;sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^2;uchartable[5];uintwd,sd;voidDelay_t(uintj){uchari;for(;j0;j--){for(i=0;i27;i++);}}voidDelay_10us(void)//10us延时函数{uchari;i--;i--;i--;i--;i--;i--;}voiddelay(uintz)//1毫秒延时函数{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voidlcd_write_com(ucharcom)//1602写指令{RS=0;RW=0;EN=1;P0=com;delay(1);EN=0;}voidlcd_init()//1602初始化{lcd_write_com(0x38);delay(1);lcd_write_com(0x08);delay(1);lcd_write_com(0x01);//1602清屏指令delay(1);lcd_write_com(0x06);delay(1);lcd_write_com(0x0C);delay(1);}voidlcd_write_data(uchardate)//1602写数据{RS=1;RW=0;EN=1;P0=date;delay(1);EN=0;}voidwrite_str(ucharx,uchary,uchar*s)//在任意地址写符号字母或数字{if(y==0)lcd_write_com(0x80+x);elselcd_write_com(0xc0+x);while(*s){lcd_write_data(*s);s++;}}voidwrite_shu(ucharx,uchary,ucharnum)//数据显示函数{uchars,g;if(y==0)lcd_write_com(0x80+x);elselcd_write_com(0xc0+x);s=num/10;//数据分离显示lcd_write_data(0x30+s);g=num%10;//数据分离显示lcd_write_data(0x30+g);}ucharwrite_byte1()//读一个字节{uchari,comdata,temp1;for(i=0;i8;i++){FLAG=2;while((!dat)&&FLAG++);//判断数据位是0还是1Delay_10us();Delay_10us();Delay_10us();temp1=0;if(dat)temp1=1;//如果高电平高过预定0高电平值则数据位为1FLAG=2;while((dat)&&FLAG++);//flag先与后加1如果dat一直为1uchar型变量flag溢出变为0再自加1if(FLAG==1)break;//超时则跳出for循环comdata=1;//左移一位高位在前低位在后comdata|=temp1;}return(comdata);}voidDHT11_5()//读5个字节数据两个字节为温度数据两个字节为湿度数据最后一个字节为校验{uchari,temp;//主机拉低18msdat=0;Delay_t(180);dat=1;//总线由上拉电阻拉高主机延时20usDelay_10us();Delay_10us();Delay_10us();Delay_10us();//主机设为输入判断从机响应信号dat=1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!dat)//T!{FLAG=2;//超时标志位while((!dat)&&FLAG++);//判断从机是否发出80us的低电平响应信号是否结束FLAG=2;while((dat)&&FLAG++);//判断从机拉高80us是否结束for(i=0;i5;i++)//数据接收状态{DHT11[i]=write_byte1();}dat=1;//释放数据总线为下一次读取做好准备temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);if(temp==DHT11[4])//数据校验{RTflag=1;}if(RTflag==1)//如果RTflag=1说明读取到得数据正确{RTflag=0;//tm[0]=DATARHT[0]/10;//tm[1]=DATARHT[0]%10;//tm[2]=DATARHT[1]/10;//湿度//tm[3]=DATARHT[2]/10;//tm[4]=DATARHT[2]%10;//tm[5]=DATARHT[3]/10;//温度write_str(0,0,measurement);//第一行显示湿度write_shu(12,0,DHT11[0]);write_str(14,0,RH);write_str(0,1,Temperature);//第二行为显示温度write_shu(12,1,DHT11[2]);write_str(14,1,^C);}}}voidmain(){lcd_init();//1602初始化delay(1000);//等待DHT11温湿度传感器数据稳定开始激活DHT11while(1)//循环读取并更新数据显示{delay(1000);//等待DHT11温湿度传感器数据稳定开始激活DHT11write_byte1();//读一个字节DHT11_5();//读数据delay(1000);//延时等待}}
本文标题:DHT11温湿度计设计与制作
链接地址:https://www.777doc.com/doc-5700407 .html