基于单片机的温湿度报警器设计

更新时间:2024-03-29 22:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2013毕业设计论文

基于单片机的温湿度监控报警

系统设计

作者姓名:伍 帅

专业名称:电气工程及其自动化

指导老师:许 丽 讲师

2013毕业设计论文

2013毕业设计论文

摘要

温度、湿度和人类的生产、生活有着密切的关系,尤其是在医学、电子电力、航天航空、食品发酵,农业生产等领域中对温湿度的要求尤其严格,是最常见最基本的参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度湿度的实时检测与控制。并且随着人们生活水平的提高,人们对自己的生存环境越来越关注。而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度湿度的检测及控制就非常有必要了。

使用STC89C52单片机设计温湿度监控报警系统,可以即时精确的反应温室内外的温度以及湿度的变化。完成诸如升温到特定的温度、降温到特定的温度。在温度上下限范围内保持恒温等多种控制方式,在湿度控制方面也是如此。将此系统应用到温室当中无疑为植被生长提供了更加适宜的环境。对于大棚种植和花圃、花卉栽培,必须在某些特定环境安装温湿度装置对其进行监控。本系统可以及时、精确的反映室内外的温度以及湿度的变化,能够满足温湿度的控制要求。

关键词:温湿度 监控 STC89S52

2013毕业设计论文

2013毕业设计论文

Abstract

Temperature, humidity and has close relation with the human production and living, especially in medicine, electronics, electric power, aerospace, food fermentation, the requirements for temperature and humidity in areas such as agricultural production is particularly strict, is the most common is the most basic parameters, such as machinery, electronics, petroleum, chemical industry etc widely needed in real-time detection and control of temperature, humidity. And as people living standard rise, people for their own survival environment more and more attention. And the body's comfort level with the change of temperature and humidity in the air and mood has a direct effect, so the detection and control of the temperature humidity is very necessary.

Using a STC89C52 single-chip microcomputer temperature and humidity monitoring alarm system, can real-time accurate reaction inside and outside the greenhouse temperature and humidity changes. Finish such as heating up to a specific temperature and cooling to a specific temperature. In upper and lower temperature range constant temperature control of a variety of ways, so in terms of humidity control. Will no doubt of this system is applied to the greenhouse for vegetation growth provide a more comfortable environment. For greenhouses planting and flower beds, flower cultivation, must be installed in some specific environment to monitor the temperature and humidity devices. This system can timely and accurately reflect the change of indoor and outdoor temperature and humidity, can satisfy the requirement of the temperature and humidity control.

Keywords: Temperature and humidity, monitoring, STC89S52

2013毕业设计论文

2013毕业设计论文

目录

摘要 ............................................................................................................ I Abstract .................................................................................................... II 目录 ......................................................................................................... III 1 总体设计概述 ....................................................................................... 1

1.1 系统的主要功能 ......................................................................... 1 1.2 系统的工作原理 ......................................................................... 1 1.3 总体设计 ..................................................................................... 2 1.3.1 总体设计框图 ....................................................................... 2 1.3.2 总体设计工作流程 ............................................................... 3 2 系统硬件设计 ....................................................................................... 4

2.1 主控模块设计 ............................................................................. 4 2.1.1 STC89C52概述 ..................................................................... 4 2.1.2 时钟电路与复位电路 ........................................................... 7 2.2 电源模块设计 ............................................................................. 8 2.3 DHT11传感器模块设计 ............................................................. 8 2.3.1 DHT11传感器 ....................................................................... 8 2.3.2 DHT11传感器模块电路设计 ............................................. 10 2.4 1602液晶显示模块设计 ........................................................... 11 2.4.1 1602液晶显示屏 ................................................................. 11 2.4.2 1602液晶显示屏参数 ......................................................... 11 2.4.3 1602液晶显示模块电路设计 ............................................. 13 2.5 阈值设置模块设计 ................................................................... 14 2.6 报警模块设计 ........................................................................... 15 2.6.1 蜂鸣器报警模块设计 ......................................................... 15 2.6.2 发光二极管报警模块设计 ................................................. 16 2.7 24C02数据存储模块 ................................................................ 16

2013毕业设计论文

2013毕业设计论文

2.7.1 24C02数据存储器 .............................................................. 16 2.7.2 24C02数据存储器模块电路设计 ...................................... 17 2.8 系统总体电气原理图 ............................................................... 18 3 系统软件设计 ..................................................................................... 19 4 系统调试 ............................................................................................. 21 总结 ......................................................................................................... 22 致谢 ......................................................................................................... 23 参考文献 ................................................................................................. 24 附件1 系统程序 .................................................................................... 25

A1.1 主程序 .................................................................................... 25 A1.2 24C02程序 ............................................................................. 30 A1.3 DHT11传感器程序 ................................................................ 33 A1.4 1602程序 ................................................................................ 35 附件2 PCB板 ........................................................................................ 39 附件3 实物图 ........................................................................................ 40

2013毕业设计论文

2013毕业设计论文

1 总体设计概述

1.1 系统的主要功能

本系统以单片机最小系统为核心,将温湿度通过LCD1602显示器实时的显示出来,温湿度最高值可以任意设置并实时显示出来。(湿度测量范围:20-95%RH。温度测量范围:0-50℃)。

各部分主要功能是:

1. 温湿度实时检测及显示。通过LCD1602实时地显示传感器DHT11检测到的温湿度值,并且固定时间(5s)检测更新显示一次。

2. 阈值设置,通过四个按键实现。在使用过程中不需要在程序中更改。使得系统更加人性化、智能化,具有更高的实用价值。

3. 当温湿度超出阈值时能自动报警。此时对应发光二极管的点亮,蜂鸣器发出声音实现报警,以提醒用户做出相应的改进措施。通过干燥器、降温风扇等设备工作。使温湿度回到设定值内,报警自动解除。

1.2 系统的工作原理

本系统的工作原理:系统主要涉及了温湿度的测量、显示以及实现简单控制。硬件方面有五个模块,即STC89C52单片机主控模块、DHT11温湿度传感器模块、LCD1602液晶显示模块、报警模块以及阈值设置模块等。其中主控模块以单片机最小系统为基础,适当增加驱动电路。

1. 传感器模块使用的是DHT11数字温湿度传感器。通过DHT11检测出当前环境下的温湿度,将所测数据交给STC89C52单片机进行分析和处理,并分别存入不同数组以便显示时候用。其中,为了显示稳定,本系统每间隔5s采集一次数据送入单片机。

2. 1602液晶显示模块就是实现温湿度检测值和阈值的显示。其分两行显示,上边一行显示温度值,下边显示湿度值,两行的末尾两位是阈值显示位,正常工作的时候可以通过阈值设置模块实时调节需要的阈值,实时显示出来,构建了自动化的人机交互。

2013毕业设计论文

2013毕业设计论文

3. 报警模块实现了检测值超过阈值的时候发光二极管点亮,蜂鸣器鸣响报警。本系统采用的是有源蜂鸣器,因此无论温度还是湿度超出范围蜂鸣器都是以相同频率的声音进行报警提示。提醒工作人员此时温度湿度数据出现异常、需及时调整室内温湿度。

4. 阈值设置模块通过四个按键实现温湿度报警阈值的设置。按一次按键温度、湿度对应值加一或者减一。使得温湿度阈值设置提供了极大的方便,不需要每次都在程序里改动然后再烧录,省去了复杂的过程。实现自动化,便于用于工业,农业等对温湿度要求较高的场所。

1.3 总体设计 1.3.1 总体设计框图

按照系统功能的具体要求,在保证实现其功能的基础上,尽可能降低系统成本。总体设计方案围绕上述思想,初步确定系统的方案如图1.1所示。

按键输入温度湿度阈值设置LCD1602显示模块DHT11温湿度传感器监测温度湿度数据温湿度阈值外部EEPROMSTC89C52单片机发光二极管报警蜂鸣器报警 图1.1系统总体设计框图

从图中可以看出,系统有STC89C52单片机模块、DHT11传感器模块、阈值设置模块、1602字符液晶显示模块、报警模块、数据存储模块等组成。在方案设计中,外围模块采用并行控制,以简化系统,提高控制精度。该设计以STC89C52单片机为控制核心,实现温湿度采集、显示、报警。

2013毕业设计论文

2013毕业设计论文

1.3.2 总体设计工作流程

本次设计有两个部分是重点。一个是液晶显示部分,一个是DHT11传感器部分。难点是软件程序的编写和系统的整体调试。整个流程如图1.2所示:

2013毕业设计论文

分析题目并查找资料设计电气原理图搭建电路板验证各部分原理写C语言程序并调试各部分功能绘制PCB、制版、焊接、调试完成

1.2 整体设计流程图

图2013毕业设计论文

2 系统硬件设计

2.1 主控模块设计 2.1.1 STC89C52概述

STC89C52单片机是宏晶科技推出的新一代高速,低功耗,超强抗干扰的单片机,指令代码完全兼容传统8051单片机。

主要特性如下:

1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。

2. 工作电压:5.5V~3.3V。

3. 工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。

4. 用户应用程序空间为8K字节。 5. 片上集成512字节RAM。

6. 通用I/O口(32个),复位后为:P0/P1/P2/P3是准双向口,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片。

8. 具有EEPROM功能。 9. 具有看门狗功能。 10. 共3个16位定时器/计数器。即定时器T0、T1、T2。

11. 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒。

12. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)。STC89C52单片机的工作模式

2013毕业设计论文

2013毕业设计论文

1. 掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序。

2. 空闲模式:典型功耗2mA。

3. 正常工作模式:典型功耗4Ma~7mA。

T2/P1.0T2EX/P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTRXD/P3.0TXD/P3.1INT0/P3.2INT1/P3.3T0/P3.4T1/P3.5WR/P3.6RD/P3.7XTAL2XTAL1VSS12345678910111213141516171819204039383736353433323130292827262524232221VCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7ALE/PROGPSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0图2.1 STC89C52引脚图

STC89C52引脚功能说明

1. VCC(40引脚):电源电压。 2. VSS(20引脚):接地。

3. P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻,一般为10kΩ。

STC89C52EA

2013毕业设计论文

2013毕业设计论文

4. P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流(IIL)。此外,P1.0和P1.1还可以作为定时器/计数2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。

5. P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(IIL)。

6. P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流(IIL)。P3口除作为一般I/O口外,还有其他一些复用功能。

7. RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作。

8. ALE/PROR(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚(PROR)也用作编程输入脉冲。

9. PSEN(29引脚):外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当STC89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而访问外部数据存储器时,PSEN将不被激活。

10. EA/VPP(31引脚):访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。注意加密方式1时,EA将内部锁定位RESET。为了执行内部程序指令,

EA应该接VCC。在Flash编程期间,EA也接收12伏VPP电压。

11. XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。

2013毕业设计论文

2013毕业设计论文

12. XTAL2(18引脚):振荡器反相放大器和内部时钟发生电路的输入端。

2.1.2 时钟电路与复位电路

单片机需要外加时钟电路为内部程序提供时序。单片机内部具有一个构成振荡器的高增益反相放大器,此放大器的输入与输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2上外接时钟源即可构成时钟电路。本系统的时钟电路如图2.2所示。

C130pFX1CRYSTALC230pF 图2.2 单片机的外部时钟电路

在图2.2中电容的大小均为30pF,晶振的大小为11.059MHz。 为了保证单片机的可控运行,需要给单片机加复位电路,一般情况下,单片机的复位电路有以下几项功能:

1. 上电复位可对内部寄存器进行复位,否则寄存器状态未知。 2. 同步内、外部时钟信号。防止频率不稳及晶振停振。 3. 有些高级芯片,不先复位根本部工作。

4. 有复位引脚的芯片必须加复位,这是电子设计的基本要求。 5. 在电路上电时候或电压波动不稳定的时候,当给单片机上电那一瞬间,电压有在几微秒内(有的是几毫秒内)不是直接跳变到5V的而是一个直线上升的阶段,这时候,单片机不能正常工作,需要复位电路给它延时以等到电压稳定。

6. 由于单片机在工作过程中可能会受到各种干扰因素,所以不排除单片机出错的可能,当单片机的程序“跑飞”时可以通过复位电路是单片机恢复正常的运行状态。

单片机的复位电路主要有以下几种方式:上电复位方式、外部脉冲复位方式、上电+按钮复位方式以及软件复位等。本系统为了实现方便,

2013毕业设计论文

2013毕业设计论文

使用硬件复位方式,即采用自动电平复位的方式,见图2.3所示。

VCCRST10uF10K单片机GND

图2.3 单片机自动电平复位电路

图2.3的复位电路直接接单片机得RST管脚,为单片机提供复位电平,图中电容为10uF,电阻为10K。

本设计各个输入输出点及功能说明:

本设计以STC89C52单片机最小系统为核心。供电电源由USB接口或者干电池供电。将P0口作为与液晶的数据传输口。P1.5、P1.6作为发光二极管接口,以控制报警模块工作。P1.7作为与传感器DHT11通信的数据口,P3口作为阈值模块中四个按键的接口,P2.5、P2.7作为分别于液晶的RS、R/W和E端相连接,以控制液晶显示,P2.0接蜂鸣器控制端,以控制报警模块工作。

2.2 电源模块设计

本设计由于经济等条件限制,没能单独设计制作直流5V电源,暂用USB供电或者使用三节5号干电池代替,在实际应用场合中,需加入此部分,可直接购买市电220V转直流5V开关电源,以保证系统长时间工作。

2.3 DHT11传感器模块设计 2.3.1 DHT11传感器

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

2013毕业设计论文

2013毕业设计论文

因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。

DHT11传感器引脚图如下2.4所示:

DHT113Pin1Pin2Pin4Pin

图2.4 DHT11传感器引脚图

1. 引脚介绍:

Pin1:(VCC),电源引脚,供电电压为3~5.5V。 Pin2:(DATA),串行数据,单总线。 Pin3:(NC),空脚,请悬浮。

Pin4:(VDD),接地端,电源负极。 2. 接口说明:

由传感器资料知连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。考虑本设计实际应用情况故使用5K上拉电阻。

VCC5KDATAVCC1Pin2Pin3Pin4Pin单片机DHT11传感器GND

图2.5 DHT11典型应用电路

3. 数据帧的描述:

2013毕业设计论文

2013毕业设计论文

DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。操作流程如下:

一次完整的数据传输为40bit,高位先出。

数据格式:8bit湿度整数数据+8bit湿度小数数据。

+8bit温度整数数据+8bit温度小数数据。

数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。

4. 电气特性:VDD=5V,T =25℃,除非特殊标注。

表2.1 DHT11的电气特性

参数 供电 条件 DC 测量 供电电流 平均 待机 采样周期 秒 Min 3 0.5 0.2 100 1 typ 5 - - - - max 5.5 2.5 1 150 - 单位 V mA mA uA 次 注:采样周期间隔不得低于1秒钟。

2.3.2 DHT11传感器模块电路设计

DHT11传感器连接单片机相对比较简单。单片机的P2.0口用来发

收串行数据,即数据口。连接传感器的Pin2(单总线,串行数据)。由于测量范围电路小于20米,加一个5K的上拉电阻,因此在传感器的Pin2口与电源之间连接一个5K电阻。而传感器的电源端口Pin1和Pin4分别接单片机的VDD和GND端。传感器的第三脚悬浮放置。

DHT11传感器原件的电路原理图如下2.6所示:

2013毕业设计论文

2013毕业设计论文

图2.6 DHT11电路原理图

2.4 1602液晶显示模块设计 2.4.1 1602液晶显示屏

1602液晶 是一种工业字符型液晶,能够同时显示16x02 即32个字符。(16列2行)。在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。

本设计使用LCD1602液晶显示器。它有以下几个优点:

1. 显示质量高:由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像数码显示器那样需要不断刷新亮点。因此,液晶显示器画质高且不会闪烁。

2. 数字式接口:液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

3. 体积小、重量轻:液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

4. 功耗低:液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

2.4.2 1602液晶显示屏参数

1. 1602的基本参数及引脚功能: (1)1602LCD主要技术参数: 显示容量:16×2个字符。 芯片工作电压:4.5—5.5V。 工作电流:2.0mA(5.0V)。 模块最佳工作电压:5.0V。 字符尺寸:2.95×4.35(W×H)mm。 (2)引脚功能说明:

2013毕业设计论文

2013毕业设计论文

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2.2所示: 表2.2引脚接口说明表 编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 2. 1602的RAM地址映射及标准字库表

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符

2013毕业设计论文

2013毕业设计论文

时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图2.7是1602的内部显示地址。

LCD16字*2行00400141024203430444054506460747084809490A0B0C0D0E4A4B4C4D4E0F4F1050……2767

图2.7 1602LCD内部显示地址

2.4.3 1602液晶显示模块电路设计

液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

其中Vo脚,即第三引脚加了一个10K的滑动变阻器,该变阻器的目的是调节液晶的显示对比度,通过调节滑阻改变Vo的电压值,从而使液晶显示在最清晰的状态。

2013毕业设计论文

2013毕业设计论文

图2.8 1602显示模块原理图

2.5 阈值设置模块设计

从图2.9可以看到。从上到下依次设为K2、K5、K6、K7四个按键,其连接单片机引脚分别是P1.2、P3.3、P3.4、P3.5四个引脚。

根据该模块使得阈值设置分为两个模块,分别是湿度最高值设置模式、温度最高值设置模式。例如湿度最高值设置,按一次K6湿度最高值加一,按一次K7湿度最高值减一,1602液晶显示将实时显示出设置值。其他值设置类似。

按键阈值设置模块部分,设置非常人性化,而不用每次设置阈值都到程序里边去设置后再烧制进单片机,实现了自动化。

2013毕业设计论文

2013毕业设计论文

图2.9 阈值设置模块原理图

2.6 报警模块设计 2.6.1 蜂鸣器报警模块设计

图2.10 蜂鸣器报警模块原理图

系统在设计时候采用的是有源蜂鸣器,只要给蜂鸣器一定的电流

2013毕业设计论文

2013毕业设计论文

值,蜂鸣器就可以按照一定的频率发声,但是单片机引脚的驱动电流比较小,不足以驱动蜂鸣器工作,因此采用了一个PNP的三极管S9012来驱动。当单片机P2.0输出一个低电平时,蜂鸣器响,实现报警。

2.6.2 发光二极管报警模块设计

此部分利用发光二极管的点亮来实现报警,当单片机P1.5、P1.6引脚输出一个低电平时发光二极管亮,实现报警。

图2.11 发光二极管报警模块原理图

2.7 24C02数据存储模块 2.7.1 24C02数据存储器

I2C总线是一种由PHILIPS公司开发的两线式串行总线,用于连接

微控制器及其外围设备。存储器24C02系列等都是使用I2C协议进行数据的操作。主要在存储一些掉电后还要保存数据的场合。

I2C总线特点: 1. 要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL。 2. 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机、从机关系软件设定地址,主机可以作为主机发送器或主机接收器。

3. 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,

2013毕业设计论文

2013毕业设计论文

快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。

2.7.2 24C02数据存储器模块电路设计

本设计为实现温湿度阈值的连续性。考虑了温湿度阈值的存储,在掉电后,下一次使用时能回到原来设定的阈值。24C02的时钟线SCL与单片机的P1.0相连,数据线SDA与单片机的P1.1相连。其电气原理图如图2.12所示。

图2.12 24C02数据存储模块原理图

2013毕业设计论文

2013毕业设计论文

2013毕业设计论文

PCB板(见附件2)。 实物图(见附件3)。

2.8 系统总体电气原理图

图2.13 系统总体电气原理图

2013毕业设计论文

3 系统软件设计

软件是一个设计实现功能的重要部分。本设计采用了C语言进行模块化编写程序。

开始数据初始化定时器初始化显示初始化进入后台while循环否有转换标志吗?是温湿度转换超过阈值吗?否温湿度数值显示是报警有键按下吗?否是按键处理 图3.1主程序流程图

2013毕业设计论文

2013毕业设计论文

开始P1.7输出低电平从机80us低电平是否结束?Y延时18ms从机80us高电平是否结束?P1.7输出高电平Y单片机进行数据接收延时40us将数据按十进制数位存入数组NNN读P1.7引脚判断是否为低电平?Y结束并保持高电平

图3.2 DHT11传感器程序流程图

开始液晶1602初始化延时依次发送指令和数据控制液晶显示字符结束 图3.3 1602程序流程图

系统程序(见附件1)。

2013毕业设计论文

2013毕业设计论文

4 系统调试

本设计是在Keil C环境下开发的,Keil C软件支持C语言的编程及调试,运用方便。

在完成对程序的编写及烧录之后,还需对其各部分功能进行验证。开始供电后、稍带几秒等1602液晶屏能正常显示当前温湿度了之后。观察当前温湿度的变化。并且针对与自己设定的限值相比较。若当前温度没有超标,即没有超过限值。可以用手捂住DHT11传感器,令其温度的显示超标。测试能否达到报警,经过测试,完全可行。因而简单的实现了对温度的控制。湿度控制原理跟温度一样。 1. 硬件问题及解决方法

蜂鸣器不够响。在加报警装置的时候,蜂鸣器不够响。因为单是单片机的引脚输出电流还不足以驱动蜂鸣器,后来又加了一个NPN的三极管来驱动蜂鸣器。最后就能够自如的驱动蜂鸣器发声了。 2. 软件所遇问题及解决方法

本次毕业设计大部分时间都花在了软件调试上了,软件调试不像硬件那么直观,对我来说是个难点。

阈值设置模块加了按键以后按键始终不能按预期效果工作。刚开始还以为是硬件部分没有连接好,用万用表查了很久,但是电平变化都是正确的。后面在老师的指导下才知道是延时太长,当按键时间比较长的时候,单片机是可以读出按键的。最后修改了程序,系统功能得以实现。

2013毕业设计论文

2013毕业设计论文

总结

本设计是以单片机为控制器件的温湿度监控报警系统。采用DHT11数字温湿度传感器检测环境中的温湿度,输入到单片机进行处理。通过LCD1602显示器实时的将温湿度检测并显示出来。并且能够设置温湿度上限值,当环境温湿度超过设定值时,系统自动报警,当温湿度回到设定值内,报警自动解除。

本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。

总结本文的研究工作,主要做了下面几点较突出的工作:

1. 掌握了LCD1602显示屏的使用,了解了LCD1602显示屏特有的工作优点。

2. 本设计使用DHT11数字温湿度传感器。能同时对湿度和温度进行测量,使用方便。

3.文章给出了系统具体的硬件设计方案,硬件结构电路图,软件流程图和具体C语言程序设计与调试等方面。

存在缺陷:温湿度的精度是较低的,反应相对慢。第一次PCB制版也有很多的不足之处,有些过孔太小不便于元件安装,硬件的布局设计不够美观,液晶显示器不便于固定。以后有机会应该在这些方面多学习,多注意。

2013毕业设计论文

2013毕业设计论文

致谢

本文从开题论证、研究设计到论文完成都是在导师的悉心指导下完成的。一直以来,老师在本设计硬件原理、软件编写、论文的写作中给予我巨大的帮助,老师对我的教导将使我终身受益。在此,谨向导师表示衷心的感谢!

经过几个月的查资料、整理材料、做实物,写作论文,今天终于可以顺利的完成论文的最后的谢辞了。论文得以完成,要感谢的人实在太多了,特别感谢老师们的帮助,在硬件实物方面缺少元件,老师们都想尽办法帮助我解决,并提供给了我许多有益的指导和热心的帮助。正是有了你们的悉心帮助和支持,才使我的毕业论文工作顺利完成,我衷心的对老师们表示感谢。

另外,要感谢在大学期间所有传授我知识的老师,是你们的悉心教导使我有了良好的专业课知识,这也是论文得以完成的基础。谢谢你们,谢谢母校!

在论文开题论证、研究设计、系统调试过程中,还得到了很多同学的热情帮助。在此,特向帮助过我的老师和朋友表示诚挚的谢意!

2013毕业设计论文

2013毕业设计论文

参考文献

[1] 姜志海, 黄玉清,刘连鑫. 单片机原理及应用[M]. 电子工业出版社,2009.

[2] 郭天祥. 51单片机C语言教程[M]. 电子工业出版社.2009.

[3] 张毅刚, 彭喜元, 彭宇. 单片机原理及应用[M]. 高等教育出版社.2010. [4] 杨素行. 模拟电子技术基础简明教程[M]. 高等教育出版社.2006. [5] 李维提, 郭强. 液晶显示应用技术[M]. 电子工业出版社.2003. [6] 刘湘涛. 单片机原理与应用[M]. 电子工业出版社.2006.

[7] 何立民. 单片机高级教程[M]. 北京航空航天大学出版社.2004.

[8] 周润景, 徐宏伟, 丁莉. 单片机电路设计分析与制作[M]. 机械工业出版社. 2010.

[9] 李全利. 单片机原理及应用技术[M]. 高等教育出版社, 2004.

[10] 李秀霞. 郑春厚. Protel DXP 2004电路设计与仿真教程[M]. 北京

航空航天大学出版社.2008. [11] 余家春. Protel99Se电路设计实用教程[M]. 中国铁道出版社, 2002. [12] 郭强. 液晶显示应用技术[M]. 电子工业出版社. 2000.

[13] 王建校. 51系列单片机及C51程序设计[M]. 科学出版社. 2002. [14] 马忠梅. 单片机的C语言应用程序设计[M]. 北京航空航天大学出

版社.1998.

2013毕业设计论文

2013毕业设计论文

附件1 系统程序

A1.1 主程序

//实现功能,设定温度上限和湿度上限,超过上限值时报警。报警现象,对应二极管亮,蜂鸣器响// #include #include \#include \

#include \ //定义变量 sbit Led_qushi=P1^6; //潮湿报警灯 sbit Led_jiangwen=P1^5; //超温报警灯 sbit Key_TH1 = P1^2; //温度最高值设置按键 sbit Key_TH2 = P3^3; //温度最高值设置按键 sbit Key_HH1 = P3^4; //湿度最高值设置按键 sbit Key_HH2 = P3^5; //湿度最高值设置按键

sbit beep=P2^0; //蜂鸣器

volatile bit FlagStartRH = 0; //开始温湿度转换标志 volatile bit FlagKeyPress = 0; //有键按下

extern U8 U8FLAG,k; //定义温湿度传感器用外部变量 extern U8 U8count,U8temp;

extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,

U8checkdata;

extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,

U8RH_data_L_temp,U8checkdata_temp; extern U8 U8comdata; extern U8 count, count_r; U16 temp;

S16 temperature, humidity; S16 idata TH, HH;

2013毕业设计论文

//温度上限和湿度上限

2013毕业设计论文

char * pSave;

U8 keyvalue, keyTH1, keyTH2, keyHH1, keyHH2; U16 RHCounter;

void Data_Init() //数据初始化 { RHCounter = 0; keyvalue = 0;

Led_qushi = 1; Led_jiangwen = 1; TH = 40; HH = 85; keyTH1 = 1; keyTH2 = 1; keyHH1 = 1; keyHH2 = 1; beep=1; }

void Timer0_Init() //定时器0初始化 { ET0 = 1; //允许定时器0中断 TMOD = 1; //定时器工作方式选择 TL0 = 0x06; //定时器赋予低位初值 TH0 = 0xf8; //定时器赋予高位初值 TR0 = 1; } //启动定时器 void Timer0_ISR (void) interrupt 1 using 0 //定时器0中断 { TL0 = 0x06; //定时器赋予低位初值 TH0 = 0xf8; //定时器赋予高位初值 RHCounter ++; //每2秒钟启动一次温湿度转换 if (RHCounter >= 1000) { FlagStartRH = 1; RHCounter = 0; } }

void Save_Setting() //存入设定值、

{ pSave = (char *)&TH; //地址低位对应低8位,高位对应高8位 wrteeprom(0, *pSave); //存温度上限值TH低8位 DELAY(500); //延时 pSave ++;

wrteeprom(1, *pSave); //存温度上限值TH高8位 DELAY(500);

pSave = (char *)&HH; wrteeprom(2, *pSave);

2013毕业设计论文

//存湿度上限值RH低8位

2013毕业设计论文

DELAY(500); pSave ++;

wrteeprom(3, *pSave); DELAY(500); }

//存湿度上限值RH高8位

void Load_Setting() //载入设定值、 { pSave = (char *)&TH; *pSave++ = rdeeprom(0); *pSave = rdeeprom(1); pSave = (char *)&HH; *pSave++ = rdeeprom(2);

*pSave = rdeeprom(3);

if ((TH>99)||(TH<0)) TH = 40; if ((HH>99)||(HH<0)) HH = 85; } void KeyProcess(uint num) { switch (num) { case 1: if (TH<99) TH++; L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH+48);

break; case 2:

if (TH>1) TH--;

L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH+48); break; case 3:

if (HH<99) HH++;

L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH+48); break; case 4:

if (HH>1) HH--;

L1602_char(2, 15, HH/10+48);

2013毕业设计论文

2013毕业设计论文

L1602_char(2, 16, HH+48); break; default: break; } Save_Setting(); }

/*********主函数**********/ void main()

{ U16 i, j, testnum; EA = 0;

Timer0_Init(); //定时器0初始化 Data_Init(); EA = 1;

L1602_init(); L1602_string(1,1,\ \ L1602_string(2,1,\ \

for (i=0;i<1000;i++) //延时 for (j=0;j<1000;j++) {;}

L1602_string(1,1,\ \清屏 L1602_string(2,1,\ \ L1602_string(1,1,\ C TH:\ L1602_string(2,1,\ % HH:\

Load_Setting(); //载入温度上限和湿度上限设定值 L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH+48); L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH+48); while(1) { if (FlagStartRH == 1) //温湿度转换标志检查 { TR0 = 0;

testnum = RH(); FlagStartRH = 0; TR0 = 1;

2013毕业设计论文

2013毕业设计论文

humidity = U8RH_data_H; //读出温湿度,只取整数部分 temperature = U8T_data_H;

L1602_int(1,5,temperature); //显示温湿度 L1602_int(2,5,humidity); } //温湿度控制

if (temperature > TH) { Led_jiangwen = 0; beep=0; DELAY(500); } else

//判断超温

//二极管亮,超温报警 //蜂鸣器响,超温报警 //延时

{ Led_jiangwen = 1; beep=1; DELAY(500); }

//判断潮湿

//二极管亮,超湿报警 //蜂鸣器响,超温报警

if (humidity > HH)

{ Led_qushi = 0; beep=0; DELAY(500); } else

{ Led_qushi = 1;

beep=1;

DELAY(500); }

//键盘查询,在弹起时响应

if ((Key_TH1)&&(keyTH1==0)) {FlagKeyPress = 1; keyvalue = 1;} else if((Key_TH2)&&(keyTH2==0)){FlagKeyPress=1;keyvalue = 2;} else if((Key_HH1)&&(keyHH1==0)){FlagKeyPress =1;keyvalue=3;} else if((Key_HH2)&&(keyHH2==0)){FlagKeyPress=1;keyvalue=4;} if (FlagKeyPress == 1) { KeyProcess(keyvalue); FlagKeyPress = 0; } if (!Key_TH1) keyTH1 = 0; else keyTH1 = 1;

if (!Key_TH2) keyTH2 = 0; else keyTH2 = 1;

2013毕业设计论文

2013毕业设计论文

if (!Key_HH1) keyHH1 = 0; else keyHH1 = 1;

if (!Key_HH2) keyHH2 = 0; else keyHH2 = 1; } }

A1.2 24C02程序

#include \

void DELAY(unsigned int t) { while(t!=0)

t--; }

void IICStart(void)

{ SCL=0; DELAY(1);

SDA=1; SCL=1; DELAY(1); SDA=0; DELAY(1); SCL=0; void IICStop(void)

{ SDA=0;SCL=1; DELAY(1); SDA=1; DELAY(1); SCL=0; void SEND0(void)

{ SDA=0; SCL=1; DELAY(1); SCL=0; } void SEND1(void)

{ SDA=1; DELAY(1); SCL=1; DELAY(1); SCL=0; }

bit Check_Ack(void)

{ unsigned char errtime=250; DELAY(1); SCL=1; DELAY(1); CY=SDA; while(CY)

{ errtime--; CY=SDA; if (!errtime)

2013毕业设计论文

} }

2013毕业设计论文

{ IICStop(); return 1; } }

DELAY(1); SCL=0; return 0; }

void Write_byte(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { if((dat<

unsigned char Read_byte(void) { unsigned char i,temp=0; for(i=0;i<8;i++) { SDA=1; SCL=1; DELAY(1); if(SDA==1) { temp=temp<<1; temp=temp|0x01; } else temp=temp<<1; SCL=0; } return temp; }

unsigned char rdeeprom(unsigned char addr) { unsigned char temp=0; bit flag=0; IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); IICStart();

2013毕业设计论文

2013毕业设计论文

Write_byte(0xa1); Check_Ack(); temp=Read_byte(); SEND1(); IICStop();

return temp; }

void wrteeprom(unsigned char addr,unsigned char dat) { IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); Write_byte(dat); Check_Ack(); IICStop(); }

#ifndef _2402_H_ #define _2402_H_ #include

sbit SCL = P1^0; //模拟I2C 总线的引脚定义

sbit SDA = P1^1; //定义2402在I2C总线协议中从机地址 void DELAY(unsigned int t); //延时函数 void IICStart(void); //I2C开始函数 void IICStop(void); //I2C结束函数 void Ack(void); //I2C应答函数 void NOAck(void); //I2C应答非函数 bit Check_Ack(void); //I2C应答检测函数 void SEND0(void); //I2C发送0函数

void SEND1(void); //I2C发送1函数 void Write_byte(unsigned char dat); //I2C发送字节函数 unsigned char Read_byte(void); //I2C读取字节函数

unsigned char rdeeprom(unsigned char addr); //读AT2402函数 void wrteeprom(unsigned char addr,unsigned char dat); //写AT2402函数

2013毕业设计论文

2013毕业设计论文

#endif //_2402_H_ A1.3 DHT11传感器程序

#include \U8 U8FLAG,k;

U8 U8count,U8temp; U8

U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; U8

U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp; U8 U8comdata;

U8 count, count_r=0; void Delay1(U16 j) { U8 i;

for(;j>0;j--)

{ for(i=0;i<27;i++); } }

void Delay_10us(void)

{ U8 i; i--; i--;

i--; i--; i--; i--; } void COM(void) { U8 i;

for(i=0;i<8;i++) { U8FLAG=2; while((!DATA)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0;

if(DATA)U8temp=1;

2013毕业设计论文

2013毕业设计论文

U8FLAG=2;

while((DATA)&&U8FLAG++); //超时则跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1.如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; U8comdata|=U8temp; } //0 }

//温湿度读取子程序 -以下变量均为全局变量

//温度高8位== U8T_data_H-温度低8位== U8T_data_L //湿度高8位== U8RH_data_H-湿度低8位== U8RH_data_L //校验 8位 == U8checkdata-调用相关子程序如下 U8 RH(void)

{ DATA=0; //主机拉低18ms Delay1(180); //原来为5 DATA=1;

Delay_10us(); //总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us();

DATA=1; //主机设为输入 判断从机响应信号 //判断从机是否有低电平响应信号,不响应跳出,响应则向下运行 if(!DATA) //T ! { U8FLAG=2; //判断从机是否发出 80us 的低电平响应信号是否结束 while((!DATA)&&U8FLAG++); U8FLAG=2; //判断从机是否发出 80us 的高电平,发出则进入数据接收状态 while((DATA)&&U8FLAG++);

COM(); //数据接收状态 U8RH_data_H_temp=U8comdata; COM();

U8RH_data_L_temp=U8comdata; COM();

2013毕业设计论文

2013毕业设计论文

U8T_data_H_temp=U8comdata; COM();

U8T_data_L_temp=U8comdata; COM();

U8checkdata_temp=U8comdata;

DATA=1; //数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; }

U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } return 1; }

else //传感器不响应 { return 0; }

A1.4 1602程序

/************该程序实现了对液晶1602的控制**************/ #include \#include \

void delay() //功能.延时,延时时间大概为140US。 { int i,j; for(i=0; i<=10; i++) for(j=0; j<=2; j++); } uchar Convert(uchar In_Date) { return In_Date; }

void enable(uchar del) //1602命令函数,输入的命令值 { P0 = Convert(del); RS = 0; RW = 0; E = 0; delay();

2013毕业设计论文

2013毕业设计论文

E = 1;

delay(); }

void write(uchar del) //1602写数据函数 { P0 = Convert(del); RS = 1; RW = 0; E = 0; delay(); E = 1; delay(); } void L1602_init(void) { enable(0x01);

//1602初始化

enable(0x38); enable(0x0c); enable(0x06); enable(0xd0); }

void L1602_char(uchar hang,uchar lie,char sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign); }

void L1602_string(uchar hang,uchar lie,uchar *p) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); while(1) { if(*p == '\\0') break; write(*p); p++; } }

void L1602_int(uchar hang, uchar lie, int num)

2013毕业设计论文

2013毕业设计论文

{ uint temp; //显示整型的温湿度数据.共占用4位. uint gewei,shiwei,baiwei,sign; if (num >= 0) { sign = 0; } else

{ sign = 1; } temp = abs(num); baiwei = temp / 100;

temp = temp - baiwei*100; shiwei = temp / 10; gewei = temp - shiwei*10; num = abs(num); if (num>=100)

{ if (sign == 1) //负数 { L1602_char(hang, lie, '-'); } L1602_char(hang, lie+1, baiwei+48); L1602_char(hang, lie+2, shiwei+48); L1602_char(hang, lie+3, gewei+48); } else if (num>=10)

{ if (sign == 1) { L1602_char(hang, lie+1, '-'); } L1602_char(hang, lie+2, shiwei+48); L1602_char(hang, lie+3, gewei+48); } else

{ if (sign == 1) { L1602_char(hang, lie+2, '-'); } L1602_char(hang, lie+3, gewei+48); } }

#include

#define uchar unsigned char #define uint unsigned int sbit E=P2^5;

2013毕业设计论文

//1602使能引脚

2013毕业设计论文

sbit RW=P2^6; //1602读写引脚 sbit RS=P2^7; //1602数据/命令选择引脚 void delay();

uchar Convert(uchar ); void enable(uchar ); void write(uchar ); void L1602_init(void);

void L1602_char(uchar ,uchar ,char ); void L1602_string(uchar ,uchar ,uchar *); void L1602_int(uchar, uchar, int);

2013毕业设计论文

2013毕业设计论文

附件2 PCB板

1011121314151640393837363534333212101131301229132814271526162517241823192220211113 2013毕业设计论文

2013毕业设计论文

附件3 实物图

2013毕业设计论文

本文来源:https://www.bwwdw.com/article/v8lr.html

Top