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

下载本文档

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

文档简介

1、 烟 台 南 山 学 院 单片机课程设计单片机课程设计 题目 蔬菜大棚温度控制系统 摘 要 本文根据蔬菜大棚温度控制系统的要求和特点,设计了一种基于51单片机的蔬 菜大棚温度控制器。该控制器以单片机为控制核心,结合外围信号采集电路、键盘扫描 电路、lcd显示电路、报警电路和继电器控制电路,实现了蔬菜大棚的的智能控制。 ds18b20温度传感器将采集的数据在传感器内部经模数转换后传送给单片机,单片机将 得到的数据分别与键盘预先设定的上限温度值和下限温度值比较,如果数据大于上限 温度值值,开启电机并报警,如果数据小于下限温度值,启动电机并报警,并且电路 还有预报警,当温度高于预报警上限值,进行报警

2、,提醒用户,当温度低于预报警下 限值时,进行报警,提醒用户。整个过程lcd实时显示上限温度值、下限温度值、实际 温度值。 目 录 1 绪论.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 电机控制电路设计.4 4 程序设计.6 4.1c语言.6 4.2 控制程序设计.6 4.3 主控制程序设计. .6 5 总结.8 6 6 参考文献.9 附件一:总原理图 .10 附件二:系统程序 .11 1 绪论 本设计的内容是温度测试控制系统

3、,控制对象是温度。温度控制在日常生活及 工业领 域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。而以 往温度控制是 由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止 发生意外。针对此问 题,本系统设计的目的是实现一种可连续高精度调温的温度控 制系统,它应用广泛,功能 强大,小巧美观,便于携带,是一款既实用又廉价的控 制系统。 随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是 现代温 度控制系统发展的主流方向。 特别是近年来, 温度控制系统已应用到人们 生活的各个方面, 但温度控制一直是一个未开发的领域,却又是与人们息息相关的 一个实际问题。针对这种

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

5、行各业对温度控制的要求都越来越高。可 见,温度的测量和控制是 非常重要的。 单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也 用到了温度检测 和温度控制。随着温度控制器应用范围的日益广泛和多样,各种适 用于不同场合的智能温 度控制器应运而生。 2 系统方案设计 2.1 蔬菜温度控制系统设计方框图 at89c51 lcd 显示 蜂鸣器 继电器 输入键盘 复位电路 ds18b20 图 2.1 系统设计方框图 系统硬件电路框图如图 2.1 所示,蔬菜温度控制装置由单片机最小系统、lcd 液 晶显示电路、键盘电路、报警电路、温度传感器、继电器控制等七部分组成。 系统工作原理:将温度传感器采

6、集的数据输入单片机,单片机将得到的数据分 别与键盘预先设定的上限温度和下限温度比较,如果数据大于上限温度单片机控制 报警并接通电机电源(相当于接升温器) ,如果数据小于下限温度单片机控制报警并 接通电机电源(相当于接降温器) ,整个过程 lcd 实时显示:上限温度值、下限温度 值、实际温度值。 2.2 方案论证 在设计中要对空压机内压力、上、下限压力显示,显示模块的设计方案如下。 方案一:方案一:测温电路的设计,可以使用热敏电阻之类的器件利用其感温效应,在 将随被测温度变 化的电压或电流采集过来,进行 a/d 转换后,就可以用单片机进 行数据的处理,在显示电 感温电路比较麻烦。 路上, 就可以

7、将被测温度显示出来, 这种设计需要用到 a/d 转换电路 方案二:方案二:考虑使用温度传感器,结合单片机电路设计,采用一只 ds18b20 温度 传感器,直接读 取被测温度值,之后进行转换,依次完成设计要求。比较以上两种 方案,很容易看出,采用方案二,电路比较简单,软件设计容易实现, 故实际设计 中拟采用方案二。 3 电路设计 3.1 键盘电路 因为本设计使用键盘数比较少,只要 5 个按键就足够了,故可以直接接在端口 即可。 图 3.1 键盘电路 3.2 显示电路设计 将 p1 与显示的数据端相连,采用模拟时序形式电路。电路接线如图 3-2 图 3.2 显示电路 3.3 报警电路设计 报警电路

8、对实时温度的检测,温度过高或过低报警灯亮,并且蜂鸣器根据不同的 报警情况,发出不同频率的声音。 图 3.3 报警电路 3.4 传感器电路设计 本设计使用的是 ds18b20,采用单总线方式连接。 图 3.4 传感器电路 3.5 电机控制电路设计 电机电路利用继电器来控制电机开断。电路如图图 3.5 图 3.5 电机控制电路设计 第 4 章 程序设计 4.1 c 语言 软件对整个系统来说是至关重要的,是整个系统的灵魂,整个系统的执行操作都 是在软件的协调指挥下进行的。用于计算机程序设计的语言分为机器语言、汇编语 言和高级语言。本测控系统的软件的编写主要采用 c 语言编写。 4.2 控制程序设计

9、本系统软件设计采用模块化的设计思路,即整个系统的程序软件由许多独立的子 程序模块组成,它们之间通过软件接口进行连接。连接的原则是:模块内数据关系 紧凑,模块间数据关系松散,按功能划分模块。 整个软件系统的程序可分为四个大 模块,即主程序模块、参数设置程序模块、现场数据采集显示模块和执行处理程序 模块。每个模块都具有一定的功能,每个模块又可分为许多子模块,既相互独立又 相互联系,低级模块可以被高级模块调用。 4.3 主控制程序设计 主程序是整个测控系统中最重要的程序,各个子程序都在主程序的协调指挥下运 行,是一个顺序执行的无限循环程序,可以被任何优先级的中断请求所打断。各个 环境参数的测试和控制

10、指令的判断都在各个测控子程序中进行,主程序的主要功能 是实现系统的初始化、实现系统自检、响应中断请求进而调用数据处理子程序。 主 程序的初始化工作主要完成对 8255a、ad590、led、adc0809。 主流程图见图 4.1。 开始 系统初始化 设定温湿度上 下限 读取并显示数 据 判断当前温湿 度值 温湿度是否过 限? 显示温湿度值 二极管亮并报 警 启动控制设备 y n 5 总结 早在选题之前,我就利用平时的时间看 ds18b20 芯片资料,当初认为 ds18b20 延 时要很精确,所以我必须写出精确的延时程序。但是 c 语言延时是不好精确地,为 了写出那种很精确的延时程序,在网上找了

11、很多资料,也学会了利用反汇编来计算 延时,还有可以利用 keil 这个软件进行一些调试,也可测出延时时间。延时解决后, 以为一切都会很顺利,但往往看起来容易的事情总有想不到的问题。在写 ds18b20 驱动程序时,读出来显示的温度值总是不对,左看右看,我知道问题肯定是出在数 据处理上。于是我上网看别人是怎么进行数据处理,结合很多网上程序后,最后选 择了其中一种的方法,但一切并不顺利,一篇又一篇的调试,不知调试了多少次终 于成功了。ds18b20 驱动写出来了后,1602 显示程序以前写过,所以可以移植过来, 所以减少了不少的时间。大的结构确定后,就是修改一些细节上。比如我的温度比 较范围是从-

12、20-99,这在软件控制上,看上去很简单。可最后代码写下来也不少。 而且我也是调试了蛮多次的。主要是以前从没有独立做过这种课程设计。所以没有 经验,很多细节上处理的不是很好。所以自己只有不断地去学习别人怎么处理,然 后结合自身来处理细节上的问题。利用了几天的时间,终于是在 proteus 上仿真成 功了。但我的设计还是存在一些问题,比如反映时间不是很快,这些问题是值得去 注意的。再者,在 proteus 上仿真通过,而没有做出实物,那也永远只是理论水平。 所以,尽管课程设计完成了,我要做的还远远不够。在写课程设计的论文时,也得 到了同学的帮助,同学也帮忙完成了一些。 通过这次课程设计,让我对于

13、单片机的项目有了一个认知。我更近一步看清了前 方的路。很多东西是接下来必须去做的。总之,要学的还很多,只有不断地学习, 才能轻松的处理事情。有句话说的很对“只有很努力,才能看起来毫不费力” 。课程 设计搞完了,我的单片机学习还是不会断,因为我学的还真不够。最后感谢给与我 指点的老师和同学。虽然我没有很强烈的表达在表面,但我一直都记住的。没有你 们,我可能会走很多弯路才能做到,一生中遇到你们这些贵人是我的荣幸。感谢你 们。 6 参考文献 1. 赵晶.protel99 高级应用m.人民邮电出版社, 2006 年. 2. 谷树忠.protel dxp 实用教程m.电子工业出版社,2003 年. 3.

14、 刘湘涛,江世民.单片机原理与应用m.电子工业出版社, 2006 年. 4. 孙育才. atmel 新型 at89c51 系列单片机及其应用m.清华大学出版社, 2005 年. 5. 李华mcu-51 系列单片机实用接口技术m北京:北京航空航天大学出版社, 1993 年 6. 张迎新,雷道振.单片机初级教程m.北京航天航空大学出版社, 2006 年. 7.李朝青. 单片机原理及接口技术. 北京: 北京航空航天大学出版社, 2009 年. 8. 潘新民, 王燕芳. 微型计算机控制技术. 北京: 电子工业出版社, 20011 年. 附录一:总原理图 附件一:系统程序 #include #inclu

15、de #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,

16、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 x6

17、5,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 f

18、lag=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-); /*ds18b20 初始化函数*/ void init_ds18b20(void) unsigned char x=0; dq = 1; /dq 复位 delay_18b20(8); /稍做延时 dq = 0;

19、/单片机将 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; dela

20、y_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; dat=1; /*读取 ds18b20 当前温度*/ unsigned int readtemperature(void) unsigned char tl,th; float t; init_ds18b20(); writeonechar(0 xcc); / 跳过读序号列号的操作

21、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;

22、/符号标记位 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); void deeltemperatre(uint t) table26=t/10000+0 x30; if(table26=0 x30) /百位为 0,就消隐 table26=0 xa0; table27=t%10000/10

23、00+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; /自动开发动机 else if(t1_ctl_c) /进行预报警 warn(20,0 x20); out=1; else if(t1_c=tl_c) warn(40,0 x10); out=0; el

24、se 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+); /*判忙函数*/ void busy() do p1=0 xff; rs=0; rw=1; e=0; e=1; while(flag); /*功能:写函数*/ /*入口参数:c

25、on=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); busy(); write(0,0 xc0); for(i

26、=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,保持不变 t+; sign=0 xa0;/温度显示标志位 else if(t=-1) /小于 0,首先判断是否等于-1,因为再加一为 0,消- 符号位 t+; k-; /k 为负数的绝对值 sign=0 xa0; else /不为-1,前面要加符号位- t+; k-; si

温馨提示

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

评论

0/150

提交评论