粮仓温湿度检测系统的设计-物联网原理及应用课程设计汇编(完整版)资料_第1页
粮仓温湿度检测系统的设计-物联网原理及应用课程设计汇编(完整版)资料_第2页
粮仓温湿度检测系统的设计-物联网原理及应用课程设计汇编(完整版)资料_第3页
粮仓温湿度检测系统的设计-物联网原理及应用课程设计汇编(完整版)资料_第4页
粮仓温湿度检测系统的设计-物联网原理及应用课程设计汇编(完整版)资料_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

粮仓温湿度检测系统的设计--物联网原理及应用课程设计汇编(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)

粮仓温湿度检测系统的设计--物联网原理及应用课程设计汇编(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)石家庄铁道大学物联网原理及应用课程作业2021年春季学期学院:电气与电子工程学院专业:电子信息工程课程名称:物联网原理及应用学生姓名:刘世超学号:指导教师:王伟明完成日期:摘要温湿度控制已成为当今社会研究的热门项目。是工农业生产过程中必须考虑的因素。作为最常见的被控参数。温度和湿度已经不再是相互独立的物理量,而应在系统中综合考虑。广泛应用于实验室、大棚、花圃、粮仓乃至土壤等各个领域。而传统的温湿度控制则利用湿度表、毛发湿度表、双金属式测量计和湿度试纸等测试器材。通过人工进行检测。对不符合温度和湿度要求的库房进行通风、降温、去湿等操作。这种人工测试方法费时费力,效率低。切随机性较大。误差大。因此就需要一种造价低廉、使用方便且计算精确的温湿度控制仪器。利用单片机对温、湿度控制,具有控温、湿精度高、功能强、体积小、价格低,简单灵活等优点,很好的满足了工艺要求。本文通过使用STC89C52单片机、DHT11传感器模块、1602液晶显示屏模块以及报警模块。简单明了的实现的可提要求。DHT11数字温湿度传感器把采集到的温湿度数据传给单片机。经过单片机的处理。准确的显示到液晶屏上。并对温湿度设置上下限。越限报警。关键词:单片机DHT11传感器1602液晶显示屏STC89C52报警目录第1章绪论 11.1课题研究的背景 11.2课题研究的意义 11.3课题研究的主要内容 11.4课题研究的工作原理 2第2章系统总体方案设计 32.1功能要求 32.2设计思路 32.3总体设计框图 3第3章系统硬件设计 53.1概述 53.2主控模块设计 5STC89C52芯片的简介 5主控模块电路原理图 83.3DHT11传感器模块设计 8DHT11传感器简介 8DHT11传感器模块电路设计 123.41602液晶显示模块设计 131602液晶显示屏简介 131602液晶显示模块电路原理图 163.5报警模块 17蜂鸣器介绍 17蜂鸣器工作原理 17第4章系统软件设计 184.11602液晶显示模块设计 194.2传感器模块设计 21第5章系统分析与调试 23第6章结论与展望 25附录 30附录A硬件原理图 27附录B程序清单 28附录C实物演示图 44第1章绪论1.1课题研究的背景由古至今,粮仓粮食的存储是否得当对国家的经济能否正常合理的运行有很大的影响。但是在以前的经济和科技水平有限,所以我国粮食的存储的环境很差,管理落后。粮库管理的重点之一就是要合理布置测温点,经常检查温度变化,以便及时发现粮食的发热点,减少粮食的损失。然而,粮堆的热传递又是那样的缓慢,使人感知极差,需要管理人员经常进入闷热、呛人的仓房内观察温、湿度,不断进行翻仓、通风,这种繁重的体力劳动,不仅对人体有极大地伤害,而且不科学、不及时。所以,粮食虫蛀、霉变的情况时有发生。1.2课题研究的意义8051单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度控制系统的实力也很多。使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习掌握,性价比高。使用8051型单片机设计温湿度控制系统,可以即时精确的反应温室内的温度以及适度的变化。完成诸如升温到特定的温度、降温到特定的温度。在温度上下限范围内保持恒温等多种控制方式,在湿度控制方面也是如此。将此系统应用到温室当中无疑为植被生长提供了更加适宜的环境。对于粮仓粮食,必须在某些特定环境安装温湿度装置对其进行监控。本系统可以及时、精确的反映室内的温度以及湿度的变化,能够满足温湿度的控制要求。1.3课题研究的主要内容本系统所要完成的任务是:1.4课题研究的工作原理该电路的最关键部分是关于温度和湿度的采集以及检测、显示。主控电路芯片采用学校统一制作的STC89C52单片机学习板。STC单片机执行指令的速度很快,对工作环境的要求比较低;传感器模块我选择了DHT11数字温湿度传感器。告别了以前的单独测量温度以及湿度的方式,更简洁,更方便。连接好外围电路。通过DHT11准确的检测出当前环境下的温湿度,并且将所测数据交给STC单片机进行分析和处理。再将所得数据有单片机发送给HJ1602A液晶屏。成功完成显示。控制模块采用蜂鸣器报警方式。预先设置好所需温度和湿度的限值(一个上限一个下限),将蜂鸣器接入电路。通过温度和湿度的上下限值控制蜂鸣器的报警。若逾越限值,实现蜂鸣器鸣响。提醒工作人员此时温度湿度数据出现异常、需及时调整,及时启用升温器、加湿器、降温风扇以及喷雾器来有效的调整实验室内温湿度。从而简单实现了控制。总体来说,本次设计主要涉及了温湿度的测量以及实现简单控制。硬件方面有四个模块,即传感器模块、STC80C52单片机主控模块、LCD1602液晶显示模块以及报警模块,从硬件制作方面。也相对简便。原理清晰、连线方便,不需要额外的焊接等技术。给硬件的制作带来了极大的便捷。

第2章系统总体方案设计2.1功能要求1、通过数字温湿度传感器DHT11采集温湿度数据,即时传输给单片机;2、单片机将收到的信号进行分析和处理,将采集到时温湿度实时数据送给1602液晶显示屏;3、通过1602LCD液晶屏完成温湿度的数据显示;4、给定温度湿度上下限数值,设置不同的温湿度,接入蜂鸣器,实现越限报警;5.当温度达到上限值时继电器工作模拟降温(风扇转动),当湿度达到上限值时继电器工作模拟去湿。2.2设计思路电路总体上分为温湿度采集部分、中央处理器、显示模块以及报警模块部分。以STC89C52单片机最小系统作为核心控制电路,控制DHT11传感器采集的温湿度的转换,控制1602液晶屏的显示,以及蜂鸣器的报警。具体显示内容及方式由软件来完成。采集温湿度方面由DHT11传感器来完成,它是一个数字温湿度传感器、内置模数转换,可以直接与单片机相连接。而1602液晶屏是插针式,也可以直接与单片机相连接。因此不需要手动焊接等复杂的过程。具体步骤是:按照原理图将传感器、1602液晶显示屏分别接入单片机。通过DHT11传感器采集当前的温湿度值、再经单片机,将处理后的数据传送到液晶屏上显示出来。并且接入蜂鸣器。设置温度的上限值。实现越限报警并控制风扇启动。2.3总体设计框图按照系统功能的具体要求,在保证实现其功能的然础上,尽可能降低系统成本。总体设计方案围绕上述思想,初步确定系统的方案如图2-1所示。P2.0P2.0STC89C52主控模块P2.2~P2.4P0.7DHT11传感器模块1602字符液晶模块报警模块传感器与之相连1602字符液晶与之相连图2-1从图中可以看出,系统有微处理器模块、1602字符液晶显示模块、DHT11传感器模块和报警模块组成。在方案设计中,遵循简洁至上的原则,因此所有的外围模块采用串行方式与微处理器模块接口。该设计以STC89C51系列单片机为控制核心,实现温湿度采集及显示的基本功能。在设计系统时,为了更好地采用模块化设计法,分步的设计各个单元功能模块,系统的硬件部分可以分为传感器的使用、单片机控制、1602液晶显示和实现报警四大部分。

第3章系统硬件设计3.1概述此次的毕业设计主要由4个大的模块构成,分别是主控模块、传感器模块、LCD液晶显示模块及报警模块,其中主控模块是此次毕业设计的核心模块,主要是指STC89C52芯片,它控制整个系统的运行,利用其各个口分别控制其他模块,使其他模块能够成为一个整体,实现功能的需要;报警模块主要指将蜂鸣器接入单片机电路。通过对时时温度的检测,并给定所需要的温度区间,即给定上下限值,实现越限报警;传感器模块用于实验室实时温湿度的检测、由于DHT11的数字一体性,集成了模数转换等模块。直接接单片机即可。LCD液晶显示模块同样接入单片机,完成对单片机处理后的数据进行显示。3.2主控模块设计功能特性:STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案,如图3-1所示。STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。主要性能:与MCS51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz

、三级加密程序存储器

、32个可编程I/O口线

、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。图3-1STC89C52芯片管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为STC89C52的一些特殊功能口,如下表所示:管脚备选功能:表3-1P3口的第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。单片机主程序模块通过对DHT11传感器采集到信号的读取,将得到的数据信号进行分析和处理,再将处理后的信号发送给1602液晶显示模块。完成信息的接收与发送。并且连接蜂鸣器。控制报警系统。如图3-2所示。图3-2STC89C52模块电路原理图3.3DHT11传感器模块设计DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。DHT11传感器实物图如下3-3所示:图3-3DHT11传感器实物图(1)引脚介绍:Pin1:(VDD),电源引脚,供电电压为3~5.5V。Pin2:(DATA),串行数据,单总线。Pin3:(NC),空脚,请悬浮。Pin4(VDD),接地端,电源负极。(2)接口说明:建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。图3-4DHT11典型应用电路(3)数据帧的描述:DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。(4)电气特性:VDD=5V,T=25℃,除非特殊标注表3-2DHT11的电气特性参数条件Mintypmax单位供电DC355.5V供电电流测量0.52.5mA平均0.21mA待机100150uA采样周期秒1次注:采样周期间隔不得低于1秒钟。(5)时序描述:用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。通讯过程如下图3-5所示:图3-5总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。图3-6总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。数字0信号表示方法如下图3-7所示:图3-7数字1信号表示方法如下图3-8所示图3-8DHT11传感器模块电路设计DHT11传感器连接STC89C51系列单片机相对比较简单。单片机的P2.0口用来发收串行数据,即数据口。连接传感器的Pin2(单总线,串行数据)。由于测量范围电路小于20米,建议加一个5K的上拉电阻,因此在传感器的Pin2口与电源之间连接一个5K电阻。而传感器的电源端口Pin1和Pin4分别接单片机的VDD和GND端。传感器的第三脚悬浮放置。DHT11传感器原件的电路原理图如下3-9所示:图3-9DHT11电路原理图3.41602液晶显示模块设计1602液晶显示屏简介HJ1602A是一种工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)。在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单。在单片机系统中应用晶液显示器作为输出器件有以下几个优点:由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图3-10和3-11所示:图3-10液晶屏正面图3-11液晶屏背面(1)引脚说明:第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)1602LCD的RAM地址映射以及标准字库表LCD1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字符图有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的(说明:1为高电平,0为低电平)。指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移。S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标。B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线。N:低电平时为单行显示,高电平时双行显示。F:低电平时显示5X7的点阵字符,高电平时显示5x10的点阵字符(有些模块是DL:高电平时为8位总线,低电平时为4位总线)。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读出忙信号和光标地址。BF为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙,模块就能接收相应的命令或者数据。指令10:写数据。指令11:读数据。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。1602内部显示地址如图3-12所示:图3-121602内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下图所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。图3-131602显示模块3.5报警模块蜂鸣器是一种一体化结构的电子讯响器。采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。图3-14蜂鸣器工作原理图

第4章系统软件设计在对我们所要设计的课题有了整体的了解之后,需要先建立程序框架的流程图,对整个设计划分模块,逐个模块实现其功能,最终把各个子模块合理的连接起来,构成总的程序。主程序首先要对整个系统进行初始化,然后将采集到的温湿度指令传给系统的主流程图如图4-1所示:开始初始化延时开始初始化延时温湿度测量1602显示数据判断温度温度低于26℃高于30℃蜂鸣器铃响蜂鸣器铃响结束图4-1主程序流程图

4.11602液晶显示模块设计液晶显示模块是一个慢显示器件,在执行每条指令之前要确认模块的忙标志为低电平,表示不忙,则此指令失效,要显示字符时要先输入显示字符地址,告诉模块在哪里现实了字符。1602液晶显示模块可与STC89C52直接接口的。软件流程图如图4-2所示:开始LCD开始LCD初始化延时设第一行显示位置显示第一行内容设第二行显示位置显示第二行内容图4-21602液晶显示模块程序流程图4.2传感器模块设计温湿度模块DH11数字温湿传感器加湿器温湿度传感器随着科技的不断发展,汽车、空调、除湿器、烘干机等种类繁多的电器都已进入人们的日常生活,而这些电器设备很多都离不开对温度、湿度等环境因素的要求。因此,温度、湿度传感器用途越来越广泛。新一代的数字传感器不再需要外置的AD转换模块,并具有标准接口,使用方便,得到了越来越多的应用。DHT11作为一种新型的单总线温湿度数字传感器,具有更多的优点,它使系统设计更加简单,控制方便,易于实现。1单总线通信简介目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线、SPI总线和SCI总线。其中I2C总线以同步串行两线方式进行通信(1条时钟线,1条数据线),SPI总线则以同步串行三线方式进行通信(1条时钟线,1条数据输入线,1条数据输出线),而SCI总线是以异步方式进行通信的(1条数据输入线,1条数据输出线)。这些总线至少需要两条或两条以上的信号线。DHT11传感器模块的软件流程图如下图所示给DHT11上电延时1S给DHT11上电延时1S保持高电平检测记录信号输出低电平延时输出低电平数据输出结束信号图4-3DHT11传感器模块程序流程图第5章系统分析与调试本设计是在KeilC环境下开发的,KeilC软件支持C语言的编程及调试,运用方便,是做C语言毕业设计者的首选。设计的首要任务是安装和学习使用这个软件,在简单的学习和了解KeilC后,我们便可在此环境下开始了对带录音功能的电子琴的设计工作。在编译完KeilC后,再运用STC_ISP_V480软件烧录到开发板上,实现实物与程序的连接。在烧录前要对STC_ISP_V480进行一些必要的设置。第一步:设置MCUType为STC89C52RC;第二步:打开编写好并编译的程序文件,它是以.hex为后缀的文件;第三步:选择对应的COM端口,(可在我的电脑的设备管理处查看COM选项);第四步:点击Download/下载,等提示请给MCU上电时,打开开发板上的开关,它就自行烧录了。KeilC程序运行如图5-1所示图5-1keilC运行图图5-2程序烧录运行图在完成对程序的调试及烧录之后,还需要对其进行演示,把开发板与电脑连上,设置好对应的接口,完成供电及下载。开始供电后、稍带几秒等1602液晶屏能正常显示当前温湿度了之后。观察当前温湿度的变化。并且针对与自己设定的限值相比较。若当前温度没有超标,即没有超过限值。可以用手捂住DHT11传感器,令其温度的显示超标。测试能否达到报警。经过测试。完全可行。因而简单的实现了对温度的控制。湿度控制原理跟温度一样。

第6章结论与展望本系统以单片机为核心部件的控制系统,利用软件编程,最终基本上实现了各项要求。虽然系统还存在一些不足,比如温湿度测量不够精确,特别是湿度,波动较大。尝试了各种改进方法。仍然不太理想。不过大体能反映出设计的目的和要求。与预期的结果相差不多。经过近两个月的奋斗,从确定题目,到后来查找资料,理论学习,实验编程调试,这一切都使我的理论知识和动手能力有了很大的提高。了解了单片机的硬件结构和软件编程方法,对单片机的工作方式有了很大的认知。同时,对一些外围设备比如传感器、液晶屏、键盘、蜂鸣器等有了一定的了解!学会了对一项工程如何设计:首先,要分析需要设计的系统要实现什么功能,需要什么器件;然后,针对设计购买相应的硬件,选用硬件时不仅要选用经济的,更重要的是如何能更精确更方便的完成系统的要求;再次,对各个硬件的软件实现要弄清楚,如何更好的实现各个硬件的协调,更好的通过主控制器件实现硬件的功能。最后,通过各种测试与调试,让设计更好的完成系统要求。但因为我们的水平有限,此设计中也存在一定的不足。就比如说对湿度的控制方面,由于温度时刻都在发生着变化。而湿度的变化又大体上取决于温度。因而对于湿度的控制有点困难。同时由于湿度变化波动比较大。造成报警频繁,为湿度限值的设定也带来了不小的麻烦。温湿度控制已经成为了21世纪热门研究话题之一。无论是从生产还是生活,与我们人类都是息息相关的。而智能化的控制温湿度已经发展成为一种必然。随着世界经济的发展,人们生活水平的提高以及社会的进步。我们不可能一直墨守陈规,不能在恪守以前利用人力资源来控制温湿度的方法。不仅浪费大量的人力资源、财力资源,并且控制系统也更加单一化。而采用自动控制的办法、既节省了人力资源,更体现了与时俱进的思想、世界在进步、而这种进步就该体现在各个方面。

参考文献[1]陈明荧.8051单片机课程设计实训教材[M].北京:清华大学出版社,2003.[2]徐新艳.单片机原理、应用与实践[M].北京:高等教育出版社,2005.[3]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:清华大学出版社,2002.[4]王千.实用电子电路大全[M].电子工业出版社,2001.[5]冯博琴.微型计算机原理与接口技术[M].北京:清华大学出版社,2004.附录A硬件原理图

附录B程序清单#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535#include<intrins.h>sbitbeep=P1^4;//蜂鸣器IO口定义sbitrelay1=P1^3;//温度报警继电器IO口定义sbitrelay2=P1^6;//湿度报警继电器IO口定义uchara_a;ucharflag_en=1;bitflag_300ms;//按键的IO变量的定义ucharkey_can; //按键值的变量ucharmenu_shudu=20;//用来控制连加的速度ucharmenu_1;//菜单设计的变量uintt_high=30; //温度报警参数uints_high=30; //湿度报警参数ucharkey_time,flag_value;//用做连加的中间变量bitkey_500ms;/****************************************************************名称:delay_1ms()*功能:延时1ms函数*输入:q*输出:无****************************************************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}sbitdht11=P1^5; //温度传感器IO口定义uchartable_dht11[5]={1,2,3,4,5};#defineRdCommand0x01//定义ISP的操作命令#definePrgCommand0x02#defineEraseCommand0x03#defineError1#defineOk0#defineWaitTime0x01//定义CPU的等待时间sfrISP_DATA=0xe2;//寄存器申明sfrISP_ADDRH=0xe3;sfrISP_ADDRL=0xe4;sfrISP_CMD=0xe5;sfrISP_TRIG=0xe6;sfrISP_CONTR=0xe7;/*================打开ISP,IAP功能=================*/voidISP_IAP_enable(void){ EA=0;/*关中断*/ ISP_CONTR=ISP_CONTR&0x18;/*0001,1000*/ ISP_CONTR=ISP_CONTR|WaitTime;/*写入硬件延时*/ ISP_CONTR=ISP_CONTR|0x80;/*ISPEN=1*/}/*===============关闭ISP,IAP功能==================*/voidISP_IAP_disable(void){ ISP_CONTR=ISP_CONTR&0x7f;/*ISPEN=0*/ ISP_TRIG=0x00; EA=1;/*开中断*/}/*================公用的触发代码====================*/voidISPgoon(void){ ISP_IAP_enable();/*打开ISP,IAP功能*/ ISP_TRIG=0x46;/*触发ISP_IAP命令字节1*/ ISP_TRIG=0xb9;/*触发ISP_IAP命令字节2*/ _nop_();}/*====================字节读========================*/unsignedcharbyte_read(unsignedintbyte_addr){ EA=0; ISP_ADDRH=(unsignedchar)(byte_addr>>8);/*地址赋值*/ ISP_ADDRL=(unsignedchar)(byte_addr&0x00ff); ISP_CMD=ISP_CMD&0xf8;/*清除低3位*/ ISP_CMD=ISP_CMD|RdCommand;/*写入读命令*/ ISPgoon();/*触发执行*/ ISP_IAP_disable();/*关闭ISP,IAP功能*/ EA=1; return(ISP_DATA);/*返回读到的数据*/}/*==================扇区擦除========================*/voidSectorErase(unsignedintsector_addr){ unsignedintiSectorAddr; iSectorAddr=(sector_addr&0xfe00);/*取扇区地址*/ ISP_ADDRH=(unsignedchar)(iSectorAddr>>8); ISP_ADDRL=0x00; ISP_CMD=ISP_CMD&0xf8;/*清空低3位*/ ISP_CMD=ISP_CMD|EraseCommand;/*擦除命令3*/ ISPgoon();/*触发执行*/ ISP_IAP_disable();/*关闭ISP,IAP功能*/}/*====================字节写========================*/voidbyte_write(unsignedintbyte_addr,unsignedcharoriginal_data){ EA=0; SectorErase(byte_addr); ISP_ADDRH=(unsignedchar)(byte_addr>>8);/*取地址*/ ISP_ADDRL=(unsignedchar)(byte_addr&0x00ff); ISP_CMD=ISP_CMD&0xf8;/*清低3位*/ ISP_CMD=ISP_CMD|PrgCommand;/*写命令2*/ ISP_DATA=original_data;/*写入数据准备*/ ISPgoon();/*触发执行*/ ISP_IAP_disable();/*关闭IAP功能*/ EA=1;}/******************把数据保存到单片机内部eeprom中******************/voidwrite_eeprom() //保存数据{ SectorErase(0x2000); byte_write(0x2000,t_high); byte_write(0x2002,s_high); byte_write(0x2055,a_a); }/******************把数据从单片机内部eeprom中读出来*****************/voidread_eeprom() //读出保存数据{ t_high=byte_read(0x2000); s_high=byte_read(0x2002); a_a=byte_read(0x2055);}///**************开机自检eeprom初始化*****************/voidinit_eeprom() ////开始初始化保存的数据{ read_eeprom(); //读出保存数据 if(a_a!=84) //新的单片机初始单片机内问eeprom { t_high=40; s_high=78; a_a=84; write_eeprom(); //保存数据 } }ucharcodetable_num[]="0123456789abcdefg";sbitrs=P1^0; //寄存器选择信号H:数据寄存器 L:指令寄存器sbitrw=P1^1; //寄存器选择信号H:数据寄存器 L:指令寄存器sbite=P1^2; //片选信号下降沿触发/*********************************************************************名称:delay_uint()*功能:小延时。*输入:无*输出:无***********************************************************************/voiddelay_uint(uintq){ while(q--);}/*********************************************************************名称:write_com(ucharcom)*功能:1602命令函数*输入:输入的命令值*输出:无***********************************************************************/voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0;}/*********************************************************************名称:write_data(uchardat)*功能:1602写数据函数*输入:需要写入1602的数据*输出:无***********************************************************************/voidwrite_data(uchardat){ e=0; rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; }/***********************lcd1602上显示特定的字符****0XDF度********************/voidwrite_zifu(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(date); }/***********************lcd1602上显示两位十进制数************************/voidwrite_sfm2(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/10%10); write_data(0x30+date%10); }/***********************lcd1602上显示这字符函数************************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }/***********************lcd1602初始化设置************************/voidinit_1602() //lcd1602初始化{ write_com(0x38); write_com(0x0c); write_com(0x06); delay_uint(1000); write_string(1,0,"Wendu:00WH:00"); write_string(2,0,"Shidu:00%SH:00%"); write_zifu(1,8,0xdf); //显示度 write_sfm2(2,6,table_dht11[0]);//显示湿度 write_sfm2(1,6,table_dht11[2]); //显示温度 write_sfm2(1,13,t_high); //显示温度 write_sfm2(2,13,s_high);//显示湿度 }/*************定时器0初始化程序***************/voidtime_init() { EA=1; //开总中断 TMOD=0X01; //定时器0、定时器1工作方式1 ET0=1; //开定时器0中断 TR0=1; //允许定时器0定时}/********************独立按键程序*****************/ucharkey_can; //按键值voidkey() //独立按键程序{ staticucharkey_new; key_can=20;//按键值还原 P3|=0xf0; if((P3&0xf0)!=0xf0) //按键按下 { delay_1ms(1); //按键消抖动 if(((P3&0xf0)!=0xf0)&&(key_new==1)) { //确认是按键按下 key_new=0; switch(P3&0xf0) { case0xe0:key_can=1;break; //得到k1键值 case0xd0:key_can=2;break; //得到K2键值 case0xb0:key_can=3;break; //得到k3键值 } beep=0; delay_1ms(50); beep=1; } } else key_new=1; }/****************按键显示函数***************/voidkey_with(){ if(key_can==1) //设置键 { menu_1++; if(menu_1>2) { menu_1=0; init_1602();//lcd1602初始化 } } if(menu_1==1) //设置高温报警 { if(key_can==2) { t_high++; //设置高温值加1 if(t_high>99) t_high=99; } if(key_can==3) { t_high--; //设置高温值减1 if(t_high<=1) t_high=1; } write_sfm2(1,13,t_high); //显示温度 write_sfm2(2,13,s_high);//显示湿度 write_com(0x80+12);//将光标移动到秒个位 write_com(0x0f);//显示光标并且闪烁 write_eeprom(); //保存数据 } if(menu_1==2) //设置高湿报警 { if(key_can==2) { s_high++; //设置高湿值加1 if(s_high>99) s_high=99; } if(key_can==3) { s_high--; //设置高湿值减1 if(s_high<=1) s_high=1; } write_sfm2(1,13,t_high); //显示温度 write_sfm2(2,13,s_high);//显示湿度 write_com(0x80+0x4

温馨提示

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

评论

0/150

提交评论