大连交通大学2010届本科生毕业设计(论文)
1
摘要
本课题运用STC89C52单片机、DS-18B20数字温度传感器、继电器和M4QA045电动机、
ULN-2003A集成芯片、湿敏电阻,以及四位八段数码管等元器件,设计了温湿度报警电路、
M4QA045电机驱动电路、电热器驱动电路,实现了温室大棚中温度和湿度的控制和报警系
统,解决了温室大棚人工控制测试的温度及湿度误差大,且费时费力、效率低等问题。该系
统运行可靠,成本低。系统通过对温室内的温度与湿度参量的采集,并根据获得参数实现对
温度和湿度的自动调节,达到了温室大棚自动控制的目的。促进了农作物的生长,从而提高
温室大棚的产量,带来很好的经济效益和社会效益。
关键词:STC89C52单片机、DS-18B20数字温度传感器、ULN-2003A集成芯片、温室、自
动控制、自动检测
大连交通大学2010届本科生毕业设计(论文)
2
目录
第1章绪论
§1.1选题背景
§1.2选题的现实意义
第2章系统硬件电路的设计
§2.1系统硬件电路构成系统整体框图
§2.1.2系统整体电路图
§2.1.3系统工作原理
§2.2温度传感器的选择
§2.2.1DS18B20简介
§2.2.2DS18B20的性能特点
§2.2.3DS18B20的管脚排列
§2.2.4DS18B20的内部结构
§2.2.5DS18B20的控制方法
§2.2.6DS18B20的测温原理
§2.2.7DS18B20的时序
§2.2.8DS18B20使用中的注意事项
§2.3单片机的选择
§2.3.1单片机概述
§2.3.2AT89C2051芯片的主要性能
§2.3.3AT89C2051芯片的内部结构框图
§2.3.4AT89C2051芯片的引脚说明
§2.3.5使用AT89C2051芯片编程时的注意事项
§2.4RS-485通信设计
§2.4.1串行通信的分类
§2.4.2串行通信的制式
§2.4.3串行通信的总线接口标准
§2.4.4RS-485的硬件设计
§2.5小结
第3章系统软件的设计
§3.1系统主程序
§3.2系统部分子程序
§3.2.1DS18B20初始化子程序
§3.2.2DS18B20读子程序
§3.2.3DS18B20写子程序(有具体的时序要求)
§3.2.4DS18B20定时显示子程序
§3.2.5DS18B20温度转换子程序
§3.3DS18B20的流程图
大连交通大学2010届本科生毕业设计(论文)
3
第4章总结
参考文献
致谢
附录
大连交通大学2010届本科生毕业设计(论文)
1
第一章绪论
1.1选题背景
在人类的生活环境中,温湿度扮演着极其重要的角色。无论你生活在哪里,从事什
么工作,无时无刻不在与温度和湿度打着交道。自18世纪工业革命以来,工业发展与
是否能掌握温湿度有着密切的联系。在冶金、钢铁、石化、水泥、玻璃、医药等行业,
可以说几乎80%的工业部门都不得不考虑着温湿度的因素。温湿度不但对于工业如此重
要,在农业生产中温度的监测与控制也有着十分重要的意义。我国人多地少,人均占有
耕地面积更少。因此,要改变这种局面,只靠增加耕地面积是不可能实现的,因此我们
要另辟蹊径,想办法来提高单位亩产量。温室大棚技术就是其中一个好的方法。温室大
棚就是建立一个模拟适合生物生长的气候条件,创造一个人工气象环境,来消除温度对
生物生长的约束。而且,温室大棚能克服环境对生物生长的限制,能使不同的农作物在
不适合生长的季节产出,使季节对农作物的生长不再产生过度影响,部分或完全摆脱了
农作物对自然条件的依赖。由于温室大棚能带来可观的经济效益,所以温室大棚技术越
来越普及,并且已成为农民增收的主要手段。
随着大棚技术的普及,温室大棚数量不断增多,温室大棚的温湿度控制便成为一个
十分重要的课题。传统的温湿度控制是在温室大棚内部悬挂温度计和湿度计,通过读取
温度值和湿度值了解实际温湿度,然后根据现有温湿度与额定温湿度进行比较,看温湿
度是否过高或过低,然后进行相应的通风或者洒水。这些操作都是在人工情况下进行的,
耗费了大量的人力物力。现在,随着国家经济的快速发展,农业产业规模的不断提高,
农产品在大棚中培育的品种越来越多,对于数量较多的大棚,传统的温度控制措施就显
现出很大的局限性。温室大棚的建设对温湿度检测与控制技术也提出了越来越高的要
求。
今天,我们的生活环境和工作环境有越来越多称之为单片机的小电脑在为我们服
务。单片机在工业控制、尖端武器、通信设备、信息处理、家用电器等各测控领域的应
用中独占鳌头。时下,家用电器和办公设备的智能化、遥控化、模糊控制化已成为世界
潮流,而这些高性能无一不是靠单片机来实现的。采用单片机来对温湿度进行控制,不
仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温湿度的技术
指标,从而能够大大提高产品的质量和数量。单片机以其功能强、体积小、可靠性高、
造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用的器
件,尤其在日常生活中也发挥越来越大的作用。因此,单片机对温湿度的控制问题是一
个工农业生产中经常会遇到的问题。因此,本课题围绕基于单片机的温室大棚控制系统
展开了应用研究工作。
大连交通大学2010届本科生毕业设计(论文)
2
1.2选题的现实意义
随着单片机和传感技术的迅速发展,自动检测领域发生了巨大变化,温室环境自动
监测控制方面的研究有了明显的进展,并且必将以其优异的性能价格比,逐步取代传统
的温湿度控制措施.但是,目前应用于温室大棚的温湿度检测系统大多采用模拟温度传
感器、多路模拟开关、A/D转换器及单片机等组成的传输系统。这种温湿度度采集系统
需要在温室大棚内布置大量的测温电缆,才能把现场传感器的信号送到采集卡上,安装
和拆卸繁杂,成本也高。同时线路上传送的是模拟信号,易受干扰和损耗,测量误差也
比较大。为了克服这些缺点,本文参考了一种基于单片机并采用数字化单总线技术的温
度测控系统应用于温室大棚的的设计方案闭,根据实用者提出的问题进行了改进,提出
了一种新的设计方案,在单总线上传输数字信号。
本文介绍的温湿度测控系统就是基于单总线技术及其器件组建的。该系统能够对大
棚内的温湿度进行采集,利用温湿度传感器将温室大棚内温湿度的变化,变换成数字量,
其值由单片机处理,最后由单片机去控制液晶显示器,显示温室大棚内的实际温湿度,
同时通过与预设量比较,对大棚内的温度进行自动调节,如果超过我们预先设定的湿度
限制,湿度报警模块将进行报警。这种设计方案实现了温湿度实时测量、显示和控制。
该系统抗干扰能力强,具有较高的测量精度,不需要任何固定网络的支持,安装简单方
便,性价比高,可维护性好。这种温湿度测控系统可应用于农业生产的温室大棚,实现
对温度的实时控制,是一种比较智能、经济的方案,适于大力推广,以便促进农作物的
生长,从而提高温室大棚的亩产量,以带来很好的经济效益和社会效益。
大连交通大学2010届本科生毕业设计(论文)
3
第二章系统硬件电路的设计
2.1系统硬件构成及其测控原理
2.1.1系统硬件电路构成系统整体框图
STC89C52
复位模块
晶振模块
LCD1602显示模块
温度调节模块
湿度报警模块
DHT11温湿度检测模块
图2-1系统整体框图
2.1.2系统整体电路图
图2-2系统整体电路图
大连交通大学2010届本科生毕业设计(论文)
4
2.1.3系统工作原理
本系统由如图2-1、图2-2所示,DHT11温湿度传感器采集数据,STC89C52单片机进
行数据处理,LCD1602显示模块显示温湿度。由PWM控制温度调节模块进行温度调节,
当温度小于18℃时,M4QA045电机停止运转,当温室大于28℃时,M4QA045电机全
速运转,当温度处于18℃和28℃之间时,通过PWM控制M4QA045电机转速。由
STC89C52单片机输出高低电平控制湿度报警模块,当湿度大于65%RH或者小于
45%RH时,STC89C52单片机输出高电平,湿度报警模块报警,当湿度处于45%RH和
65%RH之间时,STC89C52单片机输出低电平,湿度报警模块关闭。
2.2显示模块的选择
2.2.1DS18B20简介
DS18B20数字温度传感器采用DS18B20可组网数字温度传感器芯片封装而成,具有耐
磨耐碰,体积小,使用方便,封装形式多样等优点,适用于各种狭小空间设备数字测温和控
制领域。
2.2.2DS18B20的性能特点
2.2.2.1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电
2.2.2.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微
处理器与DS18B20的双向通讯
2.2.2.3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现
组网多点测温
2.2.2.4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如
一只三极管的集成电路内
2.2.2.5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
2.2.2.6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃
和0.0625℃,可实现高精度测温
2.2.2.7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在7
50ms内把温度值转换为数字,速度更快
2.2.2.8、测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送C
RC校验码,具有极强的抗干扰纠错能力
2.2.2.9、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
大连交通大学2010届本科生毕业设计(论文)
5
2.2.3DS18B20的管脚排列
2.2.3.1、DS18B20的外形及管脚排列如下图:
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
2.2.4DS18B20的内部结构
DS18B20内部结构图:
2.2.5DS18B20的控制方法
2.2单片机的选择
2.2.1单片机概述
单片微型计算机简称单片机,又称微控制器,嵌入式微控制器等,属于第四代电子
计算机。它把中央处理器、存储器、输入/输出接口电路以及定时器叶数器集成在一块
芯片上,从而具有体积小、功耗低、价格低廉、抗干扰能力强且可靠性高等特点,因此,
大连交通大学2010届本科生毕业设计(论文)
6
适合应用于工业过程控制、智能仪器仪表和测控系统的前端装置。正是由于这一原因,
国际上逐渐采用微控制器(MCU)代替单片微型计算机(SCM)这一名称。“微控制器”更能
反映单片机的本质,但是由于单片机这个名称已经为国内大多数人所接受,所以仍沿用
“单片机”这一名称。
1、单片机的主要特点有:
(1)具有优异的性能价格比。
(2)集成度高、体积小、可靠性高。
(3)控制功能强。
(4)低电压,低功耗。
2、单片机的主要应用领域:
(1)工业控制
(2)仪器仪表
(3)电信技术
(4)办公自动化和计算机外部设备
(5)汽车和节能
(6)制导和导航
(7)商用产品
(8)家用电器
因此,在本课题设计的温湿度测控系统中,采用单片机来实现。在单片机选用方面,
由于STC89系列单片机与MCS-51系列单片机兼容,所以,本系统中选用STC89C52
单片机。
大连交通大学2010届本科生毕业设计(论文)
7
2.2.2STC89C52单片机的引脚说明
图2-3STC89C52单片机引脚图
芯片引脚如图2-3所示:
VCC:电源。
GND:地。
P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL
逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器
时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash
编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要
外部上拉电阻。
P1口:是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个
TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口
使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器
2的触发输入(P1.1/T2EX),具体如下表1所示。在flash编程和校验时,P1口接收低
大连交通大学2010届本科生毕业设计(论文)
8
8位地址字节。
P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4
个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输
入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,
P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地
址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程
和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4
个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输
入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如上表2-1所示。在flash编程和校
验时,P3口也接收一些控制信号。
RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)
上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地
址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器
或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如
果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,
ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使
能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当STC89C52从
外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数
据存储器时,PSEN将不被激活。
EA/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储
器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期
间,EA也接收12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
程序存储器:如果EA引脚接地,程序读取只从外部存储器开始。对于89S52,如
果EA接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻
址,寻址地址为:2000H~FFFFH。
数据存储器:STC89C52有256字节片内数据存储器。高128字节与特殊功能寄
大连交通大学2010届本科生毕业设计(论文)
9
存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。
当一条指令访问高于7FH的地址时,寻址方式决定CPU访问高128字节RAM还是
特殊功能寄存器空间。直接寻址方式访问特殊功能寄存器(SFR)
定时器2:定时器2是一个16位定时/计数器,它既可以做定时器,又可以做事件
计数器。其工作方式由特殊寄存器T2CON中的C/T2位选择(如表2所示)。定时器2
有三种工作模式:捕捉方式、自动重载(向下或向上计数)和波特率发生器。工作模式
由T2CON中的相关位选择。定时器2有2个8位寄存器:TH2和TL2。在定时工作方式
中,每个机器周期,TL2寄存器都会加1。由于一个机器周期由12个晶振周期构成,
因此,计数频率就是晶振频率的1/12。
中断:STC89C52有6个中断源如表2-2所示:两个外部中断(INT0和INT1),
三个定时中断(定时器0、1、2)和一个串行中断每个中断源都可以通过置位或清除特
殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断
允许总控制位EA,它能一次禁止所有中断。定时器2可以被寄存器T2CON中的TF2和
EXF2的或逻辑触发。程序进入中断服务后,这些标志位都可以由硬件清0。实际上,中
断服务程序必须判定是否是TF2或EXF2激活中断,标志位也必须由软件清0[1]。
表2-2中断控制寄存器
符号位地址功能
EAIE.7中断总允许控制位。EA=0,中断总禁止;EA=1,各中断由
各自的控制位设定
-IE.6预留
ET2IE.5定时器2中断允许控制位
ESIE.4串行口中断允许控制位
ET1IE.3定时器1中断允许控制位
EX1IE.2外部中断1允许控制位
ET0IE.1定时器0中断允许控制位
EX0IE.0外部中断1允许控制位
2.2.3STC89C52单片机最小系统
大连交通大学2010届本科生毕业设计(论文)
10
图2-4晶振电路
图2-5复位电路
如图2-4、图2-5所示,复位电路和时钟电路是维持单片机最小系统运行的基本模
块。单片机最小系统是在以51单片机为基础上扩展,使其能更方便地运用于测试系统
中,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被测试的技
术指标,从而能够大大提高产品的质量和数量。单片机以其功能强、体积小、可靠性高、
造价低和开发周期短等优点,称为在实时检测和自动控制领域中广泛应用的器件,在工
业生产中称为必不可少的器件,尤其是在日常生活中发挥的作用也越来越大[2]。
2.5温度调节模块设计
1、方案一
图2-12方案一电路图
大连交通大学2010届本科生毕业设计(论文)
11
如图2-12所示,由PWM控制温度调节模块,当PWM端输入高电平时,电流经Q1放
大,光耦导通,光耦输出电流经Q2放大后,使双向可控硅导通,M4QA045电机运转,当
PWM端输入低电平时,双向可控硅控制端输入电流为0,交流电过零以后,双向可控硅
截止,M4QA045电机停止运转[4]。
2、方案二
图2-13方案二电路图
如图2-13所示,由PWM控制温度调节模块,当PWM端输入高电平时,电流经Q4放
大,常开端5闭合,M4QA045电机运转,当PWM端输入低电平时,常开端5断开,M4QA045
电机停止运转。
3、方案比较
方案一采用光耦隔离强电,方案二采用继电器隔离强电,但方案一没有实现强电与
直流源的隔离,且方案一环节复杂,计算难度大,过多的环节延长响应时间,从而影响
温度调整模块的性能,所以选择方案二[5]。
大连交通大学2010届本科生毕业设计(论文)
12
图2-14电热器驱动电路
基于以上两个方案的分析,加热器驱动电路也同样选用继电器隔离,当温度低于
18℃时,相应引脚输出高电平,电流经过三极管放大,继电器常开端闭合,电热器工作,
当温度高于23℃时,相应引脚输出低电平,继电器常开端关闭,电热器不工作[6]。
2.6湿度报警模块设计
图2-14湿度报警模块电路图
如图2-14所示,由STC89C52单片机在BUZZER端输入信号控制湿度报警模块。当
湿度大于65%RH或者小于45%RH时,BUZZER端输入高电平,电流经Q3放大,使蜂鸣器
大连交通大学2010届本科生毕业设计(论文)
13
工作;当湿度处于45%RH和65%RH之间时,BUZZER端输入低电平,蜂鸣器不工作[7]。
大连交通大学2010届本科生毕业设计(论文)
14
第三章温室大棚控制系统软件设计
3.1KeilC软件概述
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为
CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少
使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51
单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语
言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行
开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可
看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试
器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、
WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机
的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之
选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不
使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也
会令你事半功倍。
KeilC51开发系统基本知识KeilC51开发系统基本知识:
1.系统概述
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,
与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学
易用。用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界
面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成
的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软
件时更能体现高级语言的优势。下面详细介绍KeilC51开发系统各部分功能和使用。
51单片机软件开发系统的整体结构
C51工具包的整体结构,其中uVision与Ishell分别是C51forWindows和forDos
的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开
发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器
编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起
经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以
供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标
板进行调试,也可以直接写入程序存贮器如EPROM中。
大连交通大学2010届本科生毕业设计(论文)
15
使用独立的Keil仿真器时,注意事项:
*仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频
率的晶振。
*仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
*仿真芯片的31脚已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;
但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展
有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。
1、安装好了Keil软件以后,我们打开它。
2、我们先新建一个工程文件,点击“Project->NewProject…”菜单。
3、选择工程文件要存放的路径,输入工程文件名xdch最后单击保存。
4、在弹出的对话框中选择CPU厂商及型号。
5、选择好STC89C52芯片,接着点击确定,弹出对话框。
6、新建一个C51文件,单击左上角的NewFile,保存为DS18B20_4.C,(注意
后缀名必须为.C),再单击“保存”。
7、存好后把此文件加入到工程中方法如下:用鼠标在SourceGroup1上单击右键,
然后再单击AddFilestoGroupSourceGroup1。
8、选择要加入的文件,找到MAIN.C后,单击Add,然后单击Clo。
9、在编辑框里输入代码。
10、生成.hex烧写文件,先单击OptionsforTarget。
11、在下图中,我们单击Output,选中CreateHEXF,再单击“确定”。
以上是Keil软件的基本应用[8]。
大连交通大学2010届本科生毕业设计(论文)
16
3.2温室大棚控制系统程序设计
3.2.1整体系统框图
DNT11数据采集
温湿度数据转换
LCD1602温湿度数据显示
根据测得温度调整PWM占空比
根据测得湿度控制蜂鸣器
单片机、LED1602初始化
system_stop是否等于0?
结束
Y
N
图4-1系统整体框图
大连交通大学2010届本科生毕业设计(论文)
17
首先,初始化单片机设置中断,定义变量,然后初始化LCD1602显示模块,设置8
位格式,2行,5*7矩阵显示,整体显示,关光标,不闪烁设定输入方式,增量不移位,
清除屏幕显示。调用温湿度采集程序进行数据采集,经过数据转换程序,将十六进制转
换成十进制,将十进制数据输出到LCD1602显示模块进行显示,根据温度调整电机转速,
根据湿度判断是否报警,最后,进行新一轮的温湿度采集[9]。
3.2.2LCD1602显示模块程序设计
延时
数据转换十六进制→十进
制
是否在第一行显示数据?
Y
address=0x80+xaddress=0xc0+x
N
输入显示地址命令
延时
输入显示数据
LCD1602显示模块初始化
结束
图4-2显示程序框图
大连交通大学2010届本科生毕业设计(论文)
18
如图4-2,初始化LCD1602显示模块,设置8位格式,2行,5*7矩阵显示,整体显
示,关光标,不闪烁设定输入方式,增量不移位,清除屏幕显示,延时等待,将采集到
的温湿度数据进行转换,十六进制转换成十进制,然后,判断是否在第一行显示,输入
相应的地址数据,延时等待,输入需要显示的数据。
3.2.3PWM程序设计
开始定时器T0
等待中断
调用中断子程序
T0_number
输出1
T0_number>100
T0_number=
0
中断初始化,变量定义
输出0
图4-3PWM程序框图
如图4-3所示,进行中断程序初始化,设置定时器T0中断时间为1ms,中断100次,
即100ms作为一个脉冲周期,每中断一次,由变量T0_number进行计数,当变量T0_number
大于100时,给变量T0_number赋值0,重新开始计数,当变量T0_number小于变量
PWM_width_H时,输出高电平,当变量T0_number大于变量PWM_width_H时,输出低电
平,以此控制脉宽[10]。
大连交通大学2010届本科生毕业设计(论文)
19
第四章调试中遇到的问题
在软件的调试过程中,遇到的问题有很多,下面就几个比较突出的问题进行说明。
1)在对KeilC的使用时不知道怎么才能让它生成HEX文件,从而进行仿真,因为
以前没有用过类似的软件,不会并且也不知道需要生成HEX文件,导致前期的工作很难
进行
2)因为用的是DHT11数字传感器,在编程过程中需要对所测得温度进行处理,而
且需要给定一个温度范围,建立一个温度与电机转速的数学模型,经过反复的计算、实
验才实现。
3)因为考虑到经济实用方面,所以在进行实物操作之前,采用proteus软件对程
序和硬件电路进行仿真,可是在仿真过程中,独立按键总是不灵敏,这需要对延迟时间
进行调整,而程序中设置的延迟时间总是不能够很符合实际操作,所以在这方面浪费了
大量的时间进行反复的操作和实验
4)在仿真过程中,因为用到的是LCD1602显示模块,这种显示模块是可以显示字
符的,并且这种模块本身带有字库,但事实仿真过程中,电路要求相对宽松,不需加上
拉电阻,而实际的电路调试过程需要加上拉电阻。
大连交通大学2010届本科生毕业设计(论文)
20
结论
以上为毕业期间所设计的温室大棚控制控制系统,它经过多次修改和整理,可以满
足设计的基本要求。采用STC89C52单片机、DHT11数字温湿度传感器、LCD1602液晶显
示模块和M4QA045电机等器件设计温室大棚控制系统,实现温湿度采集、英文显示;温
度自动调节,湿度越限报警功能。
因为本人水平有限,此设计存在一定的问题。譬如系统抗干扰能力差,且没有实现
自动自动复位。由于使用的是单片机作为核心的控制元件,配合其它器件,使本温度控
制系统具有功能强、性能可靠、电路简单、成本低的特点,加上经过优化的程序,使其
有很高的智能化水平。
大连交通大学2010届本科生毕业设计(论文)
21
谢辞
经过这段时间的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业
设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以
及同学们的支持和帮助,想要完成这个设计是难以想象的。
在这里首先要感谢我的导师费继友教授。费教授平日里工作繁多,但在我做毕业设
计的每个阶段,从设计草案的确定和修改,中期检查,后期详细设计,装配草图等整个
过程中都给予了我悉心的指导。他的治学严谨和科学研究的精神也是我永远学习的榜
样,并将积极影响我今后的学习和工作。
然后,还要感谢大学四年来所有的老师,为我们打下测控技术与仪器专业知识的基
础;同时还要感谢所有的同学以及研究生们,正是因为有了你们的支持和鼓励,此次毕
业设计才会顺利完成。
最后感谢母校—大连交通大学四年来对我的大力栽培。
大连交通大学2010届本科生毕业设计(论文)
22
参考文献
[]孙育才.MCS-51系列单片微型计算机及其应用(第四版)[M].南京:东南大学出版社,2004
[2]康华光.电子技术基础-模拟部分(第四版)[M].北京:高等教育出版社,1999
[3]康华光.电子技术基础-数字部分(第四版)[M].北京:高等教育出版社,1999
[4]石来德.机械参数电测技术[M].上海:上海科学技术出版社,1981
[5]ementSystems:ApplicationandDesign[M].America:McGraw-HILL
BOOKCOMPANY,1976
[6]曹继松.测试电路[M].上海:上海交通大学出版社,1995
[7]谢自美.电子线路设计实验测试[M].武汉:华中科技大学出版社,2000
[8]马靖善,秦玉平.C语言程序设计[M].北京:清华大学出版社,2005
[9]赖麒文.8051单片机C语言开发环境实务与设计[M].北京:科学出版社,2002
[10]徐爱钧.智能化测量控制仪表原理与设计[M].北京:北京航空航天大学出版社,2004
大连交通大学2010届本科生毕业设计(论文)
23
附录
#include
#include
#defineLCD_DBP2
sbitDQ=P1^0;
sbitBUZZER=P1^1;
sbitPWM=P1^2;
sbitLCD_RS=P1^4;
sbitLCD_RW=P1^5;
sbitLCD_E=P1^6;
sbitHEAT=P1^7;
voidinitial(void);
voidread_DHT11(void);
voidLCD_write_command(unsignedcharcom);
voidLCD_display_char(unsignedcharx,unsignedchary,unsignedchardat);
unsignedcharread_DHT11_char(void);
voidcontrol_temperature_humidity(void);
voiddelay_xms(unsignedinttime_xms);
voiddelay_x10us(unsignedinttime_x10us);
unsignedcharstop_system=0;
unsignedcharlineOne[]="TS(0-50):C";
unsignedcharlineTwo[]="HS(20-90):%RH";
unsignedintT0_number=0,T1_number,PWM_width_H;
unsignedchartemperature_ten,temperature_one,humidity_ten,humidity_one;
unsignedchartemperature_H,temperature_L,humidity_H,humidity_L,checkData;
voidinitial(void)
{
unsignedchari,j;
大连交通大学2010届本科生毕业设计(论文)
24
TMOD=0x11;//定时器0工作方式1,16位计数器;定时器1工作方式1,16位
计数器
TH1=0xFC;//定时器1溢出周期1ms,延时
TH1=0x66;
TH0=0xFC;//定时器0中断周期1ms,PWM
TL0=0x66;
EA=1;
ET1=1;
ET0=1;
EX0=1;
IT1=1;
TR0=1;
LCD_write_command(0x38);//设置8位格式,2行,5x7
LCD_write_command(0x0c);//设置整体显示,关闭光标,且不闪烁
LCD_write_command(0x06);//设置输入方式,增量不移位
LCD_write_command(0x01);//清屏
for(i=0;i<16;i++)
{
LCD_display_char(i,1,lineOne[i]);
}
for(j=0;j<16;j++)
{
LCD_display_char(j,2,lineTwo[j]);
}
LCD_display_char(14,1,0xDF);//显示
}
voidread_DHT11(void)
{
DQ=0;
delay_xms(18);
大连交通大学2010届本科生毕业设计(论文)
25
DQ=1;
delay_x10us(2);
if(DQ==0)
{
while(DQ==0);
while(DQ==1);
humidity_H=read_DHT11_char();
humidity_L=read_DHT11_char();
temperature_H=read_DHT11_char();
temperature_L=read_DHT11_char();
}
}
unsignedcharread_DHT11_char(void)
{
unsignedchari,temp_one,temp_two;
for(i=0;i<8;i++)
{
while(DQ==0);
delay_x10us(3);
if(DQ==0)
{
temp_one=0;
}
el
{
temp_one=1;
}
temp_two<<=1;
temp_two|=temp_one;
while(DQ==1);
}
returntemp_two;
大连交通大学2010届本科生毕业设计(论文)
26
}
voidLCD_write_command(unsignedcharcom)
{
LCD_DB=com;
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
delay_xms(1);
LCD_E=0;
delay_xms(5);
}
voidLCD_display_char(unsignedcharx,unsignedchary,unsignedchardat)
{
if(y==1)
{
LCD_write_command(0x80+x);
}
el
{
LCD_write_command(0xc0+x);
}
LCD_DB=dat;
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
delay_xms(1);
LCD_E=0;
delay_xms(5);
}
voidLCD_display_DHT11(void)
{
大连交通大学2010届本科生毕业设计(论文)
27
temperature_ten=temperature_H/10+0x30;
temperature_one=temperature_H%10+0x30;
humidity_ten=humidity_H/10+0x30;
humidity_one=humidity_H%10+0x30;
LCD_display_char(12,1,temperature_ten);
LCD_display_char(13,1,temperature_one);
LCD_display_char(11,2,humidity_ten);
LCD_display_char(12,2,humidity_one);
}
voidcontrol_temperature_humidity(void)
{
if(temperature_H>28)//温度→转速
{
PWM_width_H=100;
}
elif(temperature_H<18)
{
PWM_width_H=0;
HEAT=1;
}
el
{
if(temperature_H>=23)
{
HEAT=0;
}
PWM_width_H=(temperature_H-18)*10;
}
if(humidity_H>65||humidity_H<45)//湿度→蜂鸣
{
BUZZER=1;
}
大连交通大学2010届本科生毕业设计(论文)
28
el
{
BUZZER=0;
}
}
voiddelay_xms(unsignedinttime_xms)
{
T1_number=0;
TR1=1;
while(1)
{
if(time_xms==T1_number)
{
break;
}
}
TR1=0;
}
voiddelay_x10us(unsignedinttime_x10us)
{
while(time_x10us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
大连交通大学2010届本科生毕业设计(论文)
29
_nop_();
}
}
voidmain(void)
{
initial();
while(1)
{
delay_xms(2000);
read_DHT11();
LCD_display_DHT11();
control_temperature_humidity();
}
}
voidINT_0(void)interrupt0
{
stop_system=1;
}
voidTimer_0(void)interrupt1
{
TH0=0xFC;//定时器0中断周期1ms,PWM
TL0=0x66;
T0_number++;
if(T0_number>100)
{
T0_number=0;
}
elif(T0_number
大连交通大学2010届本科生毕业设计(论文)
30
{
PWM=1;
}
el
{
PWM=0;
}
}
voidTimer_1(void)interrupt3
{
TH1=0xFC;//定时器1溢出周期1ms,延时
TL1=0x66;
T1_number++;
}
本文发布于:2023-01-31 08:32:22,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/166717.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |