版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要 本文根据蔬菜大棚温度控制系统的要求和特点,设计了一种基于51单片机的蔬菜大棚温度控制器。该控制器以单片机为控制核心,结合外围信号采集电路、键盘扫描电路、LCD显示电路、报警电路和继电器控制电路,实现了蔬菜大棚的的智能控制。DS18B20温度传感器将采集的数据在传感器内部经模数转换后传送给单片机,单片机将得到的数据分别与键盘预先设定的上限温度值和下限温度值比较,如果数据大于上限温度值值,开启电机并报警,如果数据小于下限温度值,启动电机并报警,并且电路还有预报警,当温度高于预报警上限值,进行报警,提醒用户,当温度低于预报警下限值时,进行报警,提醒用户。整个过程LCD实时显示上限温度值、下限温
2、度值、实际温度值。关键字: 单片机;信号采集;温度控制系统;键盘扫描。目录摘 要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 系统主程序设计54.2 显示程序设计5 4.3 温度处理程序设计.64.4 上下限温度设定程序.6 4.5 程序流程图.6 4.6 程序源代码.7第5章 系统仿真17 5.1
3、系统原理图17 5.2 仿真效果图18第6章 总结20参考文献21第1章绪论1.1 温度控制系统设计的背景、发展历史及意义随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温 度控制系统发展的主流方向。 特别是近年来, 温度控制系统已应用到人们生活的各个方面, 但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。针对这种 实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。 温度是科学技术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。在 工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、 酒类生产等领域内
4、,温度常常是表征对象和过程状态的最重要的参数之一。比如,发电厂 锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才 能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、 柴油、煤油等产品。没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就 会变质霉烂,酒类的品质就没有保障。因此,各行各业对温度控制的要求都越来越高。可 见,温度的测量和控制是非常重要的。 单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测 和温度控制。随着温度控制器应用范围的日益广泛和多样,各种适用于不同场合的智能温 度控制器应运而生。1.2
5、 课题研究的目的意义本设计的内容是温度测试控制系统,控制对象是温度。温度控制在日常生活及工业领 域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。而以往温度控制是 由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。针对此问 题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能 强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。第2章 系统方案设计2.1蔬菜温度控制系统设计方框图 AT89C51LCD显示蜂鸣器继电器输入键盘复位电路 DS18B20图2.1系统设计方框图系统硬件电路框图如图2.1所示,蔬菜温度控制装置由单片机最小系统
6、、LCD液晶显示电路、键盘电路、报警电路、温度传感器、继电器控制等七部分组成。系统工作原理:将温度传感器采集的数据输入单片机,单片机将得到的数据分别与键盘预先设定的上限温度和下限温度比较,如果数据大于上限温度单片机控制报警并接通电机电源(相当于接升温器),如果数据小于下限温度单片机控制报警并接通电机电源(相当于接降温器),整个过程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 主程序设计 主程序主要完成初始化、以及调用显示、指示灯、温度采集等等。具体模块包括:1、显示程序设计2、温度采集程序设计3、温度处理程序设计4.2 显示程序设计显示程序主要将几个数组的内容通过LCD1602的写数据指令显示在LCD屏上。4.3 温度处理程序设
9、计 将采集到的实时温度与设定的上限,下限,上限预报警,下限预报警温度进行比较,若超过上限温度红灯亮,并且发出高频率的报警声。如果实时温度介于上限预报警和上限温度之间,黄灯亮,并发出低频率的报警声。在超过下限温度时红灯亮,也发出高频率的报警声,如果实时温度介于下限预报警和下限温度之间,黄灯亮,并发出低频率的报警声。4.4 上下限温度设定程序采用外部中断1的方式,可以实时进行设定温度上下限值。温度上下限设定的范围为-2099度。4.5 程序流程图开始显示欢迎界面输入上下限温度值温度采集并显示温度比较判断是否超否超过设定值报警并进行温度处理是否4.6 程序源代码#include<reg51.h
10、>#include<absacc.h>#include<intrins.h>#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,0x72,0x6d,0x6f, 0x6d,0x65,0x74,0
11、x65,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,0xa0,0xa0,0x63,0x68,0x61,0x72,0
12、x67,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=P32;sbit ok_min=P34;sbit out=P21;s
13、bit 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_18B20(14); x=DQ; /稍做延时后 如果x=0则初始化成
14、功 x=1则初始化失败 delay_18B20(20);/*ds18b20读一个字节*/ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; / 给脉冲信号 dat>>=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(unsigned char dat) unsigned char i=0
15、; for (i=8; i>0; 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();WriteOneChar(0
16、xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(80);tl=ReadOneChar(); /读取温度值低位th=ReadOneChar(); /读取温度值高位tvalue=th; tvalue<<=8; tvalue=tvalue|tl; if(tvalue<0x0fff) /判断正负 tflag=0;/符号标记位 table25=0xa0;/存储'+'号 else tvalue=tvalue+1; /负数取反加一 tflag=1; table25=0x2
17、d;/存储'-'号 t=tvalue*(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
18、%10+0x30; /*警告函数*/void warn(uchar s,uchar led) uchar i,j,k;i=s; P2=(led); for(k=0;k<20;k+) for(j=0;j<200;j+)/喇叭发声的时间循环,改变大小可以改变发声时间长短 delay_18B20(i); /参数决定发声的频率,估算值,可以自行更改参数并 beep=!beep; P2=0xff; beep=1; /*报警处理函数*/ void deal(uint fuzhi) uchar t1,th,tl,i; char t1_c,th_c,tl_c,th_s,tl_s; t1=fuzhi
19、/100; if(table25=0x2d) /存储实际温度换成有符号数实际温度 /符号位为'-'换成负数 t1_c=t1; t1_c=t1_c; else t1_c=t1; th=(table15-0x30)*10+(table16-0x30);/存储上限温度换成有符号数温度 if(table14=0x2d) th_c=th; th_c=th_c; th_s=th_c-2; /设置第二高温度报警线 else th_c=th; th_s=th_c-2; tl=(table113-0x30)*10+(table114-0x30); /存储下限温度换成有符号数温度 if(table
20、112=0x2d) tl_c=tl; tl_c=tl_c; tl_s=tl_c+2; else tl_c=tl; tl_s=tl_c+2;/设置低二道报警线温度 if(t1_c>=th_s&&t1_c<th_c) /大于第二高上限值小于最高上限,进行预报警 warn(20,0x80); /控制预报警声音,点亮指示灯 out=1; else if(t1_c>=th_c) /高于最高上限 warn(40,0x40); /先报警 out=0; /自动开发动机 else if(t1_c<=tl_s&&t1_c>tl_c) /进行预报警 wa
21、rn(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显示*/*延时函数*/void delay0() uint a,b; for(a=0;a<600;a+) for(b=0;b<600;b+);void delay1()uint e;for(e=100;e>0;e-);void delay2() uint a,b; for(a=0;a<
22、;100;a+) for(b=0;b<100;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; E=1; P1=com; E=0;/*lcd初始化*/void init() write(0,0x01); write(0,0x38); write(0,0x0c);/*显示欢迎界面*/
23、void show0() uint i; write(0,0x80); for(i=0;i<16;i+) write(1,table0i); busy(); write(0,0xc0); for(i=16;i<32;i+) write(1,table0i); busy(); delay0();/*显示温度界面*/void show1() uint i,j; write(0,0x01); write(0,0x80); for(i=0;i<15;i+) write(1,table1i); busy(); write(0,0xc0); for(j=0;j<13;j+) wri
24、te(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(); /去抖动 if(inc=0) if(t<99) /设定最高上限为99if(t>=0) /对符号数进行处理,大于0,保持不变
25、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-;sign=0xa0; if(t<=0)z=t;t=k; /t<
26、;=0,取绝对值 write(0,0x80); for(i=0;i<13;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(z<0)t=z; delay1(); if(t<0)t=t+1; p=t; if(ok_max=0)/存储上限值 table16=p%10+0x30; table15=
27、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(ReadTemperature();
28、/去温度值 show1(); deal(ReadTemperature(); /温度处理 while(i-) /利用显示延时 DeelTemperatre(ReadTemperature(); show1(); deal(ReadTemperature(); 5 系统仿真5.1 原理电路图 图5.1 原理电路图5.2 仿真效果图图 欢迎界面图 输入界面图 温度显示界面 高温预报警界面 高温报警和电机开启界面第6章 总结写这篇总结时,当初很多的困难到现在已体会不到了。现在回过来看当初,我认为一切都很值。在这中间每天都有很多挫折在等待着我,但我始终坚信“失败是更近一步走向成功”。不管困难有多么多,我都通过我能寻求帮助的一切方式去解决问题。早在选题之前,我就利用平时的时间看DS18B20芯片资料,当初认为DS18B20延时要很精确,所以我必须写出精确的延时程序。但是C语言延时是不好精确地,为了写出那种很精确的延时程序,在网上找了很多资料,也学会了利用反汇编来计算延时,还有可以利用keil这个软件进行一些调试,也可测出延时时间。延时解决后,以为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 27701:2025 EN Information security,cybersecurity and privacy protection - Privacy information management systems - Requirements and guidance
- 【正版授权】 ISO/IEC 27706:2025 FR Information security,cybersecurity and privacy protection - Requirements for bodies providing audit and certification of privacy information managemen
- 产前健康宣教要点
- 初中课内文言翻译方法
- 提高入院宣教知晓率品管圈活动
- 班组长如何对员工开展培训
- 2025版抑郁症常见症状及护理方案
- 2025-2026学年北京市丰台区高一物理上册期中考试试卷及答案
- 2025-2026学年安徽省池州市四年级英语上册期中考试试卷及答案
- 万豪协议书价酒店
- 2016年上外杯-初赛英语试题(原卷版)
- 道路工程测量实习报告
- PKPM系列之-PKPT项目管理软件使用说明
- GB/T 37546-2019无人值守变电站监控系统技术规范
- GB/T 32381-2015全地形车辆轮胎
- GB/T 231.2-2012金属材料布氏硬度试验第2部分:硬度计的检验与校准
- GB/T 17505-2016钢及钢产品交货一般技术要求
- 建筑工地电动车辆安全检查验收表
- 道路交通标志和-标线课件
- 医院医疗器械询价采购相关表格(套)
- 初中数学华东师大七年级上册(2023年新编)第3章 整式的加减整式的加减 教案
评论
0/150
提交评论