蔬菜大棚温度控制系统_第1页
蔬菜大棚温度控制系统_第2页
蔬菜大棚温度控制系统_第3页
蔬菜大棚温度控制系统_第4页
蔬菜大棚温度控制系统_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

邵阳学院毕业设计(论文) 摘摘要要 本文根据蔬菜大棚温度控制系统的要求和特点,设计了一种基于 51 单片机的蔬 菜大棚温度控制器。该控制器以单片机为控制核心,结合外围信号采集电路、键盘扫 描电路、LCD 显示电路、报警电路和继电器控制电路,实现了蔬菜大棚的的智能控 制。DS18B20 温度传感器将采集的数据在传感器内部经模数转换后传送给单片机, 单片机将得到的数据分别与键盘预先设定的上限温度值和下限温度值比较,如果数 据大于上限温度值值,开启电机并报警,如果数据小于下限温度值,启动电机并报 警,并且电路还有预报警,当温度高于预报警上限值,进行报警,提醒用户,当温 度低于预报警下限值时,进行报警,提醒用户。整个过程 LCD 实时显示上限温度值、 下限温度值、实际温度值。 关键字: 单片机;信号采集;温度控制系统;键盘扫描。 邵阳学院毕业设计(论文) 目录 摘 要.I 第 1 章 绪论.1 1.1 温度控制系统设计的背景、发展历史及意义.1 1.2 课题研究的目的意义.1 第 2 章 系统方案设计.2 2.1 温度控制系统设计方框图.2 2.2 方案论证.2 第 3 章 电路设计.3 3.1 键盘电路设计.3 3.2 显示电路设计.3 3.3 报警电路设计.4 3.4 传感器电路设计.4 3.5 电机控制电路设计.5 第 4 章 程序设计.5 4.1 系统主程序设计.5 4.2 显示程序设计.5 4.3 温度处理程序设计.6 4.4 上下限温度设定程序.6 4.5 程序流程图.6 4.6 程序源代码.7 第 5 章 系统仿真.17 5.1 系统原理图.17 5.2 仿真效果图.18 第 6 章 总结.20 参考文献.21 邵阳学院毕业设计(论文) 1 第 1 章绪论 1.1 温度控制系统设计的背景、发展历史及意义 随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是 现代温 度控制系统发展的主流方向。 特别是近年来, 温度控制系统已应用到人们 生活的各个方面, 但温度控制一直是一个未开发的领域,却又是与人们息息相关的 一个实际问题。针对这种 实际情况,设计一个温度控制系统,具有广泛的应用前景 与实际意义。 温度是科学技术中最基本的物理量之一,物理、化学、生物等学科都 离不开温度。在 工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、 机械制造、粮食存储、 酒类生产等领域内,温度常常是表征对象和过程状态的最重 要的参数之一。比如,发电厂 锅炉的温度必须控制在一定的范围之内;许多化学反 应的工艺过程必须在适当的温度下才 能正常进行;炼油过程中,原油必须在不同的 温度和压力条件下进行分馏才能得到汽油、 柴油、煤油等产品。没有合适的温度环 境,许多电子设备就不能正常工作,粮仓的储粮就 会变质霉烂,酒类的品质就没有 保障。因此,各行各业对温度控制的要求都越来越高。可 见,温度的测量和控制是 非常重要的。 单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也 用到了温度检测 和温度控制。随着温度控制器应用范围的日益广泛和多样,各种适 用于不同场合的智能温 度控制器应运而生。 1.2 课题研究的目的意义 本设计的内容是温度测试控制系统,控制对象是温度。温度控制在日常生活及 工业领 域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。而以 往温度控制是 由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止 发生意外。针对此问 题,本系统设计的目的是实现一种可连续高精度调温的温度控 制系统,它应用广泛,功能 强大,小巧美观,便于携带,是一款既实用又廉价的控 制系统。 邵阳学院毕业设计(论文) 2 第 2 章 系统方案设计 2.1 蔬菜温度控制系统设计方框图 AT89C51 LCD 显示 蜂鸣器 继电器 输入键盘 复位电路 DS18B20 图 2.1 系统设计方框图 系统硬件电路框图如图2.1所示,蔬菜温度控制装置由单片机最小系统、LCD 液晶显示电路、键盘电路、报警电路、温度传感器、继电器控制等七部分组成。 系统工作原理:将温度传感器采集的数据输入单片机,单片机将得到的数据分 别与键盘预先设定的上限温度和下限温度比较,如果数据大于上限温度单片机控制 报警并接通电机电源(相当于接升温器) ,如果数据小于下限温度单片机控制报警并 接通电机电源(相当于接降温器) ,整个过程LCD实时显示:上限温度值、下限温 度值、实际温度值。 2.2 方案论证 在设计中要对空压机内压力、上、下限压力显示,显示模块的设计方案如下。 方案一:方案一:测温电路的设计,可以使用热敏电阻之类的器件利用其感温效应,在 将随被测温度变 化的电压或电流采集过来,进行 A/D 转换后,就可以用单片机进 行数据的处理,在显示电 感温电路比较麻烦。 路上, 就可以将被测温度显示出来, 这种设计需要用到 A/D 转换电路 方案二:方案二:考虑使用温度传感器,结合单片机电路设计,采用一只 DS18B20 温 度传感器,直接读 取被测温度值,之后进行转换,依次完成设计要求。比较以上两 邵阳学院毕业设计(论文) 3 种方案,很容易看出,采用方案二,电路比较简单,软件设计容易实现, 故实际设 计中拟采用方案二。 第 3 章电路设计 3.1 键盘电路 因为本设计使用键盘数比较少,只要 5 个按键就足够了,故可以直接接在端口 即可。 图 3.1 键盘电路 3.2 显示电路设计 将 P1 与显示的数据端相连,采用模拟时序形式电路。电路接线如图 3-2 图 3.2 显示电路 邵阳学院毕业设计(论文) 4 3.3 报警电路设计 报警电路对实时温度的检测,温度过高或过低报警灯亮,并且蜂鸣器根据不同的 报警情况,发出不同频率的声音。 图 3.3 报警电路 3.4 传感器电路设计 本设计使用的是 DS18B20,采用单总线方式连接。 图 3.4 传感器电路 邵阳学院毕业设计(论文) 5 3.5 电机控制电路设计 电机电路利用继电器来控制电机开断。电路如图图 3.5 图 3.5 电机控制电路设计 第 4 章 程序设计 4.1 主程序设计 主程序主要完成初始化、以及调用显示、指示灯、温度采集等等。具体模块包 括: 1、显示程序设计 2、温度采集程序设计 3、温度处理程序设计 4.2 显示程序设计 显示程序主要将几个数组的内容通过 LCD1602 的写数据指令显示在 LCD 屏上。 4.3 温度处理程序设计 将采集到的实时温度与设定的上限,下限,上限预报警,下限预报警温度进行 比较,若超过上限温度红灯亮,并且发出高频率的报警声。如果实时温度介于上限 邵阳学院毕业设计(论文) 6 预报警和上限温度之间,黄灯亮,并发出低频率的报警声。在超过下限温度时红灯 亮,也发出高频率的报警声,如果实时温度介于下限预报警和下限温度之间,黄灯 亮,并发出低频率的报警声。 4.4 上下限温度设定程序 采用外部中断 1 的方式,可以实时进行设定温度上下限值。温度上下限设定的 范围为-2099 度。 4.5 程序流程图 开始 显示欢迎界面 输入上下限温 度值 温度采集并显 示 温度比较判断是 否超否超过设定 值 报警并进行温度 处理 是 否 4.6 程序源代码 #include #include 邵阳学院毕业设计(论文) 7 #include #define uint unsigned int #define uchar unsigned char #define ulint unsigned long int uchar code table0= /欢迎界面 0 xa0,0 x57,0 x65,0 x6c,0 x63,0 x6f,0 x6d,0 x65, 0 xa0,0 x74,0 x6f,0 xa0,0 x75,0 x65,0 x73,0 xa0, 0 xa0,0 xa0,0 x74,0 x68,0 x65,0 x72,0 x6d,0 x6f, 0 x6d,0 x65,0 x74,0 x65,0 x72,0 x21,0 xa0,0 xa0; uchar table1=0 x6d,0 x61,0 x78,0 x3a,0 x00,0 x00,0 x00,0 xa0, /存储报警值 0 x6d,0 x69,0 x6e,0 x3a,0 x00,0 x00,0 x00,; uchar table2= /存储温度 0 x54,0 x4d,0 x50,0 x54,0 x3a, 0 x00,0 x00,0 x00,0 x00,0 xa5,0 x00,0 x00,0 x43; uchar code table3= /提醒设定报警值 0 xa0,0 x50,0 x6c,0 x65,0 x61,0 x73,0 x65,0 xa0, 0 xa0,0 x63,0 x68,0 x61,0 x72,0 x67,0 x65,0 xa0, 0 xa0,0 xa0,0 xa0,0 x79,0 x6f,0 x75,0 x72,0 xa0, 0 x63,0 x61,0 x72,0 x64,0 x21,0 xa0,0 xa0,0 xa0; uchar table4= /输入界面 0 x50,0 x6c,0 x65,0 x61,0 x73,0 x65,0 xa0,0 x69, 0 x6e,0 x70,0 x75,0 x74,0 x3a; sbit E=P37; sbit RW=P36; sbit RS=P35; sbit flag=P17; sbit dec=P30; sbit inc=P31; sbit ok_max=P32; sbit ok_min=P34; sbit out=P21; sbit DQ=P23; sbit beep=P22; uchar p,tflag; uint tvalue; /*延时函数*/ void delay_18B20(unsigned int i) while(i-); 邵阳学院毕业设计(论文) 8 /*ds18b20 初始化函数*/ void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ 复位 delay_18B20(8); /稍做延时 DQ = 0; /单片机将 DQ 拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(14); x=DQ; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 delay_18B20(20); /*ds18b20 读一个字节*/ unsigned char ReadOneChar(void) unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0 x80; delay_18B20(4); return(dat); /*ds18b20 写一个字节*/ void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat delay_18B20(5); DQ = 1; 邵阳学院毕业设计(论文) 9 dat=1; /*读取 ds18b20 当前温度*/ unsigned int ReadTemperature(void) unsigned char tl,th; float t; Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作 WriteOneChar(0 x44); / 启动温度转换 delay_18B20(80); / 这个延时很重要 Init_DS18B20(); WriteOneChar(0 xCC); /跳过读序号列号的操作 WriteOneChar(0 xBE); /读取温度寄存器等(共可读 9 个寄存器) 前两个就是 温度 delay_18B20(80); tl=ReadOneChar(); /读取温度值低位 th=ReadOneChar(); /读取温度值高位 tvalue=th; tvalue=8; tvalue=tvalue|tl; if(tvalue0 x0fff) /判断正负 tflag=0;/符号标记位 table25=0 xa0;/存储+号 else tvalue=tvalue+1; /负数取反加一 tflag=1; table25=0 x2d;/存储-号 t=tvalue*(0.0625); tvalue=t*100; /温度值扩大 100 倍,精确到 2 位小数 return(tvalue); /*处理当前温度*/ void show1(void); 邵阳学院毕业设计(论文) 10 void DeelTemperatre(uint t) table26=t/10000+0 x30; if(table26=0 x30) /百位为 0,就消隐 table26=0 xa0; table27=t%10000/1000+0 x30;/十位 table28=t%1000/100+0 x30;/个位 table210=t%100/10+0 x30;/小数位 table211=t%10+0 x30; /*警告函数*/ void warn(uchar s,uchar led) uchar i,j,k;i=s; P2=(led); for(k=0;k20;k+) for(j=0;j=th_s /先报警 out=0; /自动开发动机 邵阳学院毕业设计(论文) 12 else if(t1_ctl_c) /进行预报警 warn(20,0 x20); out=1; else if(t1_c=tl_c) warn(40,0 x10); out=0; else i=5; /利用显示延时 while(i-) DeelTemperatre(ReadTemperature(); show1(); out=1; /*LCD 显示*/ /*延时函数*/ void delay0() uint a,b; for(a=0;a600;a+) for(b=0;b0;e-); void delay2() uint a,b; for(a=0;a100;a+) for(b=0;b100;b+); 邵阳学院毕业设计(论文) 13 /*判忙函数*/ void busy() do P1=0 xff; RS=0; RW=1; E=0; E=1; while(flag); /*功能:写函数*/ /*入口参数:con=1 代表写指令,con=0 代表写数据,com 代表数据 /*出口参数:无; */ void write(uchar con,uchar com) busy(); RS=con; RW=0; E=1; P1=com; E=0; /*lcd 初始化*/ void init() write(0,0 x01); write(0,0 x38); write(0,0 x0c); /*显示欢迎界面*/ void show0() uint i; write(0,0 x80); for(i=0;i16;i+) write(1,table0i); 邵阳学院毕业设计(论文) 14 busy(); write(0,0 xc0); for(i=16;i32;i+) write(1,table0i); busy(); delay0(); /*显示温度界面*/ void show1() uint i,j; write(0,0 x01); write(0,0 x80); for(i=0;i15;i+) write(1,table1i); busy(); write(0,0 xc0); for(j=0;j13;j+) write(1,table2j); busy(); delay0(); /*改值函数*/ void input() uchar i,sign=0,k=0; char t=0,z=0; ok_max=1; /上限值确认键 ok_min=1; /下限值确认键 write(0,0 x01); /清屏指令 while(ok_max=1 dec=1; if(inc=0) /加一键按下 delay2(); /去抖动 if(inc=0) if(t=0) /对符号数进行处理,大于 0,保持不变 邵阳学院毕业设计(论文) 15 t+; sign=0 xa0;/温度显示标志位 else if(t=-1) /小于 0,首先判断是否等于-1,因为再加一为 0,消- 符号位 t+; k-; /k 为负数的绝对值 sign=0 xa0; else /不为-1,前面要加符号位- t+; k-; sign=0 x2d; else ; /大于 99 不再增加 if(dec=0) /减一确认键按下 delay2();/去抖动 if(dec=0) if(t=-20); /设定下限为-20 else if(t=0) t-; k+; sign=0 x2d; else t-; sign=0 xa0; if(t=0)z=t;t=k; /t=0,取绝对值 write(0,0 x80); 邵阳学院毕业设计(论文) 16 for(i=0;i13;i+) write(1,table4i);/显示提醒输入界面 busy(); write(0,0 xc0); write(1,sign);/将设定的值显示 write(1,t/100%10+0 x30); write(1,t/10%10+0 x30); write(1,t%10+0 x30); write(1,0 x43); busy(); if(z0)t=z; delay1(); if(t0)t=t+1; p=t; if(ok_max=0)/存储上限值 table16=p%10+0 x30; table15=p/10%10+0 x30; table14=sign; else/存储下限值 table114=p%10+0 x30; table113=p/10%10+0 x30; table112=sign; /*外部中断 0 函数*/ void Exter1(void) interrupt 2 EX1=0; input(); EX1=1; void main() uchar l,i=5; init(); show0(); delay2(); input(); EA=1; 邵阳学院毕业设计(论文) 17 EX1=1; IT1=1; while(1) out=1; /电动机开关关闭 DeelTemperatre(ReadTemperature(); /去温度值 show1(); deal(ReadTemperature(); /温度处理 while(i-) /利用显示延时 DeelTemperatre(ReadTemperature(); show1(); deal(ReadTemperature(); 5 系统仿真 5.1 原理电路图 图 5.1 原理电路图 邵阳学院毕业设计(论文) 18 5.2 仿真效果图 图 5.2.1 欢迎界面 图 5.2.2 输入界面 邵阳学院毕业设计(论文) 19 图 5.2.3 温度显示界面 5.2.4 高温预报警界面 邵阳学院毕业设计(论文) 20 5.2.5 高温报警和电机开启界面 第 6 章 总结 写这篇总结时,当初很多的困难到现在已体会不到了。现在回过来看当初,我 认为一切都很值。在这中间每天都有很多挫折在等待着我,但我始终坚信“失败是 更近一步走向成功” 。不管困难有多么多,我都通过我能寻求帮助的一切方式去解决 问题。早在选题之前,我就利用平时的时间看 DS18B20 芯片资料,当初认为 DS18B20 延时要很精确,所以我必须写出精确的延时程序。但是 C 语言延时是不好 精确地,为了写出那种很精确的延时程序,在网上找了很多资料,也学会了利用反 汇编来计算延时,还有可以利用 keil 这个软件进行一些调试,也可测出延时时间。 延时解决后,以为一切都会很顺利,但往往看起来容易的事情总有想不到的问题。 在写 DS18B20 驱动程序时,读出来显示的温度值总是不对,左看右看,我知道问题 肯定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论