温湿度控制器设计报告本设计研究单片机数字温湿度控制器,通过全数字型温湿度传感器测量宽范围的温湿度数据,用来满足恒温湿车间控制、大棚温湿度控制等工农业生产领域需要,要求温湿度测量响应时间快、长期稳定性好,抗干扰能力强,具有较高的应用价值。
一、性能特点●配用全数字型温湿度传感器DHT11,温度测量范围0℃--100℃,湿度测量范围0%RH—90%RH,可以满足一般需要。
若要求更宽测量范围,只需更换温湿度传感器型号,硬件电路及软件程序全兼容。
●温湿度测量响应时间快、长期稳定性好。
●采用先进的专用微处理器芯片STC89C52,可靠性高,抗干扰能力强。
●配用EEPROM芯片A T24C04,使存储的温度上下限和湿度上下限可以掉电永久保存。
●可以通过四个按键方便地实现温湿度上下限的调整。
●当温度或湿度超限后,报警信号点亮相应报警灯。
●配用三极管和继电器,可以通过驱动继电器打开或切断风机、加热器等外部设备。
二、功能说明1、实时测量当前温度值和湿度值,在液晶屏动态显示。
2、可以显示当前允许温度范围,在液晶屏显示,如“20-45”表示允许温度范围为20摄氏度至45摄氏度。
3、可以显示当前允许湿度范围,在液晶屏显示,如“15-60”表示允许湿度范围为15%至60%。
4、当温度低于温度下限时,低温报警灯亮,控制继电器动作。
5、当温度高于温度上限时,高温报警灯亮,控制继电器动作。
6、当湿度低于湿度下限时,低湿报警灯亮,控制继电器动作。
7、当湿度高于湿度上限时,高湿报警灯亮,控制继电器动作。
8、可以通过键盘调整温度上下限和湿度上下限,具体方法是连续按设置键直至温度下限、温度上限、湿度下限、湿度上限相应的位置闪烁,再通过Up键和Down键调整数值,调整完毕继续按设置键进入正常状态。
9、可以保存设置参数至EEPROM中,具体方法是按保存键,此时当前设置参数存盘,重新上电显示新的设置值。
如果不按保存键,所调整的设置参数只在此次运行有效,关电后恢复原先设定值。
三、硬件设计1、设计框图本研究设计的温湿度控制器框图如图1所示。
图1 温湿度控制器方框图图中STC89C52单片机每2秒钟从DHT11温湿度传感器中读入温度和湿度,在液晶屏上即时显示。
液晶屏上同时可以显示温湿度上下限值,该上下限设置值保存外外部EEPROM存储器中,掉电不失,并且可以通过四只按键上调或下调。
当温度或湿度值超过上下限值时,报警信号点亮相应报警灯。
同时该报警信号通过三极管驱动继电器,以控制外部风机或加热器。
2、温湿度传感器器及检测电路图2 DHT11温湿度传感器外型及管脚DHT11温湿度传感器外型及管脚如图2所示。
其中电源引脚的供电电压为3.5--5.5V。
传感器上电后,要等待 1s 以越过不稳定状态在此期间不要发送任何指令。
电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。
DHT11典型应用电路如图3所示,其连接电路简单,只需要占用控制器一个I/O 口即可完成上下位的连接。
建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻,图3 DHT11典型应用电路DHT11数字湿温度传感器采用单总线数据格式,即单个数据引脚端口完成输入输出双向传输。
其数据包由5Byte(40Bit)组成。
一次完整的数据传输为40bit,高位先出。
数据格式如表一:表1 DHT11数据格式3、单片机电路(1) STC89C52 单片机特点●增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;●工作电压: 5.5V - 3.5V(5V单片机);●工作频率范围:0~40MHz,相当于普通8051的 0~80MHz;●用户应用程序空间 4K//8K/16k/32K/64K字节;●片上集成1280字节 RAM;●通用I/O口(32/36个),复位后为准双向口/弱上拉(普通8051传统I/O口);●ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器。
●每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA;●可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;●有EEPROM功能;●看门狗;●内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);●时钟源:外部高精度晶体/时钟,内部R/C振荡器;●用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/时钟;●常温下内部R/C 振荡器频率为:5.0V 单片机为: 11MHz ~ 17MHz;●共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器;●外部中断I/O口4路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒;●通用全双工异步串行口(UART) ;●工作温度范围:-40 ~ +85℃(工业级) / 0 ~ 75℃(商业级) ;封装:PDIP-40, PLCC-44。
(2) STC89C52 单片机管脚及封装STC89C52 单片机有多种封装形式,本设计中选用40DIP封装,其管脚定义如图4所示。
其最小应用系统如图5所示。
图4 STC89C52 管脚图图5 单片机最小系统(4) 单片机电路由STC89C52组成的温湿度控制器单片机系统原理图如图6所示。
图中DATA引脚为温湿度传感器单总线引脚,单片机通过该引脚和传感器通信,读取温湿度数据。
K1、K2、K3、K4为四只调节按键,分别为设置键、上调键、下调键和保存键,用以调整温湿度上下限值并保存数据。
L2、L3、L4、L5为四只报警灯,其中L2为低温报警,L3为高温报警,L4为低湿报警,L5为高湿报警。
图6 单片机系统原理图4、显示电路显示部分采用SMC 1602液晶屏进行数据显示,其主要技术参数为:表2 液晶屏技术指标接口信号说明如表3所示。
表3 液晶屏接口信号说明与单片机接口电路如图7所示。
图7 LCD与单片机接口电路5、温湿度上限存储温湿度阈值存储在EEPROM芯片AT24C04中,并可以通过K1—K4按键调节并保存,其中K1、K2、K3、K4分别为设置键、上调键、下调键和保存键。
AT24C04是IIC芯片,其电路如图8所示。
图8 EEPROM存储电路6、继电器驱动电路当温湿度数据超过正常范围时,单片机发出继电器动作信号。
该低电平信号通过三极管方法,驱动继电器线圈得电,继电器结点动作。
该结点可以控制空调、加热器、抽风机等电器,以控制温湿度范围。
具体电路如图9所示。
图9 继电器电路四、Portel电路图设计Protel是目前国内最流行的通用EDA软件,它是将电路原理图设计、PCB板图设计、电路仿真和PLD设计等多个实用工具软件组合后构成的EDA工作平台,是第一个将EDA软件设计成基于Windows的普及型产品。
它集成了软件界面、仿真功能和PLD设计和信号完整性分析,在此基础上Protel 99SE又增加了一些新的功能,用户使用更加方便灵活。
Protel的功能十分强大,在电子电路设计领域占有极其重要的地位。
它以其强大功能和实用性,逐渐获得广大硬件设计人员的青睐,是目前众多EDA设计软件中用户最多的产品之一。
Protel软件组成Protel软件主要由电路原理图设计模块、印制电路板设计模块(PCB设计模块)、电路信号仿真模块和PLD逻辑器件设计模块等组成,各模块具有强大的功能,可以很好的实现电路设计与分析。
(1) 原理图设计模块(Schematic模块)电路原理图是表示电气产品或电路工作原理的重要技术文件,电路原理图主要由代表各种电子器件的图形符号、线路和结点组成。
图4.1所示为一张电路原理图。
该原理图是由Schematic模块设计完成的。
Schematic 模块具有如下功能:丰富而灵活的编辑功能、在线库编辑及完善的库管理功能、强大的设计自动化功能、支持层次化设计功能等。
(2) 印制电路板设计模块(PCB设计模块)印制电路板(PCB)制板图是由电路原理图到制作电路板的桥梁。
设计了电路原理图后,需要根据原理图生设计成印制电路板的制板图,然后在根据制板图制作具体的电路板。
印制电路板设计模块具有如下主要功能和特点:可完成复杂印制电路板(PCB)的设计;方便而又灵活的编辑功能;强大的设计自动化功能;在线式库编辑及完善的库管理;完备的输出系统等。
(3) 电路信号仿真模块电路信号仿真模块是一个功能强大的数字/模拟混合信号电路仿真器,能提供连续的模拟信号和离散的数字信号仿真。
它运行在Protel的EDA/Client集成环境下,与Protel Advanced Schematic原理图输入程序协同工作,作为Advanced Schematic的扩展,为用户提供了一个完整的从设计到验证仿真设计环境。
在Protel中进行仿真,只需从仿真用元器件库中放置所需的元器件,连接好原理图,加上激励源,然后单击防真按钮即可自动开始。
五、软件编程1、软件流程图本设计软件主程序流程图如图13所示。
图13 主程序流程图2、主程序下面介绍main.c主程序编写,其他程序略。
(1) 头文件和一些宏定义#include <reg52.h>#include "1602.h"#include "dht.h"#include "2402.h"(2) 管脚定义//定义三个LED灯sbit L2=P1^3;sbit L3=P1^4;sbit L4=P1^5;sbit L5=P1^6;sbit Key_SET = P3^2; //设置键sbit Key_UP= P3^3; //加键sbit Key_DOWN = P3^4; //减键sbit Key_SA VE = P3^5; //保存键sbit Relay = P2^0;(3) 常量、变量定义//定义标识volatile bit FlagStartRH = 0; //开始温湿度转换标志volatile bit FlagKeyPress = 0; //有键按下//定义温湿度传感器用外部变量extern U8 U8FLAG,k;extern U8 U8count,U8temp;extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;extern U8 U8comdata;extern U8 count, count_r;U16 temp;S16 temperature, humidity;S16 idata TH, TL, HH, HL; //温度上限和湿度上限char * pSave;U8 keyvalue, keySET, keySA VE, keyUP, keyDOWN;//定义变量U16 RHCounter;U8 FlagSet,hide;(4) 各子程序//数据初始化void Data_Init(){RHCounter = 0;L2 = 1;L3 = 1;L4 = 1;TH = 40;TL = 20;HH = 85;HL = 20;keyvalue = 0;keySET = 1;keySA VE = 1;keyUP = 1;keyDOWN = 1;FlagSet = 0;hide = 0;}//定时器0初始化void Timer0_Init(){ET0 = 1; //允许定时器0中断TMOD = 1; //定时器工作方式选择TL0 = 0x06;TH0 = 0xf8; //定时器赋予初值TR0 = 1; //启动定时器}//定时器0中断void Timer0_ISR (void) interrupt 1 using 0{TL0 = 0x06;TH0 = 0xf8; //定时器赋予初值RHCounter ++;//设闪烁标志if (RHCounter>400) hide = 0;else hide = 1;//每2秒钟启动一次温湿度转换if (RHCounter >= 800){FlagStartRH = 1;RHCounter = 0;}}//存入设定值、void Save_Setting(){pSave = (char *)&TL; //地址低位对应低8位,高位对应高8位wrteeprom(0, *pSave); //存温度上限值TH低8位DELAY(500);pSave ++;wrteeprom(1, *pSave); //存温度上限值TH高8位DELAY(500);pSave = (char *)&TH;wrteeprom(2, *pSave); //存温度下限值TL低8位DELAY(500);pSave ++;wrteeprom(3, *pSave); //存温度下限值TL高8位DELAY(500);pSave = (char *)&HL; //地址低位对应低8位,高位对应高8位wrteeprom(4, *pSave); //存湿度上限值HH低8位DELAY(500);pSave ++;wrteeprom(5, *pSave); //存湿度上限值HH高8位DELAY(500);pSave = (char *)&HH;wrteeprom(6, *pSave); //存湿度下限值HL低8位DELAY(500);pSave ++;wrteeprom(7, *pSave); //存湿度下限值HL高8位DELAY(500);}//载入设定值、void Load_Setting(){pSave = (char *)&TL;*pSave++ = rdeeprom(0);*pSave = rdeeprom(1);pSave = (char *)&TH;*pSave++ = rdeeprom(2);*pSave = rdeeprom(3);pSave = (char *)&HL;*pSave++ = rdeeprom(4);*pSave = rdeeprom(5);pSave = (char *)&HH;*pSave++ = rdeeprom(6);*pSave = rdeeprom(7);if ((TL>99)||(TL<0)) TL = 20;if ((TH>99)||(TH<0)) TH = 40;if ((HL>99)||(HL<0)) HH = 20;if ((HH>99)||(HH<0)) HH = 85;}void KeyProcess(uint num){//键盘设置功能:通过设置键和加、减键修改当前设置,只有按下保存键才存盘,否则掉电不保存。