当前位置:文档之家› 基于单片机的温湿度控制系统

基于单片机的温湿度控制系统

目录目录 (I)第1章绪论 (1)1.1课题研究的背景 (1)1.2课题研究的意义 (1)1.3课题研究的主要内容 (2)1.4课题研究的工作原理 (2)第2章系统总体方案设计.................................................................................. 错误!未定义书签。

2.1功能要求 .................................................................................................... 错误!未定义书签。

2.2设计思路 .................................................................................................... 错误!未定义书签。

2.3方案选择 .................................................................................................... 错误!未定义书签。

2.3.1 传感器选择方案................................................................................ 错误!未定义书签。

2.3.2 显示器选择方案................................................................................ 错误!未定义书签。

2.3.3 单片机主芯片选择方案.................................................................... 错误!未定义书签。

2.4总体设计框图.............................................................................................. 错误!未定义书签。

第3章系统硬件设计.......................................................................................... 错误!未定义书签。

3.1概述 ............................................................................................................ 错误!未定义书签。

3.2主控模块设计 ............................................................................................ 错误!未定义书签。

3.2.1 STC89C52芯片的简介....................................................................... 错误!未定义书签。

3.2.2 主控模块电路原理图........................................................................ 错误!未定义书签。

第4章系统软件设计.......................................................................................... 错误!未定义书签。

4.11602液晶显示模块设计 ........................................................................... 错误!未定义书签。

4.2传感器模块设计 ........................................................................................ 错误!未定义书签。

第5章系统分析与调试...................................................................................... 错误!未定义书签。

第6章结论与展望 ............................................................................................. 错误!未定义书签。

致谢 ..................................................................................................................... 错误!未定义书签。

附录 . (4)附录C 程序清单 (4)第1章绪论1.1 课题研究的背景温度、湿度和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最基本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度湿度的检测与控制。

并且随着人们生活水平的提高,人们对自己的生存环境越来越关注。

而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度湿度的检测及控制就非常有必要了。

随着科技的飞速发展和普及,高性能设备越来越多,各行各业对温湿度的要求也越来越高。

传统的温湿度检测模式是以人为基础,依靠人工轮流值班,人工巡回查看等方式来测量和记录环境状况信息。

在这种模式下,不仅效率低不利于人才资源的充分利用,而且缺乏科学性,许多重大事故都是由人为因素造成的,人工维护缺乏完整的管理系统。

而问世监控系统就可以解决这样人才资源浪费,管理不及时的问题,这是由于它的智能化设计所决定的。

故本次设计对于类似项目还具有普遍意义。

1.2 课题研究的意义8051单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度控制系统的实力也很多。

使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习掌握,性价比高。

使用8051型单片机设计温湿度控制系统,可以即时精确的反应温室内的温度以及适度的变化。

完成诸如升温到特定的温度、降温到特定的温度。

在温度上下限范围内保持恒温等多种控制方式,在湿度控制方面也是如此。

将此系统应用到温室当中无疑为植被生长提供了更加适宜的环境。

对于大棚种植和花圃、花卉栽培,必须在某些特定环境安装温湿度装置对其进行监控。

本系统可以及时、精确的反映室内的温度以及湿度的变化,能够满足温湿度的控制要求。

1.3 课题研究的主要内容本系统所要完成的任务是:1.3.1人性化的设计。

界限温度值及湿度值能够由用户根据不同植被的各种生长需求由键盘输入并通过显示器显示。

1.3.2 能够实时、准确的显示采样温度值与湿度值。

1.3.3通过采集温度及湿度值,准确的判断标准值与当前值之间的差异,及时的启动报警装置(警报提示音提示音)进行报警,并采取相应的方案。

1.3.4能够根据环境在不同时间段内对温湿度的不同要求,用户可随机人为的更改温度及湿度值,以满足用户不同的需求。

1.4 课题研究的工作原理该电路的最关键部分是关于温度和湿度的采集以及检测、显示。

主控电路芯片采用学校统一制作的STC89C52单片机学习板。

STC单片机执行指令的速度很快,对工作环境的要求比较低;传感器模块我选择了DHT11数字温湿度传感器。

告别了以前的单独测量温度以及湿度的方式,更简洁,更方便。

连接好外围电路。

通过DHT11准确的检测出当前环境下的温湿度,并且将所测数据交给STC单片机进行分析和处理。

再将所得数据有单片机发送给HJ1602A液晶屏。

成功完成显示。

控制模块采用蜂鸣器报警方式。

预先设置好所需温度和湿度的限值(一个上限一个下限),将蜂鸣器接入电路。

通过温度和湿度的上下限值控制蜂鸣器的报警。

若逾越限值,实现蜂鸣器鸣响。

但是需要注意的是温度超标和湿度超标需设置两种不同的鸣响方式,用来加以区别(温度越限以及湿度越限蜂鸣器的领翔方式必须不一样)。

提醒工作人员此时温度湿度数据出现异常、需及时调整,及时启用升温器、加湿器、降温风扇以及喷雾器来有效的调整实验室内温湿度。

从而简单实现了控制。

总体来说,本次设计主要涉及了温湿度的测量以及实现简单控制。

硬件方面有四个模块,即传感器模块、STC80C52单片机主控模块、LCD1602液晶显示模块以及报警模块,从硬件制作方面。

也相对简便。

原理清晰、连线方便,不需要额外的焊接等技术。

给硬件的制作带来了极大的便捷。

参考文献[1] 陈明荧.8051单片机课程设计实训教材[M]. 北京:清华大学出版社,2003.[2] 徐新艳.单片机原理、应用与实践[M]. 北京:高等教育出版社,2005.[3] 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M]. 北京:清华大学出版社,2002.[4] 王千.实用电子电路大全[M]. 电子工业出版社,2001.[5] 冯博琴.微型计算机原理与接口技术[M]. 北京:清华大学出版社,2004.[6] 张毅刚.MCS-51单片机应用设计[M]. 哈尔滨工业大学出版社,2004.[7] 张淑清,姜万录等.单片微型计算机接口技术及应用[M]. 国防工业出版社,2003.[8] 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M]. 北京:清华大学出版社,2001.[9] 冯博琴.微型计算机原理与接口技术[M]. 清华大学出版社,2004.[10] 张毅刚.MCS-51单片机应用设计[M]. 哈尔滨工业大学出版社,2004.[11] 赵亮,侯国锐.单片机C语言编程与实例[M]. 北京:人民邮电出版社,2003.[12] 王振红,李洋,郝承祥.ISD4004语音芯片的工作原理及其在智能控制系统中的应用[J].电子器件2002年3月第25卷第1期.[13] R.L.Geiger,P.E.Allen,N.R.Strader.VLSI.Design Techniques for Analog And DigitialCiruits,McGraw-Hill Inc.1990.[14] ANALOG DEVICES.The technology of AT89C51[EB/OL].White Paper,Spe.28.2000.附录附录C 程序清单//****************************************************************////单片机: STC89C52RC// 功能:串口发送温湿度数据晶振11.0592M 波特率9600//硬件连接:P2.0口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑//****************************************************************//#include <reg51.h>#include <intrins.h>#include <absacc.h>typedef unsigned char U8; /* defined for unsigned 8-bits integer variable无符号8位整型变量*/typedef unsigned int U16; /* defined for unsigned 16-bits integer variable无符号16位整型变量*/#define lcd_H#include <reg51.h>#define HIGH 1#define LOW 0#define TRUE 1#define FALSE 0#define ZERO 0#define MSB 0x80#define LSB 0x01//********液晶屏部分****#define LINE1 0#define LINE2 1#define LINE1_HEAD 0x80#define LINE2_HEAD 0xC0#define DATA_MODE 0x38#define OPEN_SCREEN 0x0C#define DISPLAY_ADDRESS 0x80#define CLEARSCREEN LCD_en_com(0x01)#define LCDIO P1sbit LCD1602_RS = P2^4; //定义端口sbit LCD1602_RW = P2^3;sbit LCD1602_EN = P2^2;//----------------------------------------------////----------------IO口定义区--------------------////----------------------------------------------//sbit P2_0 = P2^0 ;sbit SPK=P0^7;int t1,t2,ss;//----------------------------------------------////----------------定义区--------------------////----------------------------------------------//U8 U8FLAG;U8 U8count,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8che ckdata_temp;U8 U8comdata;unsigned char str1[]={'s','h','i','d','u',':'};unsigned char str2[]={'w','e','n','d','u',':'};LCD_init();void Delay(U16 j){ U8 i;for(;j>0;j--){for(i=0;i<27;i++);}}void Delay_10us(void){U8 i;i--;i--;i--;i--;i--;i--;}void COM(void){U8 i;for(i=0;i<8;i++){U8FLAG=2;while((!P2_0)&&U8FLAG++); Delay_10us();Delay_10us();Delay_10us();U8temp=0;if(P2_0)U8temp=1;U8FLAG=2;while((P2_0)&&U8FLAG++);//超时则跳出for循环if(U8FLAG==1)break;//判断数据位是0还是1// 如果高电平高过预定0高电平值则数据位为1U8comdata<<=1;U8comdata|=U8temp; //0}//rof}void LCD_Read_BF(void){unsigned char read=0;LCD1602_RS=LOW;LCD1602_RW=HIGH;LCD1602_EN=HIGH;LCDIO=0XFF;read=LCDIO;}void LCD_en_com(unsigned char command)//写指令{LCD_Read_BF();LCD1602_RS=LOW;LCD1602_RW=LOW;LCD1602_EN=HIGH;LCDIO=command;LCD1602_EN=LOW;}void LCD_en_dat(unsigned char dat)//写数据{LCD_Read_BF();LCD1602_RS=HIGH;LCD1602_RW=LOW;LCD1602_EN=HIGH;LCDIO=dat;LCD1602_EN=LOW;}void LCD_set_xy(unsigned char x,unsigned char y) //写入地址函数{unsigned char address;if(y==LINE1)address=LINE1_HEAD+x;else address=LINE2_HEAD+x;LCD_en_com(address);}void LCD_write_char(unsigned char x,unsigned char y,unsigned char dat)//写入字符函数{LCD_set_xy(x,y);LCD_en_dat(dat);}void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s)//写入字符串函数{LCD_set_xy(x,y);while(*s){LCDIO=*s;LCD_en_dat(*s);s++;}}void LCD_Init(void) //初始化函数{LCD_en_com(0x38); /*显示模式设置*/Delay(5);LCD_en_com(0x38);Delay(5);LCD_en_com(0x38);Delay(5);LCD_en_com(0x38);LCD_en_com(0x08); /*显示关闭*/LCD_en_com(0x01); /*显示清屏*/LCD_en_com(0x06); /*显示光标移动设置*/ Delay(5);LCD_en_com(0x0C); /*显示开及光标设置*/ }//--------------------------------//-----湿度读取子程序------------//--------------------------------//----以下变量均为全局变量--------//----温度高8位== U8T_data_H------//----温度低8位== U8T_data_L------//----湿度高8位== U8RH_data_H-----//----湿度低8位== U8RH_data_L-----//----校验8位== U8checkdata-----//----调用相关子程序如下----------//---- Delay();, Delay_10us();,COM();//--------------------------------void RH(void){//主机拉低18msP2_0=0;Delay(180);P2_0=1;//总线由上拉电阻拉高主机延时20usDelay_10us();Delay_10us();Delay_10us();Delay_10us();//主机设为输入判断从机响应信号P2_0=1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!P2_0) //T !{U8FLAG=2;//判断从机是否发出80us 的低电平响应信号是否结束while((!P2_0)&&U8FLAG++);U8FLAG=2;//判断从机是否发出80us 的高电平,如发出则进入数据接收状态while((P2_0)&&U8FLAG++);//数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;P2_0=1;//数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L _temp);if(U8temp==U8checkdata_temp){U8RH_data_H=U8RH_data_H_temp;U8RH_data_L=U8RH_data_L_temp;U8T_data_H=U8T_data_H_temp;U8T_data_L=U8T_data_L_temp;U8checkdata=U8checkdata_temp;}//湿度整数部分str1[6] = (char)(0X30+U8RH_data_H/10);str1[7] = (char)(0X30+U8RH_data_H%10);//湿度小数部分str1[9] = (char)(0X30+U8RH_data_L/10);//温度整数部分str2[6] = (char)(0X30+U8T_data_H/10);str2[7] = (char)(0X30+U8T_data_H%10);//温度小数部分str2[9] = (char)(0X30+U8T_data_L/10);t1=(int)(0X30+U8T_data_H/10);t2=(int)(0X30+U8T_data_H%10);ss=t1*10+t2;}}void xianshi(void){LCD_write_char(0x00,0,'s');LCD_write_char(0x01,0,'h');LCD_write_char(0x02,0,'i');LCD_write_char(0x03,0,'d');LCD_write_char(0x04,0,'u');LCD_write_char(0x05,0,':');LCD_write_char(0x06,0,str1[6]);LCD_write_char(0x07,0,str1[7]);LCD_write_char(0x08,0,'.');LCD_write_char(0x09,0,str1[9]);LCD_write_char(0x0B,0,'%');LCD_write_char(0x0C,0,'R');LCD_write_char(0x0D,0,'H');LCD_write_char(0x00,1,'w');LCD_write_char(0x01,1,'e');LCD_write_char(0x02,1,'n');LCD_write_char(0x03,1,'d');LCD_write_char(0x04,1,'u');LCD_write_char(0x05,1,':');LCD_write_char(0x06,1,str2[6]);LCD_write_char(0x07,1,str2[7]);LCD_write_char(0x08,1,'.');LCD_write_char(0x09,1,str1[9]);LCD_write_char(0x0B,1,0x27);LCD_write_char(0x0C,1,'C');}//----------------------------------------------//main()功能描述: AT89C51 11.0592MHz 串口发//送温湿度数据,波特率9600//----------------------------------------------void main(){LCD_init();Delay(4);while(1){//调用温湿度读取子程序RH();xianshi();}}。

相关主题