室内温湿度控制系统报告汇总Word下载.docx
《室内温湿度控制系统报告汇总Word下载.docx》由会员分享,可在线阅读,更多相关《室内温湿度控制系统报告汇总Word下载.docx(43页珍藏版)》请在冰豆网上搜索。
实现系统的干燥工作。
两盏灯,报警模块:
负责系统的报警功能。
如果当前的温度超过用户设定的界限值时系统将自动报警,灯在单片机的控制下有规律的闪烁,同时报警模块发出报警声,通知用户采取相应的措施。
系统工作流程图
系统的工作流程图
3单元电路设计
单片机系统设计
经过上面的总体方案和实施措施的讨论后可以开始着手硬件系统的设计,硬件系统是应用系统的基础、软件系统设计的依据
根据总体功能和性价比及其运行速度等因素的考虑,选用STC89C52为主机,满足上面的要求而且设计方便,不需要再存储扩展。
STC89C52单片机概述
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,2个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89C52
可降至0Hz
静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
相关参数:
1.
工作电压:
~(5V
单片机)
~(3V
单片机)
2.
工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
3.
用户应用程序空间为8K字节
4.
片上集成512字节RAM
5.
通用I/O口(32个),复位后为:
P0/P1/P2/P3
是准双向口上拉,
P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为
I/O
口用时,需加上拉电阻。
6.
ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/,TxD/)直接下载用户程序,数秒即可完成。
7.
具有EEPROM
功能
8.
具有看门狗功能
9.
共3
个16位定时器/计数器。
即定时器T0、T1、T2
10.外部中断4路,下降沿中断或低电平触发电路,Power
Down
模式可由外部中断低电平触发中断方式唤醒。
11.
通用异步串行口(UART),还可用定时器软件实现多个UART
12.
工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
13.
PDIP
封装
89C52引脚图
传感器的设计
DHT11产品概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传
感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高
的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测
温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快
响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的
湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内
部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集
成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使
其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为4针单排引脚
封装。
连接方便,特殊封装形式可根据用户需求而提供。
DHT11引脚说明
VDD供电3-
DATA串行数据,单总线
NC空脚,请悬空
GND接地,电源负极
液晶显示装置设计
1602A是一种工业字符型液晶,能够同时显示16x02即32个字符。
下图为1602A模块尺寸图
引脚接口说明
VSS电源地9D2数据
VDD电源正极10D3数据
VL液晶显示偏压11D4数据
RS数据/命令选择12D5数据
R/W读/写选择13D6数据
E使能信号14D7数据
D0数据15BLA背光源正极
D1数据16BLK背光源负极
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
1602LCD的一般初始化(复位)过程
延时15mS
写指令38H(不检测忙信号)
延时5mS
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:
显示模式设置
写指令08H:
显示关闭
写指令01H:
显示清屏
写指令06H:
显示光标移动设置
写指令0CH:
显示开及光标设置
液晶显示原理
读写操作时序如图13和图14所示:
读操作时序
写操作时序
光声报警系统与温湿度控制系统设计
本系统采用绿白LED灯作为光报警提示,当系统检测到的数据符合给定的要求时,现场始终白绿灯不亮;
当系统检测到的数据不符合给定的要求时,根据情况(温度超限白灯亮,湿度超限绿灯亮)报警提示;
本系统采用蜂鸣器作为声报警提示,当系统检测到的数据符合给定的要求时,现场没有蜂鸣器报警提示;
当系统检测到的数据不符合给定的要求时,现场蜂鸣器报警提示。
光声报警系统电路图
温湿度控制系统
本系统温湿度控制系统主要组成有:
电机1和电机2。
当系统检测到的数据不符合给定的要求时,系统启动温湿度控制系统实现恒温恒湿的目的。
温湿度检测电路
温湿度控制电路
4软件系统设计
本系统软件系统设计包括:
系统初始化模块,温湿度检测模块,1602LCD显示模块,报警模块,温湿度判断控制模块。
系统软件总体流程图
系统流程图
初始化模块
系统初始化模块的主要功能是完成系统的初始化以及设定系统的工作状态,初始化部分包括以下方面的内容:
4.1.1单片机初始化以及各种引脚定义。
1602液晶初始化及工作方式。
4.1.3系统进入正常工作状态。
温湿度检测模块
温湿度检测模块是本系统中的核心模块之一,它负责完成温度和湿度的测量及模拟量转换为数字量的全过程,这也是它为什么重要的原因。
数字式温湿度传感器DTH11直接把检测到的模拟量转化为数字量送给单片机,在经过单片机的处理,把温湿度值显示在1602液晶上。
温湿度传感器的精确度值直接影响到整个系统的检测与控制,所以本系统采用数字式温湿度传感器DTH11采集温室内的温湿度。
温湿度判断控制模块
温湿度判断控制模块也是系统的核心模块之一,所谓判断控制模块,就是对当前温室内的实际温湿度与给定的温湿度范围进行比较,先进行判断,然后再进行控制,控制模块是决定系统将要进行什么工作的。
如温度高于上限时需要降温,低于下限时需要升温,如湿度高于上限时需要降湿,低于下限时需要増湿,同时还要启动警报等等。
温湿度判断控制部分的程序整体思路如图
温湿度判断控制程序整体思路
1602液晶显示模块
本系统采用1602液晶显示温湿度值,当系统刚开始上电时1602液晶不显示任何数据,等待DTH11的监测数据,双行显示在1602液晶上。
第一行显示:
T:
--。
C第二行显示:
H:
--%
报警模块
报警模块具备两项功能,即为报警灯和声音报警。
报警灯模块是完成LED有规律的闪烁,以便从视觉上提醒用户。
LED是由单片机控制2个双色LED灯组成的,其转换规律为:
1系统温湿度值在给定的范围时,绿色LED亮。
2系统温湿度值超出给定的范围时,白色LED亮。
在LED灯转换的同时,声音报警也会同时启动,可采用延时的方式来延长声音报警的声音。
系统整体软件程序(见附录)
5系统测试
整个软件通过C语言编程,现在keilC51集成开发环境下将程序写出来,并进行编译、调试,调试通过后会生成HEX文件,具体过程为:
新建一个工程,然后在新建一个C语言程序,并把新建的C语言程序添加到工程中,然后编译工程。
(编译后就会生成HEX文件,HEX文件就是要下载到单片机中的程序文件)
(1)点击Project菜单,选择下拉菜单中的NEWProject,工程名用test1表示,保存文件。
(2)选择所要的单片机,我们选择Ateml公司的AT89C51。
(3)在工程中创建新的程序文件,现在编写程序,我们先编写一个单片机I/O口控制LED灯闪烁的程序。
#include<
>
sbitp1=p1^0;
unsignedinta;
voidmain()
{
a=5000;
p1=0;
while(a--);
a=5000;
p1=1;
}
这段程序是用单片机的口控制小灯闪烁,编译,然后将HEX文件下载到单片机中运行程序观察LED灯的点亮情况。
当运行程序后LED灯闪烁,说明编译的程序正确。
当简单的程序正确就可以慢慢的加深难度,开始编写温湿度控制程序,在这里就不在写了(见附表),将写好的程序编译好无错后下载到单片机运行软件观察程序运行情况。
进行优化、改进。
6结论
虽然这个设计做的比较简单,但能完成给定的设计内容。
很多东西考虑的不是很细,也有一些特别情况没有做,但是用了很多精力用来完成这个设计,鉴于个人水平和时间的关系,所以并没有把自己当初设想的所有情况都考虑进去。
这两个星期的设计让我学会的很多,觉得自己学的太少还有很多需要认真学习,学无止境,所以要更努力。
参考文献:
[1]林国汉.基于单片机的温度控制系统设计[J].微计算机信息,2009(25):
21~24
[2]易顺明.基于单片机的大棚温湿度控制系统设计[J].现代电子技术,2011(7):
7~15
[3]张毅刚.单片机原理及应用[M].北京:
高等教育出版社~106
[4]Atmel.Atmel89C51MicrocontrollersHardwareManual,2010.35~98
[5]陈桂友,柴远斌.单片机应用技术[M].北京:
机械工业出版社,~88
[6]熊诗波.机械工程测试技术基础[M].4版.北京:
机械工业出版社,2008.60~102
[7]张新荣.基于单片机的多路温度监测系统设计[J].工业控制计算机,2010(7):
13~21
[8]夏晓南.基于单片机的温箱温度和湿度的控制[J].现代电子技术,2008(5):
6~12
[9]秦曾煌.电工学.电子技术[M].7版.北京:
高等教育出版社,~80
附录
#include<
voiddangqianzhi();
voidread_wsd();
#defineucharunsignedchar"
;
ucharcodetable6[]="
~%C"
ucharnum,num1,s1num,diwen,gaowen,dishi,gaoshi;
unint8RH,RL,TH,TL,CK_data;
unint8TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
unint8com_data,untemp,temp;
unint8respond;
charpiancha1,piancha2,piancha3,piancha4;
voiddelay(uintz)//延时函数,1ms为单位
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
voidwrite_com(ucharcom)//液晶写命令函数
lcdrs=0;
P0=com;
delay(5);
lcden=1;
lcden=0;
voidwrite_data(uchardate)//液晶写数据函数
lcdrs=1;
P0=date;
voidmotor1(charspeed1)//电机1
read_wsd();
dangqianzhi();
m1=abs(speed1);
voidmotor2(charspeed2)//电机2
dangqianzhi();
m2=abs(speed2);
}
voidinit()
diwen=0;
gaowen=0;
dishi=0;
gaoshi=0;
TMOD=0x02;
//设定T0的工作模式为2
TH0=0x9B;
//装入定时器的初值
TL0=0x9B;
EA=1;
//开中断
ET0=1;
//定时器0允许中断
TR0=0;
rs=0;
dula=0;
wela=0;
s1num=0;
num1=0;
write_com(0x38);
//设置16X2显示,5X7点阵,8位数据接口
write_com(0x0f);
//设置开显示,不显示光标
write_com(0x06);
//写一个字符后地址指针加1
write_com(0x01);
//显示清零,数据指针清
write_com(0x80);
//设置显示初始坐标
voidtimer0()interrupt1//T0中断服务程序
{
if(t==0)//1个PWM周期完成后才会接受新数值
{tmp1=m1;
tmp2=m2;
}
if(t<
tmp1)
en1=1;
else
en1=0;
//产生电机1的PWM信号
tmp2)
en2=1;
en2=0;
//产生电机2的PWM信号
t++;
if(t>
=100)
{
t=0;
read_wsd();
dangqianzhi();
}//1个PWM信号由100次中断产生
if(s5==0)
{
TR0=0;
en1=0;
en2=0;
}
voidkeyscan()//按键扫描函数
{
if(s1==0)
{
delay(5);
if(s1==0)
{
s1num++;
while(!
s1);
if(s1num==1)
{
write_com(0x80+0x4f);
write_com(0x0f);
}
if(s1num==2)
{
write_com(0x80+0x4c);
}
if(s1num==3)
write_com(0x80+0x0f);
if(s1num==4)
write_com(0x80+0x0c);
if(s1num==5)
s1num=0;
write_com(0x0c);
}
}
if(s1num!
=0)
if(s2==0)
delay(5);
if(s2==0)
{
while(!
s2);
if(s1num==1)
{
gaoshi++;
write_com(0x80+0x4e);
write_data(table4[gaoshi/10]);
write_com(0x80+0x4f);
write_data(table4[gaoshi%10]);
}
if(s1num==2)
{
dishi++;
write_com(0x80+0x4b);
write_data(table4[dishi/10]);
write_com(0x80+0x4c);
write_data(table4[dishi%10]);
}
if(s1num==3)
gaowen++;
write_com(0x80+0x0e);
write_data(table4[gaowen/10]);
write_com(0x80+0x0f);
write_data(table4[gaowen%10]);
if(s1num==4)
diwen++;
write_com(0x80+0x0b);
write_data(table4[diwen/10]);
write_com(0x80+0x0c)