蔬菜大棚温度控制系统(共23页).doc

上传人:飞****2 文档编号:13536998 上传时间:2022-04-30 格式:DOC 页数:23 大小:434KB
返回 下载 相关 举报
蔬菜大棚温度控制系统(共23页).doc_第1页
第1页 / 共23页
蔬菜大棚温度控制系统(共23页).doc_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《蔬菜大棚温度控制系统(共23页).doc》由会员分享,可在线阅读,更多相关《蔬菜大棚温度控制系统(共23页).doc(23页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上摘要 本文根据蔬菜大棚温度控制系统的要求和特点,设计了一种基于51单片机的蔬菜大棚温度控制器。该控制器以单片机为控制核心,结合外围信号采集电路、键盘扫描电路、LCD显示电路、报警电路和继电器控制电路,实现了蔬菜大棚的的智能控制。DS18B20温度传感器将采集的数据在传感器内部经模数转换后传送给单片机,单片机将得到的数据分别与键盘预先设定的上限温度值和下限温度值比较,如果数据大于上限温度值值,开启电机并报警,如果数据小于下限温度值,启动电机并报警,并且电路还有预报警,当温度高于预报警上限值,进行报警,提醒用户,当温度低于预报警下限值时,进行报警,提醒用户。整个过程LCD

2、实时显示上限温度值、下限温度值、实际温度值。关键字: 单片机;信号采集;温度控制系统;键盘扫描。专心-专注-专业目录 4.3 温度处理程序设计.64.4 上下限温度设定程序.6 4.5 程序流程图.6 4.6 程序源代码.7 第1章绪论1.1 温度控制系统设计的背景、发展历史及意义随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温 度控制系统发展的主流方向。 特别是近年来, 温度控制系统已应用到人们生活的各个方面, 但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。针对这种 实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。 温度是科学技

3、术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。在 工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、 酒类生产等领域内,温度常常是表征对象和过程状态的最重要的参数之一。比如,发电厂 锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才 能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、 柴油、煤油等产品。没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就 会变质霉烂,酒类的品质就没有保障。因此,各行各业对温度控制的要求都越来越高。可 见,温度的测量和控制是非常重要的。 单片机在电子产品中的

4、应用已经越来越广泛,在很多的电子产品中也用到了温度检测 和温度控制。随着温度控制器应用范围的日益广泛和多样,各种适用于不同场合的智能温 度控制器应运而生。1.2 课题研究的目的意义本设计的内容是温度测试控制系统,控制对象是温度。温度控制在日常生活及工业领 域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。而以往温度控制是 由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。针对此问 题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能 强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。第2章 系统方案设计2.1蔬菜温度控制系统设计方

5、框图 AT89C51LCD显示蜂鸣器继电器输入键盘复位电路 DS18B20图2.1系统设计方框图系统硬件电路框图如图2.1所示,蔬菜温度控制装置由单片机最小系统、LCD液晶显示电路、键盘电路、报警电路、温度传感器、继电器控制等七部分组成。系统工作原理:将温度传感器采集的数据输入单片机,单片机将得到的数据分别与键盘预先设定的上限温度和下限温度比较,如果数据大于上限温度单片机控制报警并接通电机电源(相当于接升温器),如果数据小于下限温度单片机控制报警并接通电机电源(相当于接降温器),整个过程LCD实时显示:上限温度值、下限温度值、实际温度值。2.2 方案论证在设计中要对空压机内压力、上、下限压力显

6、示,显示模块的设计方案如下。方案一:测温电路的设计,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变 化的电压或电流采集过来,进行 A/D 转换后,就可以用单片机进行数据的处理,在显示电 感温电路比较麻烦。 路上, 就可以将被测温度显示出来, 这种设计需要用到 A/D 转换电路方案二:考虑使用温度传感器,结合单片机电路设计,采用一只 DS18B20 温度传感器,直接读 取被测温度值,之后进行转换,依次完成设计要求。比较以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计容易实现, 故实际设计中拟采用方案二。第3章电路设计3.1键盘电路 因为本设计使用键盘数比较少,只要5个按键

7、就足够了,故可以直接接在端口即可。图3.1键盘电路 3.2显示电路设计 将P1与显示的数据端相连,采用模拟时序形式电路。电路接线如图3-2图3.2显示电路3.3报警电路设计报警电路对实时温度的检测,温度过高或过低报警灯亮,并且蜂鸣器根据不同的报警情况,发出不同频率的声音。图3.3 报警电路3.4传感器电路设计本设计使用的是DS18B20,采用单总线方式连接。图3.4 传感器电路3.5电机控制电路设计 电机电路利用继电器来控制电机开断。电路如图图3.5图3.5电机控制电路设计第4章 程序设计4.1 主程序设计 主程序主要完成初始化、以及调用显示、指示灯、温度采集等等。具体模块包括:1、显示程序设

8、计2、温度采集程序设计3、温度处理程序设计4.2 显示程序设计显示程序主要将几个数组的内容通过LCD1602的写数据指令显示在LCD屏上。4.3 温度处理程序设计 将采集到的实时温度与设定的上限,下限,上限预报警,下限预报警温度进行比较,若超过上限温度红灯亮,并且发出高频率的报警声。如果实时温度介于上限预报警和上限温度之间,黄灯亮,并发出低频率的报警声。在超过下限温度时红灯亮,也发出高频率的报警声,如果实时温度介于下限预报警和下限温度之间,黄灯亮,并发出低频率的报警声。4.4 上下限温度设定程序采用外部中断1的方式,可以实时进行设定温度上下限值。温度上下限设定的范围为-2099度。4.5 程序

9、流程图开始显示欢迎界面输入上下限温度值温度采集并显示温度比较判断是否超否超过设定值报警并进行温度处理是否4.6 程序源代码#include#include#include#define uint unsigned int#define uchar unsigned char#define ulint unsigned long intuchar code table0= /欢迎界面 0xa0,0x57,0x65,0x6c,0x63,0x6f,0x6d,0x65, 0xa0,0x74,0x6f,0xa0,0x75,0x65,0x73,0xa0, 0xa0,0xa0,0x74,0x68,0x65,

10、0x72,0x6d,0x6f, 0x6d,0x65,0x74,0x65,0x72,0x21,0xa0,0xa0;uchar table1=0x6d,0x61,0x78,0x3a,0x00,0x00,0x00,0xa0, /存储报警值 0x6d,0x69,0x6e,0x3a,0x00,0x00,0x00,;uchar table2= /存储温度 0x54,0x4d,0x50,0x54,0x3a,0x00,0x00,0x00,0x00,0xa5,0x00,0x00,0x43;uchar code table3= /提醒设定报警值 0xa0,0x50,0x6c,0x65,0x61,0x73,0x65

11、,0xa0,0xa0,0x63,0x68,0x61,0x72,0x67,0x65,0xa0,0xa0,0xa0,0xa0,0x79,0x6f,0x75,0x72,0xa0,0x63,0x61,0x72,0x64,0x21,0xa0,0xa0,0xa0;uchar table4= /输入界面 0x50,0x6c,0x65,0x61,0x73,0x65,0xa0,0x69,0x6e,0x70,0x75,0x74,0x3a;sbit E=P37;sbit RW=P36;sbit RS=P35;sbit flag=P17;sbit dec=P30;sbit inc=P31;sbit ok_max=P3

12、2;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-);/*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_18

13、B20(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|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(unsigned char da

14、t) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat=1; /*读取ds18b20当前温度*/unsigned int ReadTemperature(void)unsigned char tl,th; float t;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(80); / 这个延时很重要Init_DS18B20();WriteOneCh

15、ar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(80);tl=ReadOneChar(); /读取温度值低位th=ReadOneChar(); /读取温度值高位tvalue=th; tvalue=8; tvalue=tvalue|tl; if(tvalue0x0fff) /判断正负 tflag=0;/符号标记位 table25=0xa0;/存储+号 else tvalue=tvalue+1; /负数取反加一 tflag=1; table25=0x2d;/存储-号 t=tvalue*(

16、0.0625); tvalue=t*100; /温度值扩大100倍,精确到2位小数return(tvalue);/*处理当前温度*/ void show1(void); void DeelTemperatre(uint t) table26=t/10000+0x30; if(table26=0x30) /百位为0,就消隐 table26=0xa0; table27=t%10000/1000+0x30;/十位 table28=t%1000/100+0x30;/个位 table210=t%100/10+0x30;/小数位 table211=t%10+0x30; /*警告函数*/void warn(

17、uchar s,uchar led) uchar i,j,k;i=s; P2=(led); for(k=0;k20;k+) for(j=0;j=th_s&t1_c=th_c) /高于最高上限 warn(40,0x40); /先报警 out=0; /自动开发动机 else if(t1_ctl_c) /进行预报警 warn(20,0x20); out=1; else if(t1_c=tl_c) warn(40,0x10); out=0;else i=5; /利用显示延时 while(i-) DeelTemperatre(ReadTemperature(); show1();out=1; /*LCD

18、显示*/*延时函数*/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+);/*判忙函数*/void busy() do P1=0xff; 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

19、; E=1; P1=com; E=0;/*lcd初始化*/void init() write(0,0x01); write(0,0x38); write(0,0x0c);/*显示欢迎界面*/void show0() uint i; write(0,0x80); for(i=0;i16;i+) write(1,table0i); busy(); write(0,0xc0); for(i=16;i32;i+) write(1,table0i); busy(); delay0();/*显示温度界面*/void show1() uint i,j; write(0,0x01); write(0,0x80

20、); for(i=0;i15;i+) write(1,table1i); busy(); write(0,0xc0); 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,0x01); /清屏指令 while(ok_max=1&ok_min=1) /当确认键按下,结束循环 inc=1; dec=1; if(inc=0) /加一键按下 delay2()

21、; /去抖动 if(inc=0) if(t=0) /对符号数进行处理,大于0,保持不变 t+; sign=0xa0;/温度显示标志位 else if(t=-1) /小于0,首先判断是否等于-1,因为再加一为0,消-符号位 t+; k-; /k为负数的绝对值 sign=0xa0; else /不为-1,前面要加符号位- t+; k-; sign=0x2d; else ; /大于99不再增加 if(dec=0) /减一确认键按下 delay2();/去抖动 if(dec=0) if(t=-20); /设定下限为-20 else if(t=0) t-; k+; sign=0x2d; else t-;

22、sign=0xa0; if(t=0)z=t;t=k; /t=0,取绝对值 write(0,0x80); for(i=0;i13;i+) write(1,table4i);/显示提醒输入界面 busy(); write(0,0xc0); write(1,sign);/将设定的值显示 write(1,t/100%10+0x30); write(1,t/10%10+0x30); write(1,t%10+0x30); write(1,0x43); busy(); if(z0)t=z; delay1(); if(t0)t=t+1; p=t; if(ok_max=0)/存储上限值 table16=p%1

23、0+0x30; table15=p/10%10+0x30; table14=sign; else/存储下限值 table114=p%10+0x30; table113=p/10%10+0x30; 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; EX1=1; IT1=1; while(1) out=1; /电动机开关关闭 DeelTemperatre(Rea

24、dTemperature(); /去温度值 show1(); deal(ReadTemperature(); /温度处理 while(i-) /利用显示延时 DeelTemperatre(ReadTemperature(); show1(); deal(ReadTemperature(); 5 系统仿真5.1 原理电路图 图5.1 原理电路图5.2 仿真效果图图5.2.1 欢迎界面图5.2.2 输入界面图5.2.3 温度显示界面5.2.4 高温预报警界面5.2.5 高温报警和电机开启界面第6章 总结写这篇总结时,当初很多的困难到现在已体会不到了。现在回过来看当初,我认为一切都很值。在这中间每天

25、都有很多挫折在等待着我,但我始终坚信“失败是更近一步走向成功”。不管困难有多么多,我都通过我能寻求帮助的一切方式去解决问题。早在选题之前,我就利用平时的时间看DS18B20芯片资料,当初认为DS18B20延时要很精确,所以我必须写出精确的延时程序。但是C语言延时是不好精确地,为了写出那种很精确的延时程序,在网上找了很多资料,也学会了利用反汇编来计算延时,还有可以利用keil这个软件进行一些调试,也可测出延时时间。延时解决后,以为一切都会很顺利,但往往看起来容易的事情总有想不到的问题。在写DS18B20驱动程序时,读出来显示的温度值总是不对,左看右看,我知道问题肯定是出在数据处理上。于是我上网看

26、别人是怎么进行数据处理,结合很多网上程序后,最后选择了其中一种的方法,但一切并不顺利,一篇又一篇的调试,不知调试了多少次终于成功了。DS18B20驱动写出来了后,1602显示程序以前写过,所以可以移植过来,所以减少了不少的时间。大的结构确定后,就是修改一些细节上。比如我的温度比较范围是从-20-99,这在软件控制上,看上去很简单。可最后代码写下来也不少。而且我也是调试了蛮多次的。主要是以前从没有独立做过这种课程设计。所以没有经验,很多细节上处理的不是很好。所以自己只有不断地去学习别人怎么处理,然后结合自身来处理细节上的问题。利用了几天的时间,终于是在PROTEUS上仿真成功了。但我的设计还是存

27、在一些问题,比如反映时间不是很快,这些问题是值得去注意的。再者,在Proteus上仿真通过,而没有做出实物,那也永远只是理论水平。所以,尽管课程设计完成了,我要做的还远远不够。在写课程设计的论文时,也得到了同学的帮助,同学也帮忙完成了一些。通过这次课程设计,让我对于单片机的项目有了一个认知。我更近一步看清了前方的路。很多东西是接下来必须去做的。总之,要学的还很多,只有不断地学习,才能轻松的处理事情。有句话说的很对“只有很努力,才能看起来毫不费力”。课程设计搞完了,我的单片机学习还是不会断,因为我学的还真不够。最后感谢给与我指点的老师和同学。虽然我没有很强烈的表达在表面,但我一直都记住的。没有你们,我可能会走很多弯路才能做到,一生中遇到你们这些贵人是我的荣幸。感谢你们。参考文献1 赵晶.Protel99高级应用M.人民邮电出版社, 2006.2 谷树忠.Protel DXP实用教程M.电子工业出版社,2003.3 刘湘涛、江世民.单片机原理与应用M.电子工业出版社, 2006.4 孙育才. ATMEL新型AT89S51系列单片机及其应用M.清华大学出版社, 2005.5 李华MCU-51系列单片机实用接口技术M北京:北京航空航天大学出版社,19936 张迎新、雷道振.单片机初级教程M.北京航天航空大学出版社, 2006.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com