一.硬件方案
本设计采用51单片机每2秒钟从DHT11温湿度传感器中读入温度和湿度,在液晶屏上即时显示。液晶屏上同时显示温湿度上限值,该上限值保存外外部EEPROM存储器中,掉电不失,并且可以通过四只按键上调或下调。当温度或湿度值超过上限值时,报警信号点亮相应报警灯。该报警信号可以通过三极管驱动继电器,以控制外部风机或加热器。电路主要由51单片机+最小系统+LCD1602液晶显示模块+温湿度采集模块+继电器驱动模块+风扇模块+LED指示灯模块+按键模块+AT24C02存储模块+蜂鸣器报警模块;
二.设计功能
(1)AT24c02芯片掉电存储设置的上下限。
(2)四个按键为设置、加、减、确定,实现了阀值的调节。
(3)LCD1602液晶显示,上面行显示当前的温度和湿度,下面行显示相应的冷、热、干、湿。
(4)配用全数字型温湿度传感器DHT11,温度测量范围0℃–50℃,湿度测量范围20%RH—90%RH,可以满足一般需要。
(5)当超过阀值的时候,有蜂鸣器闪烁报警提示。并有开关可以关闭或打开报警。
(6)当温度或湿度超限后,报警信号灯点亮同时相应的继电器吸合。继电器可以驱动打开或切断通风机、抽湿机、加热器、制冷器、加湿器、报警器等外部设备;
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
四.软件设计
主程序源码
//数据初始化
void Data_Init()
{Led_qushi = 1;Led_jiashi=1;Led_jiangwen = 1;Led_shengwen = 1;
}/********************************************************************
* 名称 : Main()
* 功能 : 主函数
***********************************************************************/
void main()
{uint i, j, testnum;EA = 0;Timer0_Init(); //定时器0初始化Data_Init();EA = 1;L1602_init();//延时for (i=0;i<1000;i++)for (j=0;j<1000;j++){;}//清屏L1602_string(1,1," ");L1602_string(2,1," ");L1602_string(1,1,"Tem: C Hum: %");L1602_string(2,1,"Smalldi@2017");/***载入温度上限和湿度上限设定值***/TH=rdeeprom(0); Delay1(20); //加延时可以存取稳定TL=rdeeprom(1);Delay1(20);HH=rdeeprom(2);Delay1(20);HL=rdeeprom(3);while(1){if (FlagStartRH == 1) //温湿度转换标志检查{TR0 = 0;testnum = RH();FlagStartRH = 0;TR0 = 1;humidity = U8RH_data_H; //读出温湿度,只取整数部分temperature = U8T_data_H;if(Mode==0) //温湿度控制{if (temperature > TH){Led_jiangwen = 0;hot=1;Led_shengwen = 1;cold=0;// BJ=1;}else if(temperature<TL){Led_shengwen = 0;cold=1;Led_jiangwen = 1;hot=0;buzz=0;// BJ=1;} else{Led_jiangwen=1;Led_shengwen=1;hot=0;cold=0;buzz=1;}if (humidity > HH){Led_qushi = 0;humid=1;Led_jiashi = 1;dry=0;// BJ=1;}else if(humidity<HL){Led_jiashi = 0;dry=1;Led_qushi = 1;humid=0;// BJ=1;} else{Led_qushi=1;Led_jiashi=1;humid=0;dry=0;} }else{Led_shengwen=1;Led_jiangwen=1;Led_jiashi=1;Led_qushi=1;hot=0;cold=0;humid=0;dry=0;BJ=0;} }display();KEY();}
}
资料链接:https://pan.baidu.com/s/1qgz2Z1v2hDcxkEuL0h6bzg?pwd=jcea