《基于单片机的温湿度控制系统.doc》由会员分享,可在线阅读,更多相关《基于单片机的温湿度控制系统.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录目录IV第1章绪论11.1课题研究的背景11.2课题研究的意义11.3课题研究的主要内容21.4课题研究的工作原理2第2章系统总体方案设计32.1功能要求32.2设计思路32.3方案选择32.3.1传感器选择方案32.3.2显示器选择方案42.3.3单片机主芯片选择方案42.4 总体设计框图5第3章系统硬件设计73.1概述73.2主控模块设计73.2.1STC89C52芯片的简介73.2.2主控模块电路原理图9第4章系统软件设计104.11602液晶显示模块设计124.2传感器模块设计14第5章系统分析与调试16第6章结论与展望18致谢20附录21附录C程序清单21学习文档 仅供参考第1章
2、绪论1.1课题研究的背景温度、湿度和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最基本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度湿度的检测与控制。并且随着人们生活水平的提高,人们对自己的生存环境越来越关注。而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度湿度的检测及控制就非常有必要了。随着科技的飞速发展和普及,高性能设备越来越多,各行各业对温湿度的要求也越来越高。传统的温湿度检测模式是以人为基础,依靠人工轮流值班,人工巡回查看等方式来测量和记录环境状况信息。在这种模式下,不仅效率低不利于人才资源的充分利用,而且缺乏科学性,许多重大事故都是由人
3、为因素造成的,人工维护缺乏完整的管理系统。而问世监控系统就可以解决这样人才资源浪费,管理不及时的问题,这是由于它的智能化设计所决定的。故本次设计对于类似项目还具有普遍意义。1.2课题研究的意义8051单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度控制系统的实力也很多。使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习掌握,性价比高。使用8051型单片机设计温湿度控制系统,可以即时精确的反应温室内的温度以及适度的变化。完成诸如升温到特定的温度、降温到特定的温度。在温度上下限范围内保持恒温等多种控制方式,在湿度控
4、制方面也是如此。将此系统应用到温室当中无疑为植被生长提供了更加适宜的环境。对于大棚种植和花圃、花卉栽培,必须在某些特定环境安装温湿度装置对其进行监控。本系统可以及时、精确的反映室内的温度以及湿度的变化,能够满足温湿度的控制要求。1.3课题研究的主要内容本系统所要完成的任务是:1.3.1人性化的设计。界限温度值及湿度值能够由用户根据不同植被的各种生长需求由键盘输入并通过显示器显示。1.3.2 能够实时、准确的显示采样温度值与湿度值。1.3.3通过采集温度及湿度值,准确的判断标准值与当前值之间的差异,及时的启动报警装置警报提示音提示音进行报警,并采取相应的方案。1.3.4能够根据环境在不同时间段内
5、对温湿度的不同要求,用户可随机人为的更改温度及湿度值,以满足用户不同的需求。1.4课题研究的工作原理该电路的最关键部分是关于温度和湿度的采集以及检测、显示。主控电路芯片采用学校统一制作的STC89C52单片机学习板。STC单片机执行指令的速度很快,对工作环境的要求比较低;传感器模块我选择了DHT11数字温湿度传感器。告别了以前的单独测量温度以及湿度的方式,更简洁,更方便。连接好外围电路。通过DHT11准确的检测出当前环境下的温湿度,并且将所测数据交给STC单片机进行分析和处理。再将所得数据有单片机发送给HJ1602A液晶屏。成功完成显示。控制模块采用蜂鸣器报警方式。预先设置好所需温度和湿度的限
6、值一个上限一个下限,将蜂鸣器接入电路。通过温度和湿度的上下限值控制蜂鸣器的报警。假设逾越限值,实现蜂鸣器鸣响。但是需要注意的是温度超标和湿度超标需设置两种不同的鸣响方式,用来加以区别温度越限以及湿度越限蜂鸣器的领翔方式必须不一样。提醒工作人员此时温度湿度数据出现异常、需及时调整,及时启用升温器、加湿器、降温风扇以及喷雾器来有效的调整实验室内温湿度。从而简单实现了控制。总体来说,本次设计主要涉及了温湿度的测量以及实现简单控制。硬件方面有四个模块,即传感器模块、STC80C52单片机主控模块、LCD1602液晶显示模块以及报警模块,从硬件制作方面。也相对简便。原理清晰、连线方便,不需要额外的焊接等
7、技术。给硬件的制作带来了极大的便捷。参考文献1 陈明荧.8051单片机课程设计实训教材M. 北京:清华大学出版社,20032 徐新艳.单片机原理、应用与实践M. 北京:高等教育出版社,20053 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用M. 北京:清华大学出版社,2002.4 王千.实用电子电路大全M. 电子工业出版社,2001.5 冯博琴.微型电脑原理与接口技术M. 北京:清华大学出版社,2004.6 张毅刚.MCS-51单片机应用设计M. 哈尔滨工业大学出版社,2004.7 张淑清,姜万录等.单片微型电脑接口技术及应用M. 国防工业出版社,2003.8 吴金戌,沈庆阳,郭庭吉.80
8、51单片机实践与应用M. 北京:清华大学出版社,2001.9 冯博琴.微型电脑原理与接口技术M. 清华大学出版社,2004.10 张毅刚.MCS-51单片机应用设计M. 哈尔滨工业大学出版社,2004.11 赵亮,侯国锐.单片机C语言编程与实例M. 北京:人民邮电出版社,2003.12 王振红,李洋,郝承祥.ISD4004语音芯片的工作原理及其在智能控制系统中的应用J. 电子器件2002年3月第25卷第1期.13 ,N.R.Strader.VLSI.Design Techniques for Analog And Digitial Ciruits,McGraw-Hill Inc.1990. 1
9、4 ANALOG DEVICES.The technology of AT89C51EB/OL.White Paper,Spe.28.2000.附录附录C程序清单/*/单片机 : STC89C52RC / 功能 :串口发送温湿度数据 晶振 11.0592M 波特率 9600 /硬件连接: P2.0口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑 /*/#include #include #include typedef unsigned char U8; /* defined for unsigned 8-bits integer varia
10、ble 无符号8位整型变量 */typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */#define lcd_H#include #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 L
11、INE2_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 = P24; /定义端口 sbit LCD1602_RW = P23;sbit LCD1602_EN = P22;/-/-IO口定义区-/-/sbit P2_0 = P20 ;sbit SPK=P07;int t1,t2,ss;/-/-定义区-/-/U8 U8FLAG;U8 U8coun
12、t,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_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(;j0;j-) for(i=0;i27;i+); void
13、 Delay_10us(void) U8 i; i-; i-; i-; i-; i-; i-; void COM(void) U8 i; for(i=0;i8;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高电平值则数据位为 1 U8comdata=1; U8c
14、omdata|=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 d
15、at)/写数据 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 c
16、har 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_c
17、om(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-/-调用
18、相关子程序如下-/- Delay();, Delay_10us();,COM(); /-void RH(void) /主机拉低18ms P2_0=0; Delay(180); P2_0=1; /总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); /主机设为输入 判断从机响应信号 P2_0=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!P2_0) /T ! U8FLAG=2; /判断从机是否发出 80us 的低电平响应信号是否结束 while(!P2_0)&U8FLA
19、G+); 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_
20、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; /湿度整数部分 str16 = (char)(0X30+U8RH_data_H/10); str17 = (char)(0X30+U8RH_data_H%10); /湿度
21、小数部分 str19 = (char)(0X30+U8RH_data_L/10); /温度整数部分 str26 = (char)(0X30+U8T_data_H/10); str27 = (char)(0X30+U8T_data_H%10); /温度小数部分 str29 = (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(0
22、x01,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,str16); LCD_write_char(0x07,0,str17); LCD_write_char(0x08,0,.); LCD_write_char(0x09,0,str19); LCD_write_char(0x0B,0,%); LCD_write_char(0x0C,0,R); LCD_write_char(0x0
23、D,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,str26); LCD_write_char(0x07,1,str27); LCD_write_char(0x08,1,.); LCD_write_char(0x09,1,str19); 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(); 学习文档 仅供参考