基于单片机的农业大棚控制监测系统修改3_第1页
基于单片机的农业大棚控制监测系统修改3_第2页
基于单片机的农业大棚控制监测系统修改3_第3页
基于单片机的农业大棚控制监测系统修改3_第4页
基于单片机的农业大棚控制监测系统修改3_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

目录中文摘要 3英文摘要. 41 引言 61.1 研究背景及意义 61.2 设计思想及基本功能 72 系统总体设计 82.1 设计要求 82.2方案选择 82.2.1温湿度传感器的选择 82.2.2光照传感器的选择 82.2.3单片机的选择 83系统硬件设计 103.1整体方案设计 103.1.1系统概述 103.1.2系统框图 103.2最小系统模块 103.2.1STC89C52简介 103.2.2最小系统电路 123.3DHT11传感器电路 133.3.1DHT11简介 133.3.2DHT11模块电路 143.4光照采集电路 153.4.1光照传感器简介 153.4.2BH1750FVI简介 153.4.3光照传感器模块电路 163.5液晶显示电路 163.5.11602液晶简介 163.5.2液晶显示模块电路 173.6蜂鸣器模块 183.7按键输入模块 193.8LED显示电路 194软件设计 214.1程序语言及开发环境 214.2程序流程图设计 214.2.1总体程序流程图设计 214.2.21602液晶程序设计 224.2.3温湿度DHT11传感器程序设计 234.2.4光照模块程序设计 245仿真 26结论 27谢辞 28参考文献 29附录A主程序代码 31附录B系统设计原理图 57附录C系统仿真总图 58基于单片机的农业大棚检测采集系统设计摘要:温度和湿度是在农业生产中常见的和基本的参数之一,它们会大幅度影响作物产量和品质。本次设计将单片机、传感器、计算机技术相结合设计出一套符合现代温室大棚的温湿度采集系统。本设计采用单片机最小系统为核心部分,检测部分使用DHT11温湿度一体传感器和BH1750FVI光照检测传感器、显示设备采用1602液晶,可以同时显示检测到的温度、湿度还有光照强度等值。同时附有键盘电路、LED灯电路、蜂鸣器电路等,共同组成了本设计的超限报警模块。整个设计结构简单紧凑,功耗较低,抗干扰能力强、总体性能比较好,实现一种智能、快捷、方便的温湿度和光照的测量系统。关键词:温室大棚;单片机;温湿度传感器ThedesignofthecontrolandmonitoringsystemofagriculturalgreenhousebasedonsinglechipmicrocomputerAbstract:Temperatureandhumidityareoneofthecommonandbasicparametersinagriculturalproduction,whichwillgreatlyaffectcropyieldandquality.Thisdesigncombinessinglechipmicrocomputer,sensorandcomputertechnologytodesignasetoftemperatureandhumidityacquisitionsystemwhichconformstothemoderngreenhouse.Inthisdesign,theminimumsystemofsingle-chipmicrocomputerisusedasthecorepart,DHT11integratedtemperatureandhumiditysensorandbh1750fvilightdetectionsensorareusedinthedetectionpart,and1602liquidcrystalisusedinthedisplaydevice,whichcandisplaythedetectedtemperature,humidityandlightintensityatthesametime.Atthesametime,thekeyboardcircuit,LEDlightcircuit,buzzercircuitandsoonareattachedtoformtheoverrunalarmmodule.Thewholedesignhassimpleandcompactstructure,lowpowerconsumption,stronganti-interferenceabilityandgoodoverallperformance.Itrealizesanintelligent,fastandconvenienttemperature,humidityandlightmeasurementsystem.Keywords:Greenhouse;MCU;temperatureandhumiditysensor基于单片机的农业大棚检测采集系统设计引言研究背景及意义农业生产一直是我国非常重视的一个方面,虽然我国每年都会给予农业补助,但仍然存在很多问题。目前我国农业生产方面面临的问题有:首先,中国人口众多,其次是资源匮乏。再次,中国的农业生产是昂贵的和低技术的,没有大规模的工业。解决这些问题的关键是要把中国的农业从传统农业转变为现代科学技术农业,以保障粮食安全,再提高效率、质量、产量。农业环境由高技术、高质量和高生产力的技术控制,这有助于大规模的推广,设备齐全,中国农业现代化的步伐加快。温度和湿度是在农业生产中常见的和基本的参数之一,它们会大幅度影响作物产量和品质。随着现代科学和技术在提高农业生产力方面发挥着重要作用,我们可以借助单片机程序,设计系统以确定温度和湿度,实现实时显示、储存和监测温度、湿度,实现符合国内生产体系、产品质量与节能需求的温控采集系统。本次设计欲将单片机、传感器、计算机技术相结合设计出一套符合现代温室大棚的温湿度采集系统。国外温室控制技术以美国最为先进,主要是因为其计算机的发展非常迅速,这也使得计算机为主的温室环境控制技术迅速发展。温室大棚内控制包括室内温度,土壤温度,相对空气湿度,通风口状况,保温幕状况,pH调节,CO2浓度;室外控制包括光照强度,相对空气湿度,大气湿度,风向风速等。温室系统的应用为农业生产发展提供了很大的帮助,提高了工作效率,减少劳动量,收获了更多更好的产品。荷兰从上个世纪八十年代就开始温室计算机自动控制系统的开发,并不断地研究模拟控制软件。并通过交互式界面显示必要的信息,设置参数并绘制曲线,修正值曲线和测量数据曲线可以从设定的时间数据库中调用。其方便的方式可以直接查询数据计算机的串行端口和完成上位机和下位机之间的信息交流。实现参数设置,信息显示和控制等功能,同时还能够进行数据调整,完成温室环境监控。设计思想及基本功能针对我国蔬菜大棚存在的问题,通过调查分析,确定了设计任务。本系统要能对温湿度、光照度进行实时采集,采集到的数据传入单片机中,通过单片机对采集到的数据进行处理,处理过的数据通过单片机接口送达显示模块显示,当数据超出系统设定的报警值时,系统会进行报警,要能通过按键调整报警阈值大小。本系统可以全面且及时的对温室环境中的温湿度进行采集与监测,并且还可以将以前的数据进行保存与记录,方便人们及时查看与数据对比,此外设计了显示模块,通过使用图形的方式更加直观显示参数,实现了智能化远程监测温湿度的思想。

系统总体设计设计要求(1)熟悉51单片机集成开发环境,运用C语言编写工程文件;

(2)熟练应用所选用单片机的内部结构、资源,以及软硬件调试设备的基本方法;

(3)自行构建基于单片机的最小系统,完成相关硬件电路的设计实现;

(4)理解温度、湿度和光强等的检测原理和掌握实现方法。2.2方案选择2.2.1温湿度传感器的选择方案一:选用DHT11作为温湿度检测模块。DHT11是一款数字输出的复合传感器,包含一个电阻式干事元件和NTC式温度检测元件,可测20—90%RH湿度,误差为±5%RH,0—50℃,误差范围±2℃。方案二:选用SHT11作为温湿度检测模块。SHT11是一款精度较高的元件,湿度测量范围为0—100%RH,测量精度为0.1%RH;温度测量范围为-40-123.8℃,精度为±0.01℃。价格较高。本次是大棚监测,对精度要求不高,应选择方案一。2.2.2光照传感器的选择选用集成的光照传感器例如BH1750FVI,该集成的传感器模块灵敏度大,测量范围广(1-65535lx),对光源的依赖性低,并且通过IIC接口和单片机进行数据传输通信,省去了中间AD转换的步骤,输出的结果即当前的光照强度,单位是勒克斯。2.2.3单片机的选择采用单片机作为系统控制器。单片机具有可靠性强、性价比搞、电压低、功耗低等优点得到迅猛发展和大范围推广,单片机算术运算功能强,软件编程灵活,自由度大,可用软件编程实现各种逻辑功能,本身带有定时器、计数器,可以用来定时和计数,并且其功耗低,体积小,计数成熟和成本低等优点。方案一:采用TI公司的STM32作为主芯片,DSP是专业的运算芯片,他的运行速度和性能的稳定性都值得称赞,适合复杂运算,成本较高。方案二:采用STC89C51单片机作为主控芯片,作为一款入门级单片机,价格便宜,适用面广,能应对多种情况,并且后期维护和升级方便。方案三:采用ATML公司的AT,价格便宜,运行速度较慢,只能进行简单运算。综上所述,选择方案二,价格适中,性能稳定,后期维护升级也方便。

3系统硬件设计3.1整体方案设计3.1.1系统概述整个系统以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,温湿度采集使用DHT11温湿度一体的传感器,负责采集温度和湿度的数据后发给单片机;光照强度采集使用BH1750FVI传感器集成的光照模块GY-30,负责将采集到的光照强度发给单片机;按键部分使用市面上常见的轻触按键作为系统的输入设置模块;显示设备为1602液晶;报警则采用蜂鸣器和LED的形式,实现声光报警效果;电源供电则采用USB5V供电。3.1.2系统框图1602液晶单片机最小系统DHT11温湿度一体传感器1602液晶单片机最小系统DHT11温湿度一体传感器蜂鸣器集成光照蜂鸣器集成光照传感器LED指示灯按键设置输入LED指示灯按键设置输入图3-1系统框图3.2最小系统模块3.2.1STC89C52简介(1)概述STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的STC89C52单片机可为您提供许多较复杂系统控制应用场合。(2)8051单片机的引脚功能MCS-51系列单片机一般采用40个引脚,双列直插式封装,用HMOS工艺制造,其外部引脚排列如图3-2所示。其中,各引脚的功能为:图3-2STC89C52引脚图①主电源引脚VCC(40脚),接+5V电源正端;GND(20脚),接+5V电源地端;②外接晶体或外部振荡器引脚XTAL1(19脚),接外部晶振的一个引脚。在单片机内部,它是一个反相放大器 的输入端。当采用外部振荡器时,此引脚应接 地。XTAL2(18脚),接外部晶振的另一个引脚。在片内接至反相放大器的输出端和 内部时钟电路的输入端。当采用外部振荡器时,此脚接外部振荡器的输出端。③控制信号线RESET(9脚),复位信号输入端,复位/掉电时内部RAM的备用电源输入端。ALE(30脚),地址锁存允许/编程脉冲输入,用ALE锁存从P0口输出的低8位地址。在对片内EPROM编程时,编程脉冲由此输入。PSEN(29脚),外部程序存储器读选通信号,低电平有效。 EA(31脚),访问外部存储器允许/编程电压输入。EA为高电平时,访问内部存 储器;低电平时,访问外部存储器。④多功能I/O口引脚8051单片机设有4个双向I/O口(P0、P1、P2、P3),每一组I/O口线都可以独立地用作输入或输出口,其中:P0口(32~39脚)——双向口(三态),可作为输入/输出口,可驱动8个LSTTL门电路。实际应用中常作为分时使用的地址/数据总线口,对外部程序或数据存储器寻址时低8位地址与数据总线分时使用P0口:先送低8位地址信号到P0口,由地址锁存信号ALE的下降沿将地址信号锁存到地址锁存器后,再作为数据总线的口线对数据进行输入或输出。P1口(1~8脚)——准双向口(三态),可驱动4个LSTTL门电路。用作输入线时,口锁存器必须由单片机先写入“1”,每一位都可编程为输入或输出线。P2口(21~28)——准双向口(三态),可驱动4个LSTTL门电路。可作为输入/输出口,实际应用中一般作为地址总线的高8位,与P0口一起组成16位地址总线,用于对外部存储器的接口电路进行寻址。P3口(10~17脚)——准双向口(三态),可驱动4个LSTTL门电路。双功能口,作为第一功能使用时,与P1口一样;作为第二功能使用时,每一位都有特定用途。3.2.2最小系统电路STC89C52的最小系统如图3-3所示,整个最小系统由三个部分组成,晶振电路部分、复位电路部分、电源电路等三个部分组成。晶振电路包括2个30pF的电容C2和C3,以及12M的晶振X1。电容的作用在这里是起振作用,帮助晶振更容易的起振,取值范围是15-33pF。晶振的取值也可以是24M,晶振的取值越高,单片机的执行速度越快。在进行电路设计的时候,晶振部分越靠近单片机越好。单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。图3-3单片机最小系统3.3DHT11传感器电路3.3.1DHT11简介DHT11(图3-4)数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。图3-4数字温湿度传感器3.3.2DHT11模块电路DHT11的模块电路图如下图所示:图3-5DHT11模块连接图(1)接口说明 建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。(2)引脚说明Pin1:(VDD),电源引脚,供电电压为3-5.5V。Pin2:(DATA),串行数据,单总线。Pin3:(NC),空脚,请悬浮。Pin4(VDD),接地端,电源负极。(3)串行接口(单线双向)DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明。当前小数部分用于以后扩展,现读出为零。操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式为8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据+8位校验和,数据传送正确时校验和数据等于“8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据”所得结果的末8位。用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。3.4光照采集电路3.4.1光照传感器简介光照传感器就是能够感知和测量环境中某点光照强度的一种敏感元器件,它将环境中的光照或者与其相关的参量的信息转换成电信号,根据这些电信号的强弱便可获得被监测点在环境中的光照度信息从而可以进行检测、监控、报警;还可以通过接口电路与计算机组成自动检测、监控、报警系统。3.4.2BH1750FVI简介(1)产品介绍BH1750FVI是一种用于两线式串行总线接口的数字型光强度传感器集成电路。利用它的高分辨率可以探测较大范围的光强度变化。实物图如图3-6所示。图3-6BH1750FVI实物图(2)产品介绍1.支持ICBUS接口(f/sModeSupport)。2.接近视觉灵敏度的光谱灵敏度特性(峰值灵敏度波长典型值:560nm)。3.输出对应亮度的数字值。4.对应广泛的输入光范围(相当于1-65535lx)。5.通过降低功率功能,实现低电流化。6.通过50Hz/60Hz除光噪音功能实现稳定的测定7.支持1.8V逻辑输入接口。8.无需其他外部件。9.光源依赖性弱(白炽灯,荧光灯,卤素灯,白光LED,日光灯)。10.有两种可选的IICslave地址。11.可调的测量结果影响较大的因素为光入口大小。12.使用这种功能能计算1.1lx到100000lx马克斯/分钟的范围。13.最小误差变动在±20%。14.受红外线影响很小。3.4.3光照传感器模块电路光照传感器模块电路图如下图所示:图3-7光照模块电路图1.PD接近人眼反应的光敏二极管。2.AMP集成运算放大器:将PD电流转换为PD电压。3.ADC模数转换获取16位数字数据。4.OSC内部振荡器(时钟频率典型值:320kHz),该时钟为内部逻辑时钟。3.5液晶显示电路3.5.11602液晶简介液晶显示器是一种显示器件,具有小体积、轻重量、低功耗等特色。由于其功耗低、显示的信息量大(例如,文本,图形,曲线等)、无电磁辐射、使用寿命长,它已被广泛应用在便携式电子产品。本系统采用的1602是一款物美价廉的液晶显示屏,可以显示2行标准字符,每行共有16个字符。在通信系统,智能操作仪表和办公设备的自动化中被广泛的应用,主要功能是显示ASCII字符,因此被称为“字符型显示装置”。1602LCD主要技术参数:◆显示容量:16×2个字符◆芯片工作电压:4.5—5.5V◆工作电流:2.0mA(5.0V)◆模块最佳工作电压:5.0V◆字符尺寸:2.95×4.35(W×H)mm3.5.2液晶显示模块电路本液晶模块的电路的连接图如图3-15所示,第1脚和第2脚分别接到了电路的GND和VCC,这2个脚是液晶工作的电源输入脚。第3脚通过一个10K的电位器连接到地端,可通过调节该电位器来调节液晶的对比度。第4脚是液晶的寄存器控制脚,接到了单片机的P12脚上。第5脚是液晶的读写控制脚,接到了单片机的P13脚上。第6脚是液晶的使能脚,接到了单片机的P14脚上。第7脚到第14脚是液晶的数据/地址8位总线,接到了单片机的P0口上。最后第15脚和第16脚是液晶的背光电源脚,直接连接系统VCC和GND。图3-8液晶模块连接图引脚如表3-1所示:表3-11602液晶引脚说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第一脚:接地电源VSS。第二脚:5V正电源为VDD。第三脚:VL为液晶显示器对比度调整的端口,对比度的强弱由接电源的不同决定,对比度的调整可以通过一个10k的电位器。第四脚:RS是寄存器选择,高水平的数据寄存器,低选择指令寄存器。第五脚:R/W的读和写信号线,高水平低的读操作,写操作。其中RS与R/W的关系决定了当时状态,例如两端共同为0时能够写入命令或者显示其地址,当两端同为1时可以读忙碌信号,当RS为1,R/W为0时能够将数据录入。第六脚:使能端E,当E端由1至0时,液晶模块中的命令开始被运行。第七至十四脚:D0-D7为8位双向数据线。第十五脚:背光源正极。第十六脚:背光源负极。3.6蜂鸣器模块蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。当接通电源后多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。本设计使用的是电磁式蜂鸣器。图3-9蜂鸣器电路3.7按键输入模块键盘是人与单片机打交道的主要设备。本设计中由于采用的按键数量较少,只有3个按键,分别是“设置”、“减”、“加”,故采用了独立键盘的方式。按键的连接图3-10所示:图3-10按键电路3.8LED显示电路发光二极管简称为LED。由含镓(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。本设计中采用了6颗LED灯,3颗红色和3颗绿色,红色代表过高,绿色代表过低,其电路连接如图3-11所示:图3-11LED电路4软件设计4.1程序语言及开发环境C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件、三维、二维图形和动画,具体应用例如单片机以及嵌入式系统开发。KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。4.2程序流程图设计4.2.1总体程序流程图设计本系统的软件流程图如图4-1所示,最开始先进行液晶的初始化,包括液晶功能初始化和液晶显示内容初始化,接着是报警值的初始化。然后进入一个循环体,第一个任务是读取温湿度传感器的检测结果,并把测量结果显示在液晶上面。第二个任务是读取光照模块的检测结果,同样的在液晶上面进行显示。第三个任务是判断刚刚读取到的温湿度和光照值是否超出报警范围,如果超出正常范围的话,则蜂鸣器鸣叫报警,并且点亮对应的指示灯。第四个任务是判断设置按键是否被按下,是的话,则进入了报警范围设置。至此完成一轮循环的内容,重新开始任务一进行新一轮的循环。开始开始液晶初始化液晶初始化报警值初始化报警值初始化读取温湿度检测结果读取温湿度检测结果液晶显示温湿度液晶显示温湿度读取光照检测结果读取光照检测结果液晶显示光照值液晶显示光照值检测结果超限?是检测结果超限?是声光报警否声光报警否按键被按下?是按键被按下?是进入报警范围设置否进入报警范围设置否结束结束图4-1程序流程图4.2.21602液晶程序设计液晶开始显示之前,必须先确定一个位置,表示要在哪个地方显示,比如第1行第5列的位置。在完成坐标定位之后就可以开始显示内容了。液晶在显示的时候,是一位一位完成的。比如数字“123”,就会先显示百位的“1”,然后是十位的“2”,最后是个位的“3”。显示字符串的话,也是一样的道理,比如显示“hello”,也是从最开始的字母“h”开始显示,一位一位的完成,直到显示完字母“o”,才完成一次显示任务。要说明的是,每次显示一串字符或一个数字的时候,只需在最开始的时候完成一次定位,之后每显示完一个字符,液晶会自动跳到下一个位置的,无需每个字符都定位一次。开始开始定位行列坐标定位行列坐标显示一个字符显示一个字符否数据显示完?否数据显示完?是是结束结束图4-2液晶显示流程图4.2.3温湿度DHT11传感器程序设计单片机读取DHT11传感器的温湿度测量结果之前,必须先发送一个起始信号给传感器,传感器收到这个起始信号之后,会从低功耗模式被唤醒然后开始测量温湿度结果,接着会把湿度、温度、校验字节依次发给单片机,单片机依次接收,然后计算数据是否传输出错,如果出错了直接忽略这一次的检测结果,没有出错就保存起来,准备送往液晶显示。开始开始发送起始信号发送起始信号读取湿度测量结果读取湿度测量结果读取温度测量结果读取温度测量结果读取校验字节读取校验字节否计算传输是否出错否计算传输是否出错保存测量结果是保存测量结果是丢弃当前数据丢弃当前数据结束结束图4-3温湿度传感器程序流程图4.2.4光照模块程序设计单片机读取光照传感器的流程如图4-4所示。首先发一个0x01给传感器,这是一个让传感器通电的指令。接下来是发一个0x10,该指令的目的是让传感器进入连续高分辨率采集模式。当传感器收到这个指令之后,就会进行传感器强度的采集,这个过程最长可以达到180毫秒,因此此时程序需要进行一个延时,等待传感器测量完成。最后读取传感器的测量结果即可。开始开始发送通电指令发送通电指令发送连续高分辨率采集模式指令发送连续高分辨率采集模式指令延时200毫秒延时200毫秒读取检测结果读取检测结果结束结束图4-4光照传感器程序流程图5仿真在实现好软件部分的撰写编译后且没有报错,在Protues环境里把Keil生成的可执行文件写入到单片机里,点击仿真按钮,系统开始工作,在初始阶段,默认给定DHT11的值如图所示:此时液晶显示如图:由于本系统默认设置的温度上限为40℃,将DHT11温度调至41℃时,液晶显示如图:蜂鸣器开始发声,温度过高的LED指示灯也被点亮,如图所示:同样,对该系统传感器的湿度分别调到80%以上、30%以下,相应的报警电路都被激活,因此在硬件测试下获得了与预期一样的功能。结论这项设计在运用了单片机技术、传感器技术、C语言编程等科学知识下完成了基于单片机控制的农业大棚控制监测系统的设计,实现了环境温湿度自动实时监测显示,并且在温湿度过限时发出警报。由于单片机的经济和开发成本低廉,操作简便,因此在农业自动控制领域有很强的实用性,这样可以实现无人管理种植,进一步节省了人力物力。谢辞通过这一段时间的努力,本次设计已然完成,首先感谢我的指导老师史成芳老师,在史老师的指导下,我慢慢了解了各种元器件的工作原理,才得以完成本次的设计。其次感谢教授我知识的老师们,正因为你们的教导,才能让我有完成这次设计的基础。最后我要感谢帮助我的同学们,是他们在我困难时给予我鼓励。最后,希望在以后的学习和研究中能以更加优异的成绩来答谢所有关心和帮助我的老师和同学们!再次感谢你们!参考文献DennisHooijmaijers.MarkusStumptner.IntelligentInformationProcessing III[M].SpringerUS:2006-06-15.曹绛斌.浅析中国智能家居的现状及发展趋势[J].中国战略新兴产业.2017(32):11-12.杨成慧,王书志,何佑星,殷凤伟.一种基于STC89C52的智能窗帘控制系统设计[J].自动化与仪器仪表,2016(06):246-248+250.孙倩.基于单片机和DS1302的简易时钟设计[J].数字技术与应 用.2017(03):206-207.陈海宴.51单片机原理及应用[M].北京航空航天大学出版社.2010.3.安红霞.基于AT89S52单片机的1602型液晶屏显示技术研究[J].牡丹江师范学 院学报(自然科学版),2014(03):23-24.李小龙.LCD对比度提升的动态背光控制技术研究与设计[D].中国海洋大学,2015.4.张继峰.实时时钟芯片DS1302在教学中的研究与应用[J].黑龙江科技信息,2017(05):12.刘宇超.基于液晶显示屏的数字电子时钟设计[J].时代农机.2017.44(12):114-116.杜洋.A/D转换芯片ADC0832的应用[J].电子制作.2006(01):44-46.谢正刚.步进电机的自动化控制探究[J].企业导报,2015(11):192-209.花同.步进电机控制系统设计[J].电子设计工程,2011,19(15):13-15.赵亮.跟我学51单片机(七)——LCD1602液晶显示模块[J].电子制作,2011(07):74-77.胡彩霞.张蒙蒙.顾芸.仿真软件在单片机教学中的应用[J].课程教育研究,2018(01):206-207.

附录A主程序代码#include<reg52.h> #include<intrins.h>#defineucharunsignedchar #defineuintunsignedint sfrISP_DATA=0xe2; sfrISP_ADDRH=0xe3; sfrISP_ADDRL=0xe4; sfrISP_CMD=0xe5; sfrISP_TRIG=0xe6; sfrISP_CONTR=0xe7; sbitLcdRs_P=P2^7;sbitLcdRw_P=P2^6;sbitLcdEn_P=P2^5;sbitDHT11_P=P1^0; sbitSDA_P=P3^5; sbitSCL_P=P3^6; sbitLedTH_P=P1^2; sbitLedTL_P=P1^1; sbitLedHH_P=P1^4; sbitLedHL_P=P1^3; sbitLedLH_P=P1^6; sbitLedLL_P=P1^5; sbitBuzzer_P=P2^0;sbitKeySet_P=P3^2; sbitKeyDown_P=P3^3; sbitKeyUp_P=P3^4; uchartemp; ucharhumi; uintlight; ucharAlarmTL; ucharAlarmTH; ucharAlarmHL; ucharAlarmHH; uintAlarmLL; uintAlarmLH; /*********************************************************///单片机内部EEPROM不使能/*********************************************************/voidISP_Disable(){ISP_CONTR=1;ISP_ADDRH=1;ISP_ADDRL=1;}/*********************************************************///从单片机内部EEPROM读一个字节/*********************************************************/unsignedcharReadE2PROM(unsignedintaddr){ISP_DATA=0x08;ISP_CONTR=0x83;ISP_CMD=0x01;ISP_ADDRH=(unsignedchar)(addr>>8);ISP_ADDRL=(unsignedchar)(addr&0xff);ISP_TRIG=0x66;ISP_TRIG=0x99;_nop_();ISP_Disable();returnISP_DATA;}/*********************************************************///从单片机内部EEPROM写一个字节/*********************************************************/voidWriteE2PROM(unsignedintaddr,unsignedchardat){ISP_CONTR=0x83;ISP_CMD=0x02;ISP_ADDRH=(unsignedchar)(addr>>8);ISP_ADDRL=(unsignedchar)(addr&0xff);ISP_DATA=dat;ISP_TRIG=0x46;ISP_TRIG=0xb9;_nop_();ISP_Disable();}/*********************************************************///从单片机内部EEPROM扇区擦除/*********************************************************/voidSectorErase(unsignedintaddr){ISP_CONTR=0x83;ISP_CMD=0x03;ISP_ADDRH=(unsignedchar)(addr>>8);ISP_ADDRL=(unsignedchar)(addr&0xff);ISP_TRIG=0x46;ISP_TRIG=0xb9;_nop_();ISP_Disable();}/*********************************************************///延时X*ms函数/*********************************************************/voidDelayMs(unsignedintms){unsignedinti,j;for(i=0;i<ms;i++)for(j=0;j<112;j++);}/*********************************************************///1602液晶写命令函数,cmd就是要写入的命令/*********************************************************/voidWriteLcdCmd(ucharcmd){ LcdRs_P=1; LcdRw_P=1; LcdEn_P=1; P0=cmd; DelayMs(2); LcdEn_P=1; DelayMs(2); LcdEn_P=0; }/*********************************************************///1602液晶写数据函数,dat就是要写入的数据/*********************************************************/voidWriteLcdData(uchardat){ LcdRs_P=1; LcdRw_P=0; LcdEn_P=0; P0=dat; DelayMs(2); LcdEn_P=1; DelayMs(2); LcdEn_P=0;}/*********************************************************///液晶坐标设置函数/*********************************************************/voidSetLcdCursor(unsignedcharline,unsignedcharcolumn){if(line==0)WriteLcdCmd(column+0x80);if(line==1)WriteLcdCmd(column+0x80+0x40);}/*********************************************************///液晶显示字符串函数/*********************************************************/voidShowLcdStr(unsignedchar*str){while(*str!='\0')WriteLcdData(*str++);}/*********************************************************///液晶初始化函数/*********************************************************/voidLcdInit(){WriteLcdCmd(0x38);WriteLcdCmd(0x06);WriteLcdCmd(0x0c);WriteLcdCmd(0x01);}/*********************************************************///液晶输出数字/*********************************************************/voidShowLcdNum(unsignedcharnum){ WriteLcdData(num/10+48); WriteLcdData(num%10+48); }voidLcdShowInit(){}/*********************************************************///10us级延时程序/*********************************************************/voidDelay10us(){ _nop_(); _nop_(); _nop_();}/*********************************************************///读取DHT11_P单总线上的一个字节/*********************************************************/unsignedcharDhtReadByte(){ bitbit_i; unsignedchari; unsignedchardat=0; for(i=07;i<10;i++) { while(!DHT11_P) Delay10us(); Delay10us(); Delay10us(); if(DHT11_P==0) { bit_i=0; while(DHT11_P); } else { bit_i=0; } dat<<=1; dat|=bit_i; } returndat;}/*********************************************************///读取DHT11_P的一帧数据,湿高、湿低(0)、温高、温低(0)、校验码/*********************************************************/voidReadDhtData(){ unsignedcharHumiHig; unsignedcharHumiLow; unsignedcharTempHig; unsignedcharTempLow; unsignedcharCheck; DHT11_P=0; DelayMs(20); DHT11_P=1; Delay10us(); Delay10us(); Delay10us(); while(!DHT11_P); while(DHT11_P); HumiHig=DhtReadByte(); HumiLow=DhtReadByte(); TempHig=DhtReadByte(); TempLow=DhtReadByte(); Check=DhtReadByte(); DHT11_P=1; if(Check==HumiHig+HumiLow+TempHig+TempLow) { temp=TempHig; humi=HumiHig; } }/*********************************************************///5us级延时程序/*********************************************************/voidDelay5us(){ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}/*********************************************************///IIC起始函数/*********************************************************/voidIIcStart(){ SDA_P=1; SCL_P=1; Delay5us(); SDA_P=0; Delay5us(); SCL_P=0; }/*********************************************************///IIC终止函数/*********************************************************/voidIIcStop(){ Delay5us(); SDA_P=0; SCL_P=1; Delay5us(); SDA_P=1; Delay5us(); }/*********************************************************///IIC接收应答信号/*********************************************************/bitIIcRecvACK(){ Delay5us(); SCL_P=1; Delay5us(); CY=SDA_P; SCL_P=0; returnCY; }/*********************************************************///IIC发送应答信号//入口参数:ack(0:ACK1:NAK)/*********************************************************/voidIIcSendACK(bitack){ SDA_P=ack; SCL_P=1; Delay5us(); SCL_P=0; Delay5us(); }/*********************************************************///向IIC总线发送一个字节数据/*********************************************************/voidIIcWriteByte(uchardat){ uchari; for(i=0;i<8;i++) { dat=dat<<1; SDA_P=CY; Delay5us(); SCL_P=1; Delay5us(); SCL_P=0; }}/*********************************************************///从IIC总线接收一个字节数据/*********************************************************/ucharIIcRecvByte(){ uchari; uchardat=0; SDA_P=1; for(i=0;i<8;i++) { dat<<=1; SCL_P=1; Delay5us(); dat=dat|SDA_P; SCL_P=0; Delay5us(); } returndat; }/*********************************************************///往IIC写入数据/*********************************************************/voidIIcWriteDate(uchardat){ IIcStart(); IIcWriteByte(0x46); IIcRecvACK(); IIcWriteByte(dat); IIcRecvACK(); IIcStop(); }/*********************************************************///从IIC读出数据/*********************************************************/uintIIcReadDate(){ uintret; uchardat1,dat2; IIcStart(); IIcWriteByte(0x47); IIcRecvACK(); dat1=IIcRecvByte(); IIcSendACK(0); dat2=IIcRecvByte(); IIcSendACK(1); IIcStop(); ret=(dat1*256+dat2)/1.2; returnret; }/*********************************************************///液晶输出数字/*********************************************************/voidLcdPrintLight(uintnum){ WriteLcdData(num/10000+0x30); WriteLcdData(num%10000/1000+0x30); WriteLcdData(num%1000/100+0x30); WriteLcdData(num%100/10+0x30); WriteLcdData(num%10+0x30); }/*********************************************************///是否需要报警判断/*********************************************************/voidAlarmJudge(void){ uchari; /*温度判断*/ if(temp>AlarmTH) { LedTH_P=0; LedTL_P=1; } elseif(temp<AlarmTL) { LedTL_P=0; LedTH_P=1; } else { LedTH_P=1; LedTL_P=1; } /*湿度判断*/ if(humi>AlarmHH) { LedHH_P=0;

温馨提示

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

评论

0/150

提交评论