摘 要
随着电子信息时代的发展,温湿度作为一个重要的物理量,是工业生产过程中最普遍、最重要的工艺参数之一,尤其在粮仓保护应用中尤为重要,所以应用于粮仓温湿度检测系统设计是一个重要的课题。同时单片机技术已经伸入到各个领域,基于单片机的数字式粮仓温湿度检测系统与传统温湿度测试相比,具有读数方便,测温范围广,其输出温湿度采用液晶显示,并且温度报警可调。
本文介绍了一种基于AT89C51单片机控制温湿度传感器SHT11实现的一种数字式温湿度检测仪,并使用在粮仓温湿度检测上。说明书在分析国内外现状及在粮仓应用基础上,通过方案对比,提出基于SHT11传感器的温湿度检测仪,文中介绍各个关键部件的结构及原理,并结合设计方案,设计出详细的温湿度检测仪电路,电路采用模块化设计思想,这样设计思路更灵活,最后结合温湿度传感器功能要求,给出软件设计,结果表明设计的温湿度检测仪应用于玉米等粮仓,电路设计正确,原理可行,达到预期毕业设计的目的。
关键词:AT89C51单片机,温湿度传感器SHT11,粮仓检测,
Grain Depot Temperature & Humidity Detection
Apparatus Design
Abstract
Along with the electronic information age, temperature and humidity is an important physical quantity, is the process of industrial production, the most popular one of the most important technical parameters, especially in the granary protection application is particularly important, because the food safety and health related to the health of the people, so should be used in grain Depot Temperature and humidity measuring instrument design is one of the most important topic. With the era of progress and development, SCM technology has been extended to various fields, microcontroller based digital temperature and humidity of granary detection apparatus and traditional temperature and humidity tester compared with reading, convenient, wide measuring range, the output temperature and humidity using liquid crystal display, and adjustable temperature alarm.
This paper introduced one kind based on the AT89C51single-chip microcomputer to control the temperature and humidity sensor SHT11 to realize a digital temperature and humidity measuring instrument, and used in the grain depot temperature and humidity detection. Based on the analysis of current situation home and abroad and in the granary application foundation, through schemes comparison, proposes based on the SHT11 sensor temperature and humidity detector, this paper introduced the various key components of the structure and principle, and combined with the design scheme, design a detailed temperature and humidity detection circuit, the circuit based on the idea of modular design, the design train of thought more flexible, finally combined with the temperature and humidity sensor, functional requirements, software design are given, and gives the temperature and humidity sensor simulation. The simulation results show that, the temperature and humidity measuring instrument used in the corn barn, circuit design is correct, feasible principle, achieve the purpose of graduation design.
Key words: AT89C51, SHT11 temperature and humidity sensor, granary
detection,
目 录
第一章
引言 .............................................................................................................. 5
1.1 课题研究背景及设计意义............................................................................. 5 1.2 温湿度检测仪的应用..................................................................................... 5 1.3 粮仓温度检测仪的发展............................................... 错误!未定义书签。 1.4 本文设计目标及章节安排............................................................................. 6 第二章
粮仓温湿度检测仪设计方案及器件选型 .................................................. 7
2.1 粮仓检测仪实现温湿度检测要求................................................................. 7 2.2 温湿度检测仪设计方案................................................................................. 7
2.2.1方案一 模拟量输出型传感器........................... 错误!未定义书签。 2.2.2方案二 数字式温度传感器............................... 错误!未定义书签。 2.2.3方案三 温湿度一体化传感器........................... 错误!未定义书签。 2.3温湿度检测仪设计方案及原理.................................... 错误!未定义书签。 2.4单片机选型及介绍.......................................................................................... 8 2.5湿度传感器选型及特点................................................................................ 10
2.5.1 SHT11结构特点................................................................................. 10 2.5.2 SHT11结构和工作原理..................................................................... 10 2.5.3 SHT11应用设计................................................................................. 11 2.6显示界面选型................................................................................................ 12
2.6.1 LCD1602 参数及引脚........................................................................ 12 2.6.1 LCD1602 控制字说明........................................................................ 13
第三章
温湿度检测仪硬件电路设计 .................................................................... 15
3.1粮仓用温湿度检测仪硬件设计构想............................................................ 15 3.2 AT89C51单片机最小电路............................................................................ 15
3.2.1电源电路设计..................................................................................... 15 3.2.2 单片机复位电路................................................................................ 16 3.2.3晶振电路............................................................................................. 17 3.3温湿度传感器接口电路设计........................................................................ 17 3.4液晶显示电路设计........................................................................................ 18
3.5键盘报警显示设计........................................................................................ 18 3.6粮仓用温湿度检测仪硬件电路设计............................................................ 19 第四章
温湿度检测仪软件设计及应用 ................................................................ 20
4.1 粮仓温湿度检测仪软件总构思及流程图................................................... 20 4.2 SHT11温湿度采集软件设计........................................................................ 21
4.2.1 SHT11设计思路................................................................................. 21 4.2.2 SHT11读取问题................................................................................. 22 4.3 LCD1602显示软件设计.............................................................................. 23
4.3.1设计思路............................................................................................. 23 4.3.2液晶显示读写时序............................................................................. 23 4.4 温湿度补偿软件设计................................................................................... 24 4.5报警及键盘软件设计.................................................................................... 25 第五章
温湿度检测仪在粮仓中的应用 ................................................................ 27
5.1仿真软件proteus简介................................................................................ 27 5.2基于SHT11的温湿度检测仪计仿真 ........................................................... 27
5.2.1仿真电路说明..................................................................................... 27 5.2.2仿真测试过程..................................................................................... 28 5.2.3仿真操作过程..................................................................................... 29 5.3温湿度检测仪在粮仓中的应用.................................................................... 29 第六章
总 结 .......................................................................................................... 30
参考文献 32 致 谢 附 录
34 35
内蒙古工业大学毕业设计说明书
第一章 引言
1.1 课题研究背景及设计意义
粮仓粮食的存储是否得当对国家经济正常合理的运行具有很大的影响。但是在以前的经济和科技水平有限,所以粮食的存储的环境差,存在不同程度的粮食存储变质问题。粮库管理的重点之一就是要合理布置测温点,经常检查温度变化,以便及时发现粮食的发热点,减少粮食的损失。然而,大部分粮仓采用人工测量温湿度,工作人员工作量大而且效率低。所以,粮食虫蛀、霉变的情况时有发生。
随着单片机和传感技术的迅速发展,自动检测领域发生了巨大变化,温室环境自动监测控制方面的研究有了明显的进展,并且必将以其优异的性能价格比,逐步取代传统的温湿度控制措施.本文参考了一种基于单片机并采用数字化单总线技术的温湿度度测控系统应用于粮库的的设计方案,根据实用者提出的问题进行了改进,提出了一种新的设计方案,在单总线上传输数字信号。
所以说,粮仓温湿度检测仪设计意义重大。
1.2 温湿度检测仪的发展及应用
随着电子信息时代的发展,温湿度作为一个重要的物理量,是工业生产过程中最普遍、最重要的工艺参数之一,尤其在粮仓保护应用中尤为重要,因为粮食安全卫生关涉到全民身体健康,所以应用于粮仓温湿度检测仪设计是一个重要的课题。自18世纪工业革命以来,工业发展与是否能掌握温湿度有着密切的联系。在冶金、钢铁、石化、水泥、玻璃、医药等行业,可以说几乎80%的工业部门都不得不考虑着温湿度的因素。温湿度不但对于工业如此重要,在农业中温度湿度的监测与控制也有着十分重要的意义。
我国是一个人口众多的大国, 科学储粮是保障人民粮食供应, 促进社会安定的大事, 粮库温度的监测在科学储粮中占有重要地位。在大多数粮食存储企业, 目前仍主要靠人工检测粮库温度。国内的粮食温度检测系统与国外同类产品相比较还有很大差距:系统采用的温度传感器的测量精度和灵敏度较低;温度传感器测得的粮食温度模拟量信号转换成数字量信号时产生的电路误差较大;信号在长距离传输过程中因干扰和衰减导致精度降低。不可否认,目前国内部分电子元器件的制造工艺的不成熟和国外相应电子器件价格过高共同制约着我国粮库温湿度智能控制系统的发展和应用。因此,鉴于我国的国情,设计一种适合国内实际情况并满足当前国家粮食储备要求的粮食温湿度智能控制系统,对改善我国粮食储备的落后面貌,加快经济的发展,具有非常重要的现实意义。
内蒙古工业大学毕业设计说明书
今天,我们的生活环境和工作环境有越来越多称之为单片机的小电脑在为我们服务。单片机在工业控制、尖端武器、通信设备、信息处理、家用电器等各测控领域的应用中独占鳌头。时下,家用电器和办公设备的智能化、遥控化、模糊控制化已成为世界潮流,而这些高性能无一不是靠单片机来实现的。采用单片机来对温湿度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温湿度的技术指标,从而能够大大提高产品的质量和数量。单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用的器件,尤其在日常生活中也发挥越来越大的作用。因此,单片机对温湿度的控制问题是一个工农业生产中经常会遇到的问题。因此,本课题围绕基于单片机的粮库温湿度智能控制系统展开了应用研究工作。
1.3 本文设计目标及章节安排
本文介绍的温湿度测控系统就是基于单总线技术及其器件组建的。该系统能够对粮仓,尤其对玉米仓的温湿度进行采集,利用温湿度传感器将粮库内温湿度的变化,变换成数字量,其值由单片机处理,最后由单片机去控制液晶显示器,显示粮库内的实际温湿度,同时通过与预设量比较,对大棚内的温度、湿度进行自动调节。这种设计方案实现了温湿度实时测量、显示和控制。该系统抗干扰能力强,具有较高的测量精度,不需要任何固定网络的支持,安装简单方便,性价比高,可维护性好。这种温湿度测控系统可应用于粮食存储的粮库,实现对温度的实时控制,是一种比较智能、经济的方案,适于大力推广,以带来很好的经济效益和社会效益。
本论文根据设计要求,分为几个章节:
1、 前言部分说明了粮仓温度检测仪的设计意义,并结合查阅的中外文献,对当前粮仓温度检测仪的应用情况加以分析,最后给出本文的设计要求及章节划分情况。
2、 第二部分为粮仓的方案设计及管件器件的选型,在充分弄明白粮仓检测仪的基本原理基础上,结合粮仓温湿度检测仪的应用场合,提出了集中温湿度检测仪的设计方案并选择其优,并对选择设计方案中关键部件加以选型和器件分析。
3、 第三章节结合粮仓温湿度检测仪的方案论证,给出硬件电路设计,论文中分别设计了基于单片机的最小系统,温湿度传感器电路设计,液晶显示电路设计,报警电路设计及键盘调整电路。
4、 硬件是一个系统的骨架,那么软件就是这个系统的灵魂,第四部分详细介绍了粮仓温度检测系统的实现就软件过程,并对粮仓温湿度检测仪存在的问题加以分析,并得出结论。
5、 最后是对全文的总结并对辛苦指导的老师表示由衷的致谢。
内蒙古工业大学毕业设计说明书
第二章 粮仓温湿度检测仪设计方案及器件选型
2.1 粮仓检测仪实现温湿度检测
根据课题设计要求本课题需要研究的内容主要有以下几方面:
(1)根据系统功能要求并且考虑系统的实用性和可操作性,进行系统的整体方案设计。该方案采用模块化设计方法,以方便系统调试和用户的使用,并对主要内容包括芯片的选择、芯片的功能介绍等。
(2)系统硬件设计,学会使用电子画图软件,进行电路设计,并结合专业所学,设计基本电路。
(3)系统软件设计。主要包括系统主程序,液晶显示程序,温度湿度传感器读取程序,并会编写c语言。
(4)锻炼调试分析问题能力。设计好电路,需要调试和应用,通过实际调试,增加对电路的认识。
本文的设计主要应用于粮仓的温湿度的检测,尤其用于玉米等农作物的粮仓。本系统可对温湿度值进行实时检测,测温范围可为-10~+85。C,湿度测量范围是(0-100)%RH,这也足以满足对湿度的测量要求。整个系统测量精度高、稳定性好,性能上能够达到远距离测量温湿度的要求,适于安置在粮仓内进行检测。
在对各类湿度、温度传感器原理介绍的基础上,根据本毕业设计实际的任务要求,完成湿度、温度传感器芯片的选型,系统芯片的选择,并设计显示接口电路、电源电路、报警电路、部分功能电路的程序。系统开始工作后,根据初始条件读取湿度值和温度值,测量数据经处理后,将其与设定的湿温度值比较,如果发现当前的温湿度超限,则发出报警信号,未超限时,系统显示正常的湿温度度值。
2.2 温湿度检测仪设计方案及原理
温湿度的检测实现方法很多,侧重点也不一样,结合参阅一些文献,确定一种实现温湿度检测出的方案。这种方案以AT89C51为控制核心,通过采集温湿度数据,并显示出来,根据操作人员的参数调整,实现报警灯功能。
通过分析比较模拟量输出传感器与数字式温度传感器,以及查阅大量资料,发现有一种温湿度集一体的传感器,这种传感器个头不大,精度满足要求,能够
内蒙古工业大学毕业设计说明书
同时采集到被测体的温度和湿度。查阅大量资料表明,这种传感器电路简单,不需要太多外围电路,直接数字量输出,数字准确,编程方便,结构化,模块化明了。
初步分析,并且对比传感器选取市面较流行的SHT1x系列传感器为温湿度采集模块。整个检测系统的核心器件是单片机,它是整 个系统的“心脏”由它来接收温湿信号并控制协调各功能模块的正常工作。通过对SHT1X温湿度传感器数据的采集、读取和分析,然后通过LCD液晶显示出来,在整个过程中,如果温度或湿度不在设定范围内,可以产生报警功能,对于报警点,可以通过键盘设置。系统工作原理框图如下图所示:
显示部分按键部分温度传感器单片机核心电路报警部分
图2-1 温湿度检测仪系统框图
根据设计方案可知,选取AT89C51单片机为控制核心,选取SHT11为温湿度传感器,并选用LCD1602为显示人机界面。下面分别就这些关键器件使用及其结构介绍。
2.3单片机选型及介绍
89C51是INTEL公司MCS-51系列单片机中最基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它继承和扩展了MCS-51单片机的体系结构和指令系统。
89C51内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
内蒙古工业大学毕业设计说明书
图2-2 AT89C51引脚排列图
各管脚功能如下: Vss(20脚):接地 VCC(40脚): 主电源+5V
XTAL1(19脚):接外部晶体的一端。在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。
XTAL2(18脚): 接外部晶体的另一端。在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。
RST(9脚): 单片机刚接上电源时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)。
PSEN(29脚): 在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。
ALE/PROG(30脚):在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。
EA/VPP(31脚): 当EA端输入高电平时,CPU从片内程序存储器地址0000H单元开始执行程序。当地址超出4KB时,将自动执行片外程序存储器的程序。当EA输入低电平时,CPU仅访问片外程序存储器。在对87C51EPROM编程时,此引
内蒙古工业大学毕业设计说明书
脚用于施加编程电压VPP。
2.4温湿度传感器选型及特点
2.4.1 SHT11结构特点
SHT11是瑞士Scnsirion公司推出的一款数字温湿度传感器芯片。该芯片广泛应用于暖通空调、汽车、消费电子、自动控制等领域。共主要特点如下:
◆高度集成,将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上;
◆提供二线数字串行接口SCK和DATA,接口简单,支持CRC传输校验,传输可靠性高;
◆测量精度可编程调节,内置A/D转换器(分辨率为8~12位,能通过对芯片内部寄存器编程米选择);
◆测量精确度高,由于同时集成温湿度传感器,能提供温度补偿的湿度测量值和高质量的露点计算功能;
◆封装尺寸超小(7.62 mm×5.08mm×2.5 mm),测量和通信结束后,自动转入低功耗模式;
2.4.2 SHT11结构和工作原理
温湿度传感器SHT11将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上,其内部结构如图七所示。该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件。这两个敏感元件分别将湿度和温度转换成电信号,该电信号首先进入微弱信号放大器进行放大;然后进入一个14位的A/D转换器;最后经过二线串行数字接口输出数字信号。SHT11在出厂前,都会在恒湿或恒温环境巾进行校准,校准系数存储在校准寄存器中;在测量过程中,校准系数会自动校准来自传感器的信号。此外,SHT11内部还集成一个加热元件,加热元件接通后能将SHT11的温度升高5℃左右,同时功耗也会有所增加。此功能主要为了比较加热前后的温度和湿度值,能综合验证两个传感器元件的性能。在高湿(>95%RH)环境中,加热传感器可预防传感器结露,同时缩短响应时间,提高精度。加热后SHT11温度升高、相对湿度降低,较加热前,测量值会略有差异。
内蒙古工业大学毕业设计说明书
基准校准器SCLKDATA温度传感器运算放大器湿度传感器AD转换器二线串行数字接口和CRC校验VCCGND
图2-3 SHT11内部结构
微处理器是通过二线串行数字接口和SHT11进行通信的。通信协议和通用的I2C总线协议是不兼容的,因此需要用通用微处理器I/O口模拟该通信时序。微处理器对SHT11的控制是通过5个5位命令代码来实现的,命令代码的含义如表1所列。
表1 SHT11控制命令代码
命令代码 00011 00101 00111 00110 11110 含义 测量温度 测量湿度 读内部状态寄存器 写内部状态寄存器 复位命令,使内部寄存器恢复默认值,下一次命令前至少等待11ms 其它 保留
2.4.3 SHT11应用设计
微处理器采用二线串行数字接口和温湿度传感器芯片SHT11进行通信,所以硬件接门设计非常简单;然而,通信协议是芯片厂家自己定义的,所以在软件设计中,需要用微处理器通用I/O口模拟通道。SHT11通过二线数字串行接口来访问,所以硬件接口电路非常简单。需要注意的地方是:DATA数据线需要外接上拉电阻,时钟线SCK用于微处理器和SHT11之间通信同步,由于接口包含了完全静态逻辑,所以对SCK最低频率没有需求;当工作电压高于4.5V时,SCK频率最高为10 MHz,而当工作电压低于4.5 V时,SCK最高频率则为1 MHz。硬件
内蒙古工业大学毕业设计说明书
连接如2-4所示。
图2-4 SHT11硬件连接
2.5显示界面选型
根据设计要求,选择LCD1602作为显示模块。
1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,如图2-5所示,目前常用16×1,16×2,20×2和40×2行等模块。现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0-D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能[4]。
图2-5 LCD1602实物图
2.5.1 LCD1602 参数及引脚
引脚功能如表2所示:
表2-3 引脚功能 编号 1 2 3 4 5 符号 VSS VDD VL RS R/W 引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 编号 9 10 11 12 13 符号 D2 D3 D4 D5 D6 引脚说明 数据 数据 数据 数据 数据 内蒙古工业大学毕业设计说明书
6 7 8 E D0 D1 使能信号 数据 数据 14 15 16 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.5.2 LCD1602 控制字说明
了解控制字是编程的基础。
LCD1602的读写操作,屏幕和光标的操作都是通过指令编程来实现的。 指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C:高电平时移动显示的文字低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。
指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块
内蒙古工业大学毕业设计说明书
不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据。 指令11:读数据。
内蒙古工业大学毕业设计说明书
第三章 温湿度检测仪硬件电路设计
3.1粮仓用温湿度检测仪硬件设计构想
根据上述对基于AT89C51和SHT11的温湿度粮仓检测仪设计方案及其原理的论述,并对其关键部件进行选型。本章节依其原理,设计的温湿度检测仪包括如下电路,设计思想是,以单片机为控制核心,采集处理来自SHT11传感器的数据,并通过LCD1602显示出来,在采集显示过程中,如果温度或湿度不在设定范围内,可以产生报警,报警点可以通过按键设置。所有电路在单片机最小电路基础上进行的,组合温湿度传感器,液晶显示电路,以及键盘报警电路。
3.2 AT89C51单片机最小电路
单片机最小电路包括,复位电路,晶振电路,有了最小电路后,单片机就能下载程序工作了。
图3-1中的是按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。
图3-1 单片机主板最小系统电路
3.2.1电源电路设计
电源电路主要是为单片机及其外围芯片提供电源,使各部分电路能够正常工作。本设计中用到的电源有+5V电源。+5V主要用到单片机、SHT11湿度传感器、复位电路、LCD1602显示电路中。图3-2为+5V电源电路的原理图。
内蒙古工业大学毕业设计说明书
图3-2 +5V电源电路的原理图
电源电路的工作原理为220V的交流电压经变压器变为较低的电压,然后经电桥电路整流,电容滤波后变为直流电压。直流电压经集成稳压器7805后电压值被分别稳定为+5V。图中稳压器后面的电解电容用来提高电源的带负载的能力。
变压器T1选一个初级电压220V的,功率10W—15W的小型E型或环型变压器,次级电压为交流+9V,经整流、滤波、稳压供直流5V用。
3.2.2 单片机复位电路
复位电路允许很容易地将控制器置于一个预定的缺省状态。在进入复位状态时,将发生以下过程:
(1)AT89C51单片机停止程序执行。
(2)特殊功能寄存器(SFR)被初始化为所定义的复位值。 (3)外部端口引脚被置于一个已知状态。 (4)中断和定时器被禁止。
所有的SFR 都被初始化为预定值,SFR中各位的复位值在SFR的详细说明中定义。在复位期间内部数据存储器的内容不发生改变,复位前存储的数据保持不变。本系统采用外部 /RST 引脚提供了使用外部电路强制MCU进入复位状态的手段。在/RST引脚上加一个低电平有效信号将导致MCU进入复位状态。最好能提供一个外部上拉或对/RST引脚去耦以防止强噪声引起复位。在低有效的/RST信号撤出后,MCU 将保持在复位状态至少12个时钟周期。从外部复位状态退出后,PINRSF 标志被置位,系统进入正常的工作状态,复位电路示意图如图3-3所示。
图3-3 复位电路的原理图
内蒙古工业大学毕业设计说明书
3.2.3晶振电路
单片机的时钟产生方法采用内部时钟方式,主要是通过外接晶振和电容组成并联谐振电路。其电路图如图3-4所示,电路中X1和X2接单片机的时钟引脚X1和X2。AT89C51单片机允许的晶振频率可在1.2~24MHz之间选择,本设计选晶振频率为11.0592MHz,电容的取值对振荡频率输出的稳定性、大小及振荡电路的起振速度有一定的影响,可在20~33pF之间选择,典型值为22pF。
图3-4晶振电路
3.3温湿度传感器接口电路设计
微处理器采用二线串行数字接口和温湿度传感器芯片SHT11进行通信,所以硬件接门设计非常简单;然而,通信协议是芯片厂家自己定义的,所以在软件设计中,需要用微处理器通用I/O口模拟通信协议。
SHT11通过二线数字串行接口来访问,所以硬件接口电路非常简单。需要注意的地方是:DATA数据线需要外接上拉电阻,时钟线SCK用于微处理器和SHT11之间通信同步,由于接口包含了完全静态逻辑,所以对SCK最低频率没有要求;当工作电压高于4.5V时,SCK频率最高为10 MHz,而当工作电压低于4.5 V时,SCK最高频率则为1 MHz。硬件连接如图3-5所示。
图3-5温湿度传感器与单片机接口电路
内蒙古工业大学毕业设计说明书
3.4液晶显示电路设计
设计中采用1602液晶显示器,液晶显示器程序编写容易,下图是液晶显示器与单片机接口的原理图。
在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高、数字式接口 、体积小、重量轻 、功耗低。
图3-6液晶模块接口电路
3.5键盘报警显示设计
报警电路的功能是在AT89C51单片机的控制下实现声光报警或解除报警。当AT89C51单片机检测工作间隙超过规定的量值时,通过报警电路向报警器发出有效信号(高电平有效),声音报警电路接到有效电平后则自动发出预置的报警声,同时红色报警指示灯发出耀眼的红色信号。当P3.4, P3.5为低电平时,输出0电平,三极管集电极为0电平,三极管截止,集电极电流为0,发射极电流为0,声光报警器均不能正常工作。当P3.4, P3.5为高电平时,输出高电平,三极管集电极为高电平,三极管导通,集电极电流不为0,发射极电流不为0,声光报警器均能正常工作,处于报警状态。报警电路结构如图3-7所示
图3-7 声光报警电路
3.6粮仓用温湿度检测仪硬件电路设计
内蒙古工业大学毕业设计说明书
综合以上,基于单片机控制的温湿度检测仪电路,模块基本设置完成,下图是完整的温湿度检测仪硬件电路。
图3-8温湿度检测仪硬件电路图
内蒙古工业大学毕业设计说明书
第四章 温湿度检测仪软件设计及应用
4.1 粮仓温湿度检测仪软件总构思及流程图
为了实现粮仓的温湿度检测功能,硬件设计只是完成了整个系统设计的基础部分,整个功能的智能化实现还是要靠软件设计来实现的。在智能测控系统中软件的重要性与硬件同样重要。硬件是设计的躯体,软件是设计的灵魂,当系统的硬件电路确定之后,系统的主要功能还要靠软件来实现,而且软件的设计在很大程度上就决定了产品的性能。为了满足系统的要求,编制软件时一般要符合以下基本要求:
(1)易理解性、易维护性。要达到易理解和易维护等指标,在软件的设计方法中结构化设计是最好的一种设计方法,这种设计方法时由整体到局部,然后再由局部到细节,先考虑整个系统所要实现的功能。确定整体目标,然后把这个目标分成一个个的任务,任务中可以分成若干个子任务,这样逐层细分,逐个实现。 (2)实时性。实时性是电子测量系统的普遍要求,即要求系统及时响应外部事件的发生,并及时给出处理结果。近年来,由于硬件的集成度与速度的提高,配合相应的软件,实时性比较容易满足设计的要求。
(3)准确性。准确性对整个系统具有重要意义,尤其是测量系统,系统要进行一定量的运算。算法的正确性和准确性对结果有着直接的影响,因此再算法的选择、计算的精度等方面都要附和设计的要求。
基于单片机控制的温湿度检测仪主函数设计如下图所示。
内蒙古工业大学毕业设计说明书
开始保护现场重装T0计数初值N计数次数=600次?计数次数单元设置启动SHT11启动转换延时读测量命令温湿度值处理<温湿度设定值?N报警无限发送数值恢复现场中断返回
图4-1 总体软件设计构思
4.2 SHT11温湿度采集软件设计
4.2.1 SHT11设计思路
单片机首先向温湿度传感器SHT11发出启动传输命令,然后通过写总线子程序将温度测量指令(地址位000+命令位00011)或者湿度测量指令(000+命令位00101)写入SHT11。传感器正确接收到温度测量指令后,就会进行数据采集,单片机要等到测量完成,随后SHT11向单片机传送两字节测量数据(MSB和LSB)与1字节CRC校验码,单片机则通过读总线子程序将温湿度数据读取出来。
读子程序流程图:
内蒙古工业大学毕业设计说明书
开始启动传输调用子程序测量结束否N等待读取首个数据字节MSB读取第二个数据字节LSB读取校验码结束
图4-2 获取温湿度子程序
4.2.2 SHT11读取问题
从SHT11中读取数据以及往SHT11中写指令都涉及到了时序问题,下面简要介绍一下SHT11相关时序:
启动传输时序:当SCK为高时DATA翻转为低电平,紧接着SCK变为低电平,然后在SCK位高电平时DATA翻转为高电平。
测量时序:当单片机发出了启动传输命令,且SHT11正确接收到温(湿)度测量命令后,单片机就要等到测量完成。为表明测量完成,SHT11会使数据线为低,此时单片机必须重新启动SCK。然后SHT11向单片机传送两字节测量数据(MSB、LSB)与1字节CRC校验码。在传输过程中控制器必须通过使DATA为低来确认每一字节,所有的测量值从右算MSB列于第一位。通讯在确认CRC数据位后停止。如果没有用CRC-8校验码,则单片机需要在测量数据LSB后,保持ACK为高来停止通讯。
连接复位时序:当DATA线处于高电平时,触发SCK9次以上(含9次),并随后发一个前述的“传输开始”命令。
内蒙古工业大学毕业设计说明书
4.3 LCD1602显示软件设计
4.3.1设计思路
由于温湿度传感器的非线性因素的影响,单片机直接从SHT11读取的温湿度数据并不准确,必须经过相对湿度和温度的非线性补偿公式、相对湿度对于温度的依赖性补偿公式进行修正。然后,单片机通过往1602写数据子程序将修正后的数据写入1602显示出来。送显之前,单片机会通过1602写指令子程序往1602中写入显示字符地址,来设定显示位置。
特别值得注意的是,液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则指令失效。因此,单片机往1602写指令或数据之前,都要确认液晶模块空闲。
4.3.2液晶显示读写时序
LCD1602作为人机界面,显示的每一个字符都是通过单片机控制的,所有功能的实现是通过软件,软件的编写依据来源于时序,LCD1602液晶的读写时序如下图所示。
图4-3 读操作时序
图4-4 写操作时序
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日
内蒙古工业大学毕业设计说明书
文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
1602LCD的一般初始化(复位)过程: (1)延时15mS
(2)写指令38H(不检测忙信号) (3)延时5mS
(4)写指令38H(不检测忙信号) (5)延时5mS
(6)写指令38H(不检测忙信号)
(7)以后每次写指令、读/写数据操作均需要检测忙信号 (8)写指令38H:显示模式设置 (9)写指令08H:显示关闭 (10)写指令01H:显示清屏
(11)写指令06H:显示光标移动设置 (12)写指令0CH:显示开及光标设置
4.4 温湿度补偿软件设计
在实际应用过程中,温湿度传感器SHT11的温度并不是线性关系,取得的数据需要通过软件补偿和修正。修正依据是SHT11说明书。
温湿度修正公式
温度非线性补偿公式:t1=ntemp×0.01-40 相对湿度非线性补偿公式:
Flt0=0.0405×nhum-0.0000028×nhum×nhum-4 相对湿度对于温度的依赖性补偿公式:
Flt1=(t1-25) ×(0.01+0.00008×nhum)+flt0 程序编写如下:
void calc_sht11(float *p_humidity ,float *p_temperature) { const float C1=-4; // for 12 Bit const float C2=+0.0405; // for 12 Bit
const float C3=-0.0000028; // for 12 Bit
const float T1=+0.01; // for 14 Bit @ 5V const float T2=+0.00008; // for 14 Bit @ 5V
float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit float t=*p_temperature; // t: Temperature [Ticks] 14 Bit float rh_lin; // rh_lin: Humidity linear
float rh_true; // rh_true: Temperature compensated humidity float t_C; // t_C : Temperature [C]
内蒙古工业大学毕业设计说明书
t_C=t*0.01 - 39.2; //calc. temperature from ticks to [C] rh_lin=C3*rh*rh + C2*rh + C1; //calc. humidity from ticks to [%RH] rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //calc. temperature compensated humidity [%RH]
if(rh_true>100)rh_true=100; //cut if the value is outside of if(rh_true<0.1)rh_true=0.1; //the physical possible range *p_temperature=t_C; //return temperature [C] *p_humidity=rh_true; //return humidity[%RH] }
4.5报警及键盘软件设计
报警就是粮仓温湿度检测仪的一个重要组成部分,采集到的数据如果在设定范围内将正常工作,如果不在此范围将产生报警,报警点可以通过按键调整。按键程序如所示:
void key(void) { if(!set){/*while(!set);*/num++;if(num>4)num=0;} switch(num) { case 0: l0=0;l1=l2=l3=l4=1;break;//正常显示 case 1: l1=0;l0=l2=l3=l4=1;//调整温度最低值 if(!add){/*while(!add);*/tmp_l++;} if(!sub){/*while(!sub);*/tmp_l--;} break; case 2: l2=0;l1=l0=l3=l4=1;//调整温度最高值 if(!add){/*while(!add);*/tmp_h++;} if(!sub){/*while(!sub);*/tmp_h--;} break; case 3: l3=0;l1=l2=l0=l4=1;//调整温度最di值 if(!add){/*while(!add);*/hum_l++;} if(!sub){/*while(!sub);*/hum_l--;} break; case 4: l4=0;l1=l2=l0=l3=1;//调整温度最di值 if(!add){/*while(!add);*/hum_h++;} if(!sub){/*while(!sub);*/hum_h--;} break; } }
下面是报警程序 key(); /*报警状况*/ if(temp_val.f< tmp_h && temp_val.f>tmp_l)flg1=1;else flg1=0;
内蒙古工业大学毕业设计说明书
if(humi_val.f< hum_h && humi_val.f>hum_l)flg2=1;else flg2=0; if((flg1==1) && (flg2==1) ) beep=1;else beep=0;
如果温度和湿度同时满足条件,也就是都在设定范围内,将不会报警,系统正常运行,如果有某一个不在这一范围内,就会产生报警。
内蒙古工业大学毕业设计说明书
第五章 温湿度检测仪在粮仓中的应用
5.1仿真软件proteus简介
为了检验该温控电路的软、硬件能否达到设计要求,本文对电路进行了仿真操作,仿真在proteus软件中进行,首先在proteus软件中虚拟制作出电路图,然后导入事先编制好的软件程序,就可以进行动态仿真了,与在真实电路板上进行调试的过程基本一样。这样,如果在仿真过程中发现软、硬件不能正常工作,那么就能及时查找原因并做出相应修改,直到仿真的结果与实际相符为止。
Proteus软件是来自英国 Labcenter electronic公司的 EDA工具软件,是基于标准仿真引擎SPICE3F5 的混合电路仿真工具,既可以仿真模拟电路又可以仿真数字电路以及数字、模拟混合电路,其最大的特色在于它能够仿真基于微控制器的设计系统[01]。除了具有和其它 EDA 工具一样具有原理图布线、PCB自动生成或人工布线及电路仿真的功能外,其独特的功能是:将电路仿真和微处理器仿真协同进行,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,实时看到运行后的输入、输出的效果,Proteus软件建立了完备的电子设计开发环境。
Proteus软件由 ISIS 和 ARES 两个软件构成,其中 ISIS 是原理图编辑与仿真软件,ARES是布线编辑软件。ISIS软件可以仿真模拟电路、数字电路和模数混合电路,它支持MCS-51 及其派生系列、Microchip 公司的 PIC 系列及 Motorola 公司等多种MCU,Proteus软件所提供的元件库达30多个,共计数千种元器件,而且还提供了虚拟示波器、逻辑分析仪、信号发生器、计数器、电表、虚拟终端等虚拟仪器仪表可供选用。在软件调试方面,Proteus自身带有汇编编译器,不支持C语言,但可以与 KEIL C 集成开发环境连接,将用汇编或 C语言编写的程序编译好之后,可以立即进行软、硬件结合仿真,像使用仿真器一样来调试程序,当仿真成功后,直接点击ARES生成PCB板,同时又能够生成多种格式的网络表文件,供相应的专业PCB 设计调用, 方便了后续PCB 的设计。
5.2基于SHT11的温湿度检测仪计仿真
5.2.1仿真电路说明
基于SH11温湿度传感器的仿真在proteus 7.7 SP2运行环境下进行的。根据上文描述的原理,设计用AT89C51单片机控制的温湿度检测仪如图5-1所示。
内蒙古工业大学毕业设计说明书
1
图 5-1仿真电路图
电路包括单片机最小系统,温度传感器SHT11电路,LCD1602驱动电路以及电源部分,单片机最小系统,、键盘指示灯等等。
5.2.2仿真测试过程
SHT11温湿度传感器接入电路后,按动温度计上按钮,可以实现不同区间的报警与调整。仿真测试如下图5-2,5-3,5-4所示。
5-2 正常显示时候,
5-3 调整报警点
内蒙古工业大学毕业设计说明书
5-4 报警情况
5.2.3仿真操作过程
从上述仿真结果可以看出,分别对正常显示,调整报警点设置和报警情况进行分析与仿真。
1、 警产生。
2、
调整报警点,通过键盘按键,按下设置,将选中要设置的参数,设
定顺序是,第一次按下,设定报警温度的最低值,第二次按下,设定报警温度的最高值,第三次按下,设置报警湿度的最低值,第四次按下,设置报警湿度的最高值,再次按下,将正常显示,如此设定选中要设定的参数,通过Add或Sub按键进行数据增加和减少。从而实现设置最低和最高点功能。
正常显示时候,“正常显示”指示灯亮起,其他不亮,如果采集到的
温度和湿度在设定的范围内,报警指示灯不亮,否者报警指示灯亮起,表明有报
5.3温湿度检测仪在粮仓中的应用
通过仿真发现,基于SHT11温湿度传感器的温湿度检测仪,应用在粮仓温湿度检测中,非常合适,实验仿真结果表明,所设计的基于AT89C51和SHT11的温湿度检测仪温度计,原理正确,理论可行,电路简单,经济适用。
如果能移植到事物制作中,一定是一个不错的温湿度检测系统,能满足设计要求。
内蒙古工业大学毕业设计说明书
第六章 总 结
经过一段时间按的努力,终于完成了我的基于AT89C51单片机和SHT11温湿度传感器的温湿度检测仪的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,不过高兴之余不得不深思呀!
此次毕业设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,毕业设计重点就在于硬件电路设计,软件算法的设计。
本次设计不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
我根据已经掌握的理论基础,结合实践,经历几个月的努力,终于完成的单片机数字温度计的设计,该温度计已成功通过测试,运行良好。
尽管我的设计还存在一定缺陷,但这不是最重要的,最重要的是我学到了很多东西,首先我对单片机的应用有了进一步了解,单片机有很多系列,怎样来选者适合自己工作需要的单片机很重要。对单片机的编程是整个设计中最重要的一个部分,毕业设计中我使用的是C语言对单片机进行编程,让我对单片机C语言的认识有了进一步的提高。再者,经过这次毕业设计,让我对思考问题的方法有了新的认识,刚刚开始做的时候我真的比较茫然,因为当时我都不是很清楚该做什么、怎么做,后来通过查找资料,借鉴别人的设计思路,将别人的思想融会贯通,终于实现的自己的设计方案。现在我意识到无论自己在做什么都要清楚自己的目的,清楚自己的目的后,并不一定要按照前人的思想去完成自己的任务,自己完全可以按照自己的思想去做,尽管可能到最后发现自己失败了,失败并不是最可怕的,因为它总能让你认识到或学到些什么。最后,通过这次毕业设计让我的自信心变得更强了,我证明给自己看我能做到很多东西,只要我认真去做了。但我也同时认识到我自己真的太渺小了,我需要提升自己,让自己站得更高,看得更远。
脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐
内蒙古工业大学毕业设计说明书
劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。
这次论文写作过程,由最初拿到题目的茫然无知,到收集材料,到认真学习了解设计知识,到后来的制作过程,再到最后的完成论文,实现目标,虽然过程挺艰辛曲折,但是论文还是做出来了,我感受到做论文是要真真正正用心去做一件事,是真正的自己学习和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。
内蒙古工业大学毕业设计说明书
参考文献
[1]、 2000.7 [2]、 [3]、 [4]、 [5]、 [6]、 1999 [7]、 [8]、 [9]、
电子设计实战攻略 刘征宇 福建科学技术出版社 2006
单片机原理及接口技术(简明修订版) 李朝青 北京航空航天大学单片机基础 李广弟 北京航空航天大学出版社 1994 温度控制系统的发展概况 吴为民 王仁丽 2002 NTC热敏电阻器的现状与发展趋势 电子元件与材料 1997 数字电路与数字电子技术 岳怡 西北工业大学出版社 2004 基于ARM的热敏电阻温度计的设计 现代电子技术2007 年第 8 期 Protel 99电路设计指南 王彦平 任延群 危胜军 清华大学出版社 单片机原理及接口技术 玉溪村曹国华等 西安电子科技大学出版社
出版社 1998
[10]、 单片机应用系统设计系统配置与接口技术 何立明 北京航空航天大学出版社 北京2005
[11]、 单总线数字温度传感器的自动识别技术 罗文广 电子产品世界 2002
[12]、 单片机基础实用教程 尹念东 中国地质大学出版社 2005 [13]、 单总线技术及其应用电气时代 陈志英 李光辉 科学出版社 2003 [14]、 电子设计实战攻略 刘征宇 福建科学技术出版社 2006
[15]、 基于热敏电阻的温度监钡J系统 奕成强 Electronic products China 2002
[16]、 基于数字温度传感器的电缆故障在线监测及火灾预警系统电力自动化设备 张艾萍 万瑞军 2003
[17]、 单片级高级语言C51应用程序设计 徐爱钧 彭秀华 电子工业出版社 2001
[18]、 温度传感器和一线总线协议 林继鹏 王君 凌振宝 传感器技术 2002
[19]、 《单总线数字温度传感器的自动识别技术》 罗文广 电子产品世界 2002
[20]、 《传热学》 D.皮茨 L.西索姆 葛新石 科学出版社 2002
[21]、 解析Dallas通用的单总线网络 魏智 Semiconductor technology.2001
[22]、 《Protel 99电路设计指南》 王彦平 任延群 危胜军 清华大学出
内蒙古工业大学毕业设计说明书
版社 1999
[23]、 《单片机基础实用教程》 尹念东 中国地质大学出版社 2005
[24]、 《单总线技术及其应用电气时代》 陈志英 李光辉 科学出版社 2003
[25]、 《单总线数字温度传感器DS18B20及其应用》 黄攀 王俊杰 清华大学出版社 2001
[26]、 一线总线的软件接口自动化技术及应用 龚荣胜 张阿卜 2003 [27]、 《电子设计实战攻略》 刘征宇 福建科学技术出版社 2006 [28]、 《数字电路与数字电子技术》 岳怡 西北工业大学出版社 2004 [29]、 温度控制系统的发展概况 吴为民 王仁丽 2002
[30]、 基于热敏电阻的温度监钡J系统 奕成强 Electronic products China 2002
[31]、 基于数字温度传感器的电缆故障在线监测及火灾预警系统电力自动化设备 张艾萍 万瑞军 2003
[32]、 新型温度计DS18B20与8031的多路测温接口. 杜清府 杨永竹 微型机与应用 1996
[33]、 《单片级高级语言C51应用程序设计》 徐爱钧 彭秀华 电子工业出版社 2001
内蒙古工业大学毕业设计说明书
致 谢
时光茬蒋,光阴似箭,转眼间四年的大学生活即将结束。回首这四年走过的路,无不充满汗水和拼搏,这段历程将是我一生享受不尽的宝贵财富。而我无论是在思想或是学业上的每一次进步,都离不开老师、同学和朋友的热情帮助。
毕业答辩是我们学业生涯的一个结束性的标志,在这一过程中我特别想感谢我的家人为我付出的一切。他们无私地付出才有了今天的我,是我的家人给了我学习的机会,让我的人生有一个新的起点,三年来的学习生活让自己懂得更多,使我对未来的新生活充满了信心和希望。
首先感谢电气系的老师们。在整个本科生学习阶段他们无论是学习上还是生活上都给予了我无微不至的关怀。老师严谨求实、一丝不苟的治学风范和工作态度是我学习的典范,我将终生受益,在此我表示最衷心的感谢! 在此衷心祝福他们身体健康,心想事成。特别感谢陈虹老师,给予我论文指导,
我还要感谢我的父母,是他们在我二十多年的生涯中,给了我最大的支持和鼓励,我由衷地感谢他们对我的付出,没有他们的支持,我无法顺利完成我的学业!
在我成长的过程中,有许多老师、同学、朋友给了我帮助,在此我要向我的导师致以最衷心的感谢和深深的敬意。
最后向百忙之中评阅本文并提出指正意见的各位老师们表示衷心的感谢!
内蒙古工业大学毕业设计说明书
附 录
附录 一、
程序清单
/*************端口定义******************** P1.0------SCK (SHT11) P1.1------DATA (SHT11) P0------DB0~DB7 (LCD1602) P2.0------RS (LCD1602) P2.1------RW (LCD1602) P2.2------E (LCD1602)
*****************************************/
#include #define uchar unsigned char #define uint unsigned int //1602液晶端口定义 ****** sbit LcdRs= P2^0; sbit LcdRw= P2^1; sbit LcdEn= P2^2; sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; sbit l0=P3^0; sbit l1=P3^1; sbit l2=P3^2; sbit l3=P3^3; sbit l4=P3^4; sbit set=P3^5; sbit add=P3^6; sbit sub=P3^7; sbit beep=P2^6; 内蒙古工业大学毕业设计说明书 char num; uchar str[16]; uchar tmp_h,tmp_l,hum_h,hum_l; //向LCD写入命令或数据************* #define LCD_COMMAND 0 // Command #define LCD_DATA 1 // Data #define LCD_CLEAR_SCREEN 0x01 // 清屏 #define LCD_HOMING 0x02 // 光标返回原点 //设置显示模式***************** #define LCD_SHOW 0x04 //显示开 #define LCD_HIDE 0x00 //显示关 #define LCD_CURSOR 0x02 //显示光标 #define LCD_NO_CURSOR 0x00 //无光标 #define LCD_FLASH 0x01 //光标闪动 #define LCD_NO_FLASH 0x00 //光标不闪动 //设置输入模式************ #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00 // default #define LCD_MOVE 0x01 // 画面可平移 #define LCD_NO_MOVE 0x00 //default unsigned char LCD_Wait(void); void LCD_Write(bit style, unsigned char input); /***********1602液晶显示部分子程序****************/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void LCD_Write(bit style, unsigned char input) { LcdRs=style; P0=input; delay(5); LcdEn=1; delay(5); 内蒙古工业大学毕业设计说明书 LcdEn=0; } void LCD_SetDisplay(unsigned char DisplayMode) { LCD_Write(LCD_COMMAND, 0x08|DisplayMode); } void LCD_SetInput(unsigned char InputMode) { LCD_Write(LCD_COMMAND, 0x04|InputMode); } //初始化LCD********************* void LCD_Initial() { LcdEn=0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 } //液晶字符输入的位置************************ void GotoXY(unsigned char x, unsigned char y) { if(y==0) LCD_Write(LCD_COMMAND,0x80|x); if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); } //将字符输出到液晶显示 void Print(unsigned char *str) { while(*str!='\\0') { LCD_Write(LCD_DATA,*str); 内蒙古工业大学毕业设计说明书 str++; } } void zhuanhuan(float a)//浮点数转换成字符串函数 { memset(str,0,sizeof(str)); sprintf (str,\"%f\ } /* void welcome() { LCD_Initial(); GotoXY(0,0); Print(\" Welcome! \"); GotoXY(0,1); Print(\" Code of SHT11 \"); delay(200); } */ /*-------------------------------------- ;模块名称:delay_n10us(); ;功 能:延时函数,延时约n个10us 较精确的延时函数,\"_nop_()\"延时1us@12M晶振 ;-------------------------------------*/ void delay_n10us(uint n) //延时n个10us@12M晶振 { uint i; for(i=n;i>0;i--) { _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_(); } } //*********************第一部分LCD1602设置 END*************** //**************第二部分SHT11设置 START********** sbit SCK = P1^0; //定义通讯时钟端口 内蒙古工业大学毕业设计说明书 sbit DATA = P1^1; //定义通讯数据端口 typedef union { unsigned int i; //定义了两个共用体 float f; } value; enum {TEMP,HUMI}; //TEMP=0,HUMI=1 #define noACK 0 //用于判断是否结束通讯 #define ACK 1 //结束数据传输 //adr command r/w #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0 /****************定义函数****************/ void s_transstart(void); //启动传输函数 void s_connectionreset(void); //连接复位函数 char s_write_byte(unsigned char value);//SHT11写函数 char s_read_byte(unsigned char ack); //SHT11读函数 char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);//测量温湿度函数 void calc_sht11(float *p_humidity ,float *p_temperature);//温湿度补偿 /*-------------------------------------- ;模块名称:s_transstart(); ;功 能:启动传输函数 ;-------------------------------------*/ void s_transstart(void) // generates a transmission start // _____ ________ // DATA: |_______| // ___ ___ // SCK : ___| |___| |______ { DATA=1; SCK=0; //Initial state _nop_(); 内蒙古工业大学毕业设计说明书 SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; } /*-------------------------------------- ;模块名称:s_connectionreset(); ;功 能:连接复位函数 ;-------------------------------------*/ void s_connectionreset(void) { unsigned char i; DATA=1; SCK=0; //Initial state for(i=0;i<9;i++) //9 SCK cycles { SCK=1; SCK=0; } s_transstart(); //transmission start } /*-------------------------------------- ;模块名称:s_write_byte(); ;功 能:SHT11写函数 ;-------------------------------------*/ char s_write_byte(unsigned char value) { unsigned char i,error=0; for (i=0x80;i>0;i/=2) //shift bit for masking { if (i & value) DATA=1; //masking value with i , write to SENSI-BUS else DATA=0; SCK=1; //clk for SENSI-BUS _nop_();_nop_();_nop_(); //pulswith approx. 3 us 内蒙古工业大学毕业设计说明书 SCK=0; } DATA=1; //release DATA-line SCK=1; //clk #9 for ack error=DATA; //check ack (DATA will be pulled down by SHT11),DATA在第9个上升沿将被SHT11自动下拉为低电平。 _nop_();_nop_();_nop_(); SCK=0; DATA=1; //release DATA-line return error; //error=1 in case of no acknowledge //返回:0成功,1失败 } /*-------------------------------------- ;模块名称:s_read_byte(); ;功 能:SHT11读函数 ;-------------------------------------*/ char s_read_byte(unsigned char ack) // reads a byte form the Sensibus and gives an acknowledge in case of \"ack=1\" { unsigned char i,val=0; DATA=1; //release DATA-line for (i=0x80;i>0;i/=2) //shift bit for masking { SCK=1; //clk for SENSI-BUS if (DATA) val=(val | i); //read bit _nop_();_nop_();_nop_(); //pulswith approx. 3 us SCK=0; } if(ack==1)DATA=0; //in case of \"ack==1\" pull down DATA-Line else DATA=1; //如果是校验(ack==0),读取完后结束通讯 _nop_();_nop_();_nop_(); //pulswith approx. 3 us SCK=1; //clk #9 for ack _nop_();_nop_();_nop_(); //pulswith approx. 3 us SCK=0; _nop_();_nop_();_nop_(); //pulswith approx. 3 us DATA=1; //release DATA-line return val; } 内蒙古工业大学毕业设计说明书 /*-------------------------------------- ;模块名称:s_measure(); ;功 能:测量温湿度函数 ;-------------------------------------*/ char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) // makes a measurement (humidity/temperature) with checksum { unsigned error=0; unsigned int i; s_transstart(); //transmission start switch(mode){ //send command to sensor case TEMP : error+=s_write_byte(MEASURE_TEMP); break; case HUMI : error+=s_write_byte(MEASURE_HUMI); break; default : break; } for (i=0;i<65535;i++) if(DATA==0) break; //wait until sensor has finished the measurement if(DATA) error+=1; // or timeout (~2 sec.) is reached *(p_value) =s_read_byte(ACK); //read the first byte (MSB) *(p_value+1)=s_read_byte(ACK); //read the second byte (LSB) *p_checksum =s_read_byte(noACK); //read checksum return error; } /*-------------------------------------- ;模块名称:calc_sht11(); ;功 能:温湿度补偿函数 ;-------------------------------------*/ void calc_sht11(float *p_humidity ,float *p_temperature) { const float C1=-4; // for 12 Bit const float C2=+0.0405; // for 12 Bit const float C3=-0.0000028; // for 12 Bit const float T1=+0.01; // for 14 Bit @ 5V const float T2=+0.00008; // for 14 Bit @ 5V float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit float t=*p_temperature; // t: Temperature [Ticks] 14 Bit float rh_lin; // rh_lin: Humidity linear float rh_true; // rh_true: Temperature compensated humidity float t_C; // t_C : Temperature [C] 内蒙古工业大学毕业设计说明书 t_C=t*0.01 - 39.2; //calc. temperature from ticks to [C] rh_lin=C3*rh*rh + C2*rh + C1; //calc. humidity from ticks to [%RH] rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //calc. temperature compensated humidity [%RH] if(rh_true>100)rh_true=100; //cut if the value is outside of if(rh_true<0.1)rh_true=0.1; //the physical possible range *p_temperature=t_C; //return temperature [C] *p_humidity=rh_true; //return humidity[%RH] } void key(void) { if(!set){/*while(!set);*/num++;if(num>4)num=0;} switch(num) { case 0: l0=0;l1=l2=l3=l4=1;break;//正常显示 case 1: l1=0;l0=l2=l3=l4=1;//调整温度最低值 if(!add){/*while(!add);*/tmp_l++;} if(!sub){/*while(!sub);*/tmp_l--;} break; case 2: l2=0;l1=l0=l3=l4=1;//调整温度最高值 if(!add){/*while(!add);*/tmp_h++;} if(!sub){/*while(!sub);*/tmp_h--;} break; case 3: l3=0;l1=l2=l0=l4=1;//调整温度最di值 if(!add){/*while(!add);*/hum_l++;} if(!sub){/*while(!sub);*/hum_l--;} break; case 4: l4=0;l1=l2=l0=l3=1;//调整温度最di值 if(!add){/*while(!add);*/hum_h++;} if(!sub){/*while(!sub);*/hum_h--;} break; } } //*************第二部分SHT11设置 END******** //*********主函数***************** void main(void) { 内蒙古工业大学毕业设计说明书 value humi_val,temp_val; unsigned char error,checksum; char flg1,flg2; tmp_h=50; tmp_l=20; hum_h=85; hum_l=50; num=0; LcdRw=0; s_connectionreset(); // welcome();//显示欢迎画面 // delay(2000); LCD_Initial(); while(1) { error=0; error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI); //measure humidity error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP); //measure temperature if(error!=0) s_connectionreset(); //in case of an error: connection reset else { humi_val.f=(float)humi_val.i; //converts integer to float temp_val.f=(float)temp_val.i; //converts integer to float calc_sht11(&humi_val.f,&temp_val.f); //计算湿度与温度 GotoXY(0,0);// Print(\"Tep:\"); GotoXY(0,1); Print(\"Hum:\"); if(humi_val.f<0)humi_val.f=0; if(temp_val.f<0)temp_val.f=0; if(humi_val.f>100)humi_val.f=99; if(temp_val.f>100)temp_val.f=99; zhuanhuan(temp_val.f);//转换温度为uchar方便液晶显示 GotoXY(5,0); str[2]=0xDF;//℃的符号 str[3]=0x43; 内蒙古工业大学毕业设计说明书 str[4]=' ';str[5]=' '; str[6]=tmp_l/10+0x30;//'2'; str[7]=tmp_l % 10+0x30;; str[8]='-'; str[9]=tmp_h/10+0x30;; str[10]=tmp_h % 10+0x30;;str[11]='\\0'; Print(str); zhuanhuan(humi_val.f);//转换湿度为uchar方便液晶显示 // if(humi_val.f>64)P3=0XF0; } 二、 电路图 GotoXY(5,1); str[2]='%';//%的符号 str[3]='R'; str[4]=' '; str[5]=' '; str[6]=hum_l/10+0x30; str[7]=hum_l % 10+0x30; str[8]='-'; str[9]=hum_h/10+0x30; str[10]=hum_h % 10+0x30; str[11]='\\0';//字符串结束标志 Print(str); key(); /*报警状况*/ if(temp_val.f< tmp_h && temp_val.f>tmp_l)flg1=1;else flg1=0; if(humi_val.f< hum_h && humi_val.f>hum_l)flg2=1;else flg2=0; if((flg1==1) && (flg2==1) ) beep=1;else beep=0; } //----------wait approx. 0.8s to avoid heating up SHTxx---- delay_n10us(80000); //延时约0.8s } 内蒙古工业大学毕业设计说明书 因篇幅问题不能全部显示,请点此查看更多更全内容