版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)基于单片机的室内无线环境监控系统学院物理与光电工程学院专业电子科学与技术(应用电子方向)年级班别学号学生姓名指导教师2016年6月基于单片机的室内无线环境监控系统基于单片机的室内无线环境监控系统 物理与光电工程学院摘要我们知道温湿度是温室大棚种植里面关键的环境变量,因此对温度和湿度进行监控成为温室大棚种植的重要任务之一。本系统是以温室大棚种植为背景,设计一个基于STC12C560S2单片机的温室内无线环境监控系统,可以远程监控温度和湿度。温湿度传感器DHT21采集到室内的温度和湿度后,通过单总线将数据发送给上位机进行处理。单片机把处理好的数据经过SPI接口传输给无线收发模块NRF905。无线模块将数据进行打包,加上CRC检验码后,放入发送数据寄存器。系统等待NRF905启动发送模式,然后把温室度的数据和接收端的地址一起发送出去。下位机的NRF905无线模块不断地检测空中的电磁波。当接收到与自身的地址相配的地址后,模块开始接收到数据。对数据进行解包,去除CRC检验码后,无线模块把数据存储在数据接收寄存器。下位机通过SPI接口读取数据,将温度和湿度显示在液晶屏上,同时判断是否需要启动报警。系统采用C语言进行编程,同时可以通过按键对温度和湿度的报警范围进行设定。关键字:单片机,无线收发模块,温湿度传感器,室内环境AbstractWeknowthattemperatureandhumidityarekeyenvironmentalvariablessingreenhousesplanting,thereforetomonitortemperatureandhumiditybecomeoneoftheimportanttasksofgreenhousesplanting.Thissystemisbasedonbackgroundofgreenhousesplanting.DesigningawirelessenvironmentmonitoringsystemingreenhousebasedonSTC12C560S2microcontroller.Thissystemcanremotelymonitorandcontroltemperatureandhumidity.AftertemperatureandhumiditysensorsDHT21havecollectedtheindoortemperatureandhumidity,thedataissenttothemastermachineforprocessingthroughthesinglebus.MCUprocessesthedataandthentransmittoNRF905wirelesstransceivermodulethroughSPIinterface.Afterpackagingdataandaddingthecheckcodeintothedata,wirelessmoduleputsthedataintoregister.ThesystemwaitforNRF905startingdeliverymode,andthenthedataofgreenhouseandaddressissenttogethertothereceivingend.TheNRF905wirelessmoduleofslavemachinecontinuouslydetectstheelectromagneticwavesintheair.Whenreceivingmatchingaddress,themodulebegantoreceivedata.TounpackthedataafterremovingCRCcheckcode,thewirelessmodulestoresthedatainthedatareceiveregister.SlavermachinereadsdatafromtheSPIinterface,andthendisplaysthetemperatureandhumidityontheLCDscreen,andjudgeswhethertostartthealarmatthesametime.SystemusestheClanguagetoprogram,andcanbesetalarmrangeoftemperatureandhumiditythroughthebutton.Keywords:Singlechipmicrocomputer,Wirelesstransceivermodule,Temperatureandhumiditysensor,Indoorenvironment目录1绪论 11.1课题研究的背景和意义 11.2我国温室种植的发展及研究现状 11.3论文研究的主要内容 22室内无线环境监控系统总体方案 32.1系统设计的基本思想 32.2系统总体架构 32.3系统软件开发环境 53系统器件方案选择 63.1单片机选型 63.2温湿度传感器的选择 73.3无线收发模块选择 83.4液晶显示屏及稳压器件的选择 94硬件设计 104.1温湿度传感器的电路设计 104.2无线模块电路设计 104.3无线模块的工作方式 114.4液晶显示电路 125系统软件设置 145.1软件设计的总体架构 145.2温湿度传感器程序设计 165.3无线模块程序设计 205.4.1无线模块寄存器配置 225.4.2发送程序设计 245.4.3接收数据程序设计 255.4.4数据显示程序设计 275.4.5报警电路程序设计 29结论 30参考文献 31致谢 321绪论1.1课题研究的背景和意义温室大棚是一项重要的农业基础设施,通过温室给农作物提供适宜的湿度、水分、温度、空气、光照等生长条件,使农作物不受外界天气变化和季节变化的影响。这样不但能提高农作物的产量,而且可以生产反季节的产品。因此提高温室大棚种植技术,生产管理等方面具有重要意义。本文重点研究温室大棚的温湿度远程无线监控方面,旨在提高自动化生产水平,减少人力物力的投入,提高温室大棚的产量[1]。近年来,温室大棚已经逐渐发展到较高的水平,正在往自动化、智能化与网络化的方向发展,为了达到提高温室的环境监控能力的目的。而环境监控是为了对复杂的环境中使用的设备的运行状态进行监测,同时搭配各种环境因素进行监测诊断,从而决定采用何种控制策略和管理决策,以达到更好的经济效益[2]。现有的监测系统大多数使用现场布线的方式,安装工作量较大而且成本较高。这种系统的覆盖范围比较小,而且线路长期工作容易被腐蚀或者老化,引发漏电等安全隐患,局限性明显[3]。将无线通信技术运用在监控方面,可以很好地解决现场布线方式的缺陷。无线技术很多优势,比如实时、低成本和便利等,可以说将无线通信技术应用到温室大棚里面,有助于改进环境监控技术,降低系统成本,提高自动化水平。1.2我国温室种植的发展及研究现状我国人口基数大,还是个农业大国,农业的发展受到很大的重视。传统的耕作方式已经满足不了社会的需求,因此要将现代化的技术运用到传统农业中,提高生产力,提高农产品的产量。这是目前的重点研究方向。而加强温室大棚的管理和控制也是目前研究的重要领域。传统的总线方式系统有很大的局限性,难以适应社会的发展。采用无线通信技术,可以远程数据采集监控,适应未来发展的需求。近年来我国开展了许多对温室的无线传感器和网络技术相结合的探索,取得了一些成就。江苏大学的毛罕平教授等开发了一个温室内的全自动环境控制系统,可以很好地实现对环境因素的综合控制,而且在我国温室环境监控中成功推广。在上海蔬菜高科技推广中心,建造了智能温室两栋,每栋占地一千平方米,每公顷的费用一千二百万元,智能温室主要控制因素有水分、湿度、温度、光照、肥料,并且使用各种小型机械完成施肥、覆膜、松土等功能,达到了国际领先水平。总的来说,国内目前的温室控制技术还不成熟,还处在探索和发展的阶段。智能化、自动化程度相比于国外同类产品有一定的差距,需要进一步加强研究力度,才能取得长远的发展[4]。1.3论文研究的主要内容针对温室大棚种植需要对温度和湿度进行监控的需要,使用STC12C560S2单片机和NRF905无线收发模块,设计集合无线传输、数据处理、液晶显示和声光报警为一体的无线环境监控系统。本文将从以下几个方面进行研究:如何通过程序控制温湿度传感器DHT21,并采集到室内的温度和湿度。SPI通信协议。使用NRF905无线收发模块对采集的数据进行发送与接收。STC12C560S2单片机如何通过程序协调各个模块有序工作。2室内无线环境监控系统总体方案2.1系统设计的基本思想本系统的处理和控制所采用的核心器件都是STC12C560S2单片机,该单片机是STC生产的单时钟/机械周期的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机。它的指令代码完全兼容传统的51单片机,但是速度快8-12倍。内部集成了8路高速10位A/D转换模块,2路PWM,I/O口的资源丰富,因此被广泛地应用于各个领域[5]。系统的组成分为两个部分:数据采集与发送部分和数据接收与显示部分。数据采集由温湿度传感器DHT21负责。这是一款单总线数字传感器,精度高,抗干扰能力强。单片机可以通过一个与DHT21连接的I/O口读取传感器采集到的40位数据,其中前16位是湿度数据,中间16位为温度数据,后8位作为校验码。上位机通过SPI接口将温度和湿度数据传输给NRF905进行打包发送。数据采集与发射部分不断重复采集与发送数据这个过程。与下位机连接的NRF905处于等待接收状态,一旦接收到匹配的地址后,进行数据接收与解包,并通过SPI接口将数据传输给下位机进行处理。下位机将数据显示在LCD1602上,并且检测温湿度是否超过设定范围,以决定是否启动声光报警。数据接收与显示部分不断地重复上述过程。这样整个系统实现了对数据的采集、无线传输、接收与显示,可以实时地远程监控室内的温度和湿度。监控范围可达数百米。2.2系统总体架构整个系统采用模块化的设计理念,其中上位机系统主要有温湿度传感器、无线发射模块和微处理器等主要模块组成,主要负责数据的采集与发送任务。下位机系统主要由无线接收模块、微处理器、液晶显示屏和报警装置等功能模块组成,用来实现数据的接收、显示与报警功能。系统的结构框图如图2.1所示:温湿度传感器温湿度传感器发射处理器发射模块接收处理器显示模块报警装置接收模块图2.1系统总体结构框图系统的主要器件包括单片机微处理器、无线收发系统和采集温室度的传感器。单片机在系统中的功能是数据处理和控制调度。它把温湿度传感器所采集到的数据信号经过处理之后,经过无线收发模块将数据发送出去。接收处理器控制无线模块进行数据接收,并且把接收到的数据通过液晶屏显示出来,同时判断是否要启动声光报警模块。其中传感器和无线收发模块是本系统的关键。传感器的精度与性能是整个系统的稳定性与可靠性的关键。因此,在温湿度传感器采集到准确的室内环境参数的前提下,整个系统才能实现真正意义上的环境监控。无线收发模块是温湿度数据采集与处理显示的桥梁,是实现远程监控室内环境参数的关键部分。从框图可以看出,传感器将采集到的数据传输给微处理器进行处理后,再发送给无线收发模块。无线发射模块将数据打包后,发送匹配地址给接收模块。接收模块只有在检测到与自己的地址相匹配的地址后,才进行数据的接收与数据解包。单片机检测到NRF905已经成功接收到数据后,马上将数据读取出来,进行数据处理,判断温度与湿度是否在允许的范围内,以此决定是否要启动声光报警,同时将温度值与湿度值在液晶屏上面显示出来。温度和湿度的范围可以直接通过按键进行设定,操作简单,使得整个系统更加人性化。2.3系统软件开发环境本系统的软件开发选择的是keilsoftware公司推出的KeiluVision4软件。它几乎支持所有8051内核的单片机,集仿真与调试与一体。在整个项目的软件编写与程序调试过程中,该软件都能满足,因为它集成了编辑器、编译器与仿真器。除此之外,该软件知道汇编和C语言编程,人机交互界面友好,容易学习。因此进行51单片机开发,该软件是首选[6]。在编程语言方面,本系统的程序设计选择C语言进行编写。汇编语言涉及到很多底层的驱动和寄存器读写,编写较为麻烦,而C语言结构性强、可读性强并且容易维护,所以选择C语言能够提供本系统的编程效率[7]。KeiluVision4的使用步骤如下:打开软件,在菜单栏选择“工程”后“新建工程”,选择对应的目标芯片,再配置一下软件。新建一个C语言源文件,保存到工程文件夹内,在文件名后加.c。择左方框中的Target1文件夹展开,选择SoueceGroup1点击鼠标右键,选择增加文件到组,把C语言源文件添加进去。编译项目并且生成可以烧录到单片机存储器内部的HEX文件。STC12系列单片机的内部已经固化了在线可编程系统即ISP,引导固件程序。通过ISP,用户可以很方面地把程序烧录到目标单片机内部。通过ISP,将编译好的项目中的HEX文件下载到单片机中运行验证。值得注意的是,当单片机重新上电之后,它会首先运行内部固化的ISP程序。当重新上电后,单片机检测P3.0引脚是否有有效的程序下载命令,如果有就好下载用户程序,如果没有则跳到单片机内部的程序存储区,运行里面的用户程序。3系统器件方案选择3.1单片机选型51系列单片机以其成本低,功耗低,能满足大多数工业控制和商业运用,因此被广发运用于各个领域,包括科学研究,教育等多方面。本系统的控制与处理的核心是一款STC12C560S2单片机,它也是8051内核的,可以兼容传统的51单片机指令集。随着社会的进步,对于技术的要求也越来越高。特别是对于微处理器,要求其能以更快的速度去处理更大的数据量,而且功耗要越来越低。因此,传统的8051单片机在速度、程序存储空间和功能上,逐渐难以满足这样的需求。一些国内外的研究机构开始对传统的8051单片机进行改进。本系统所使用的STC12C560S2是一款由宏晶科技有限公司研制的增强型51单片机。这款单片机是单时钟/机械周期的,而传统的单片机是12个时钟/机械周期的,所以STC12系列单片机运行速度更快,是传统的51单片机的8-12倍。而且该单片机增加了加密技术,能保护内部分用户程序不被窃取。一般的工业应用,这款单片机都能满足使用要求。虽然功能更加强大了,但是单片机的体积并没发生改变,处理个别引脚的复用功能不同,其他的I/O口跟传统的51单片机完全兼容。它内部集成了许多模块,包括复位电路,看门狗电路,PWM输出和A/D转化电路等。下面是该单片机的主要特性介绍[8]:是传统的51单片机的增强版,功能升级,不但支持先进的指令集,而且还兼容传统的8051单片机的一些指令集。除此之外,内部还加入了硬件乘法和除法指令。单片机工作的频率范围更大,最高可达35MHz。用户的应用程序存储空间为60KB。40个I/O口引脚,大多数都具有复用功能。而且可以设置I/O口的工作模式,比如准双向口/弱上拉输出、强推挽输出、高阻输入和开漏输出等。单片机内集成了1280字节的RAM。比传统的51单片机多出一个16位的定时器,而且两路PCA也可以作为2个16位定时器用。具有可以编程的时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRTZ在P1.0输出时钟。7路外部中断I/O引脚,既兼容了传统51的下降沿中断,还具有支持上升沿触发的PCA模块。具有SPI引脚,支持在线编程功能。两个全双工的UART。P0口的作用主要有两个,一是用作地址或者是数据总线的低8位,另外就是当做普通的I/O口来使用。内部不带弱上拉。P1口的复用功能较多,有ADC转换接口,SPI通讯接口等等。P2口可以作为普通的I/O口来使用,也可以作为高8位的地址指针。P3口有一些重要的复用功能,例如P3.0和P3.1可以作为串行通信的输入输出引脚,P2.3到P2.5引脚可以用作定时器与外部中断的输入端。P4.7是复位引脚。本系统使用的STC12C560S2单片机在上电复位后,各个端口为准双向模式。其中高电平为2V以上,低电平为0.8V以下。3.2温湿度传感器的选择传感器是可以把外界的模拟量通过敏感元件和转换电路,得到可以进行处理的电信号。它属于电子检测设备。从定义上来看,传感器是能够感受规定的被测量并且按照一定的规律转换成可用输出的信号的器件和装置。传感器在生活中随处可见,是自动化控制和智能领域的重要元件[9]。DHT21是奥松公司生产的一款温湿度传感器,属于电容式的。这款温湿度传感器不但功耗低而且传输距离远,还具有自动校准功能[10]。该传感器在使用时要注意两点:一让采样周期大于或者等于最小值才不至于引起错误;二是与单片机的I/O口连接的时候,在连接线小于20米的情况下,最后加一个5K的上拉电阻。DHT21可以同时测温度和湿度,是一款双用的数字温湿度传感器。它具有稳定性好,使用寿命长的优点。元件内部集成了分别用来测湿度和温度的模块,采集湿度的传感器是电容式的,而采集温度的器件是一个NTC测温元件。通过一条DATA线就可以与单片机连接,进行读写操作。从DHT21传输给单片机的数据为40位,其中前16位是湿度值,中间16位是温度值,后8位是校验码。也就是说,该传感器的湿度和温度的分辨率都是16位的。3.3无线收发模块选择收发模块是本系统里面另一个重要的组成部分,它是实现系统的实时监控,无线传输,远程控制等功能的关键。系统的收发模块采用NRF905芯片搭建的一个电路。nRF905射频发射器芯片是由Nordic公司出品的一款低于1GHz无线芯片[11]。NRF905的工作频段有433MHz、868MHz和915MHz,而在我国使用的是433MHz这一个免费的频段。如果不使用模块外部的声表滤波器,可以获得良好的通信效果。无线模块与单片机的通信是通过SPI接口来实现的,通过软件编程可以配置无线模块的通信频道、通信地址和输出功率。它的ShockBurstTM模式可以配置成自动处理发送和接收的数字包字头,增加CRC检验功能,使模块之间更加可靠地完成数据的发送与接收。另外,NRF905的功耗很低,如果以-10dBm的功率向外发送数据,它的工作电流为11mA,而当作接收端时,其工作电流为12.5mA。通过软件设置,可以让NRF905工作在不同模式,其中,空闲模式和掉电模式可以达到降低功耗的目的。NRF905的基本特点如下[12]:可工作在433MHz的免费频段。还可以通过配置,使该模块工作在不同频段,达到多点通信和跳频通信的目的。传输速率高,可高达50kb/s。有效传输距离为300米。采用GFSK调制技术,抗干扰能力强,非常适合在工业控制场合。片内集成了8位与16位的CRC校验硬件,单对多通信的地址控制。工作电压为1.9V-3.6V,待机模式下的工作电流仅为2.5μA,可以实现超低功耗。不同模式的切换时间为650μs。内置SPI接口,通过编程设置通信地址。模块的接口间距为标准的2.54mm,方便安装连接。3.4液晶显示屏及稳压器件的选择 本系统通过液晶屏直接实时显示温度和湿度给用户,这里采用一款1602字符型LCD显示屏。显示数据分为两行,每行16个字符。工作电压为4.5V-5.5V,工作电流为2mA。外围配置简单,价格较便宜,性价比高,因此被广泛的使用在工业设备和教学实验中。 单片机、温湿度传感器、液晶显示等模块的供电为5V,而NRF905的供电电压为3.3V,所以需要对系统的供电电源进行降压后,再对无线模块进行供电。本系统选择的3.3V稳压芯片为AMS1117。在该芯片的输入、输出端加上退耦、滤波电容后就可以为无线模块提供稳定的3.3V电压。4硬件设计4.1温湿度传感器的电路设计温度传感器的供电电源为5V,当连接距离少于20米时,DTH21的DATA引脚通过一个5KΩ的上拉电阻与单片机进行连接。DHT21传感器的引脚特性如表4.1所示:表4.1 DHT21传感器的引脚特性表管脚名称注释1VDD供电3.3-5.5VDC2DATA串行数据,单总线3GND接地,电源负极4NC空脚在使用DHT21的过程中,要注意以下两点:如果器件工作在非规定的范围内,则在湿度的测量过程中可能会造成3%RH左右的短暂性的漂移信号。当返回到正常的工作环境后,器件可以慢慢恢复到校准状态。若传感器长时间工作在非规定的范围,会加速器件的老化。为了使传感器测得的数据更加准确,应确保室内稳定相对稳定,这样才能测出相对准确的湿度值。在器件的放置时,应该使传感器远离发热量大的器件,同时保持传感器外壳良好痛风性。4.2无线模块电路设计无线收发模块是本系统的一个很重要的模块,是两个单片机实现通信的桥梁。采用NRF905来设计,可以满足系统设计的需求。在使用该收发模块时,有以下几点需要特别说明:电源引脚的电压应为1.9V-3.6V。如果超过3.6V,会烧坏模块,所以一般采用3.3V的电源给模块进行供电。模块的13引脚与14引脚要跟整个系统的逻辑地相连接。如果单片机没有集成硬件SPI,可以使用一般的I/O口,模拟SPI的读写时序,从而实现SPI通信。如果使用的微处理器是51系列单片机,模块引脚与P0口相接,需要加10K的上拉电阻,其他接口不需要。如果是与5V的单片机相连,最好加限流电阻,如果与3.3V的单片机,可以直接跟I/O口相连。4.3无线模块的工作方式NRF905有四种不同的工作模式,分别为掉电模式、空闲模式、发送模式和接收模式。前两种是节电模式,后两种是正常模式。通过对TRX_CE、TX_EN和PWR_UP的设置来控制NRF905的工作模式。如表4.2所示:表4.2 NRF905工作模式PWR_UPTX_ENTRX_CE工作模式0XX掉电和SPI编程1X0Standby和SPI编程101RX111TX无线模块工作在ShockBurstTM模式,为了降低功耗,使用模块片内的先入先出堆栈区,将数据从单片机内以高速发送出去。因此,即使是低俗的单片机,数据发送速度也可以非常高。这样数据在空中停留的时间变短,增强了抗干扰能力,提高系统可靠性。由于条件限制,系统还得考虑功耗问题。在此模式下,模块的平均工作电流减少,降低了能耗。NRF905还会自动处理数据包头与CRC校验码。即发送数据时,自动加上数据包头与CRC检验码,在接收数据时,自动去掉数据包头与CRC校验码。数据在发送和接收完成的情况下,DR引脚都会被拉高。NRF905的节能模式分别是关机模式和掉电模式。当模块工作在掉电模式下的时候,电流很小,仅为2.5uA左右。当模块处于关机模式时,停止工作。系统不再进行接收或者发送数据,但是配置字中的数据将保存原来的状态。当系统处于等待接收状态时,功耗会非常低。此时,模块上的晶振仍处于工作状态。这种工作模式可以节能,因为工作电流很小。模块从空闲模式转换到接收或者发送模式的时间很短,仅为650us[13]。4.4液晶显示电路液晶显示屏的种类很多,不同的设计需要选择不同的产品。本系统对液晶屏的显示要求很低,所以选择LCD1602液晶屏。这款液晶屏共16个引脚,带背光接口。1602的各个引脚接口如表4.3所示:表4.3 1602的各个引脚接口表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6EN使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极1602的主要引脚介绍:LCD1602的电源和地引脚分别为VDD和VSS,只有当这两个引脚正确连接时,液晶才能正常工作。VL引脚是用来实现对比度调节功能的。通过电位器调整VL引脚的分压,可以改变液晶的对比度。当VL接地时,对比度最高,会造成看不清液晶屏上显示的字符。RS引脚是一个重要的引脚,控制寄存器的选择。不同的寄存器控制液晶不同的功能。当RS为高电平时选中数据寄存器。当RS为低电平时选中指令寄存器。R/W为读写选择引脚。该引脚为高电平时,是读操作;该引脚为低电平时,是写操作。EN引脚为液晶使能引脚,从高电平变为低电平时,进行写入操作。D0-D7为数据引脚。LCD1602的这8位数据引脚是双向的,不但可以对1602写入数据,也可以读取1602上面的数据。读写功能由R/W引脚控制。BLA和BLK分别是背光调节的正极跟负极。由于STC12C560S2的I/O口的电流驱动能力有限,每个I/O口平均为20毫安,不足以驱动蜂鸣器进行发声报警。因此要采用三极管对I/O口的电流进行放大,然后再去驱动蜂鸣器。蜂鸣器分为有源蜂鸣器和无源蜂鸣器。只要给有源蜂鸣器两端加上何时的电压电流,它就会发出声音,因为它内部集成了振荡源;而对于无源蜂鸣器,内部没有振荡源,所以需要给它加上2K~5KHz的方波才会发出响声。因为本系统只要蜂鸣器发出警报声,因此采用有源蜂鸣器,这样电路更加简单。用于报警电路作为电流放大的三极管8050是非常常见的NPN型晶体三极管,在各种放大电路中经常看到它,应用范围很广,主要用于功率放大、开关。该三极管的集电极最大电流为0.5A,直流电增益为10~60,功耗为625毫瓦。5系统软件设置5.1软件设计的总体架构整个系统的程序设计采用模块化思想,将各个模块的功能编程独立的子函数,在主函数中调用各个子函数,从而实现本系统的功能。主要的模块功能包括:初始化程序、温湿度传感器采集温湿度程序、无线模块收发数据程序、液晶显示程序和蜂鸣器报警程序。其中,初始化程序分别包括:传感器初始化、LCD1602初始化和NRF905初始化。无线收发模块程序包括:打包发送温湿度数据,接收温湿度数据并进行拆包。系统的上位机程序流程图如图5.1所示:上电开始上电开始系统初始化读取温湿度存储数据是否发送完毕?发送数据否是图5.1 上位机发送数据程序流程图由上面的流程图可以看出:当系统上电后,首先进行初始化操作,即初始化传感器和NRF905无线模块。然后单片机读取温湿度传感器的数据,将其存储起来。通过无线模块将数据进行打包,加上CRC检验码后,发送出去。如果数据还没发送完成,即DR引脚还没被置高,则继续执行发送程序。当发送完毕后,再读取下一次数据,接着发送出去。图5.2 下位机接收数据流程图由下位机的流程图可以看出,当系统上电后,也是首先进行一系列初始化处理。其中包括1602液晶显示初始化,NRF905初始化。当检测到匹配的地址后,NRF905开始接收数据,对数据进行解包,去除CRC检验码后把数据存储到寄存器内。单片机读取NRF905上的数据,在液晶屏上显示出来。同时判断温湿度的范围,如果超出设定的范围,则蜂鸣器发出警报声。温湿度的范围可以通过系统上的按键进行设定。5.2温湿度传感器程序设计DHT21的供电电压为5V,当系统上电后,温湿度传感器会有1秒的不稳定状态,因此在系统中要通过延时等操作,跳过这个不稳定状态后再对DHT21进行读写操作。设计电路时,最后在电源与地间加上一个去耦滤波电容,使系统更加稳定。单片机与温湿度传感器是通过单总线进行通信的,通讯时间大约为5毫秒。40位传输数据下面所示:数据格式=16位湿度数据+16位温度数据+8位检验和。其中,40位数据里面,高位在前,低位在后。后八位检验和由前面湿度的高8位加上低8位,再加上温度的高8位与低8位组成。如图5.3所示:图5.3 40位数据组成系统上电工作后,单片机给温湿度传感器发送指令,使DHT21从低功耗模式迅速切换到高速模式,给单片机传回一个应答信号。接着发送采集到的40bit数据给单片机进行处理。因为传感器传输两次数据给单片机有一定的时间间隔,当这个间隔时间比较长的时候,需要再采集一次数据才能获得最新、最准确的数据。当上位机不工作的时候,单片机与传感器直接的单总线处于高电平状态。两者开始通信的时候,单片机需要先将总线拉低1~10毫秒,然后再释放。接着延时20~40微秒后,单片机检测传感器发来的应答信号。两者的通讯时序图如图5.4所示:图5.4 通讯时序图DHT21的应答信号是一个大约80微秒的低电平,然后再拉高总线约80微秒,接着系统将进入数据传输状态。时序图如图5.5所示:图5.5 数据传输时序图经过80微秒后,开始传送数据位。每一位数据是由一段高电平和一段低电平组成。所有数据位的低电平维持的时间相同,大约为50微秒,代表数据位的开始。后面的高电平维持的时间长短决定该数据位是“1”还是“0”。其中,高电平维持时间长的为数据“1”,高电平维持时间短的为数据“0”。当传输完最后一位,DHT21将总线拉为低电平,维持大约50微秒,再将总线释放。DHT21传感器采集湿度和温度的程序如下所示://温湿度读取子函数voidread_byte(){uchari,temp,delay;for(i=0;i<8;i++){delay=2;while((!DHT)&&delay++);//等待DHT变高电平delay:防止死循环delay_1us(30); //延时30us如果还是高电平则为1temp=0;if(DHT)temp=1; //高位先出delay=2; while((DHT)&&delay++);if(delay==0) break;//超时读取就错误comdata<<=1;comdata|=temp;}}//温湿度读取函数voidread_rh(){uchardelay,check,error=0;DHT=0;Delay_1ms(18);//DHT=1;delay_1us(20);DHT=1;if(!DHT){delay=2;while((!DHT)&&delay++);delay=2;while((DHT)&&delay++);read_byte();dht_date[0]=comdata;read_byte();dht_date[1]=comdata;read_byte();dht_date[2]=comdata;read_byte();dht_date[3]=comdata;check=comdata;DHT=1;if(check=(uchar)(dht_date[0]+dht_date[1]+dht_date[2]+dht_date[4])){humidity=dht_date[0];humidity<<=8;humidity|=dht_date[1];temperature=dht_date[2];temperature<<=8;temperature|=dht_date[3];}}}由温湿度读取函数可以看出,当进行数据采集时,通过程序将单总线拉低1~10毫秒,然后再释放总线。经过20~40微秒的等待时间后,单片机检测DHT21传感器的应答信号。在进行数据传输之前,传感器先给一个大约80微秒左右的低电平。之后再被传感器拉高大约80微秒。然后通过调用读取温湿度子函数,将采集到的数据存储到数组里面。当数据读取完毕后,进行检验码判断,如果两者相等,则读取数据正确。5.3无线模块程序设计无线模块程序由两部分组成,分别是上位机发送数据与下位机接收数据。即上位机给下位机发送命令与地址。如果下位机应答,则上位机进入数据发送状态。当发送完成一次数据后,进入下一次的命令与地址的发送。下位机主要是等待上位机发送的地址和命令,当检测到跟自己地址匹配的地址后,进入数据接收模式。成功接收完一次数据后,进入下一次数据的接收。无线模块与单片机之间的通信是通过SPI协议进行的,一般的I/O口可以通过软件模拟SPI的读写时序实现无线模块NRF905与STC12C560S2单片机的通信。本系统采用软件模拟SPI读写时序的方式。程序如下://SPI读函数unsignedcharSpiRead(void){ unsignedcharj; for(j=0;j<8;j++) {DATA_BUF=DATA_BUF<<1; SCK=1; if(MISO)//读取最高位,保存至最末尾,通过左移位完成整个字节 { DATA_BUF|=BYTE_BIT0; } else { DATA_BUF&=~BYTE_BIT0; } SCK=0; } returnDATA_BUF;}由SPI读函数可以看出,读取的数据将存储在变量DATA_BUF内。将SCK置高后看,读取MISO上的数据,然后保存到DATA_BUF的最低位。读取完毕后将SCK拉低,把DATA_BUF上的数据全部往左移动一位,再进行下一次数据的读取。这样循环8次后,直到读完一个字节数据。读取数据时,总是高位在前,低位在后。//SPI写函数voidSpiWrite(unsignedcharsend){ unsignedchari; DATA_BUF=send; for(i=0;i<8;i++) { if(DATA7) //总是发送最高位 { MOSI=1; } else { MOSI=0; } SCK=1; DATA_BUF=DATA_BUF<<1; SCK=0; }}由SPI写函数可以看出,首先准备好需要发送的数据,通过参数send传递给DATA_BUF变量。然后从最高位开始发送,判断DATA_BUF最高位的状态,如果为数字“1”,则把MOSI赋值为“1”;如果为数字“0”,则把MOSI赋值为“0”。将SCK拉高后,把DATA_BUF上的数据左移一位,再将SCK置低。这样循环8次,就把一个字节的数据通过MOSI发送出去了。5.4.1无线模块寄存器配置在系统上电的时候,首先要进行一些的初始化操作,初始化SPI控制寄存器、初始化SPI接口和初始化NRF905。无线收发模块NRF905的SPI接口由五个寄存器控制。分别为:接收数据有效寄存器、发送有效数据寄存器、发送地址寄存器、RF配置寄存器和状态寄存器。状态寄存器的状态分为数据就绪和地址匹配两种状态。它的功能主要是用来确定系统是否进入准备阶段,主要判断数据是否准备好,地址是否匹配。RF配置寄存器的功能主要是配置收发的频率和输出功率等。发送地址寄存器的作用是存储目标寄存器的地址,字节的长度可以通过配置寄存器进行设置。发送有效寄存器是用来发送有效的ShockBurst数据包,而接收有效数据寄存器是用来接收有效的ShockBurst数据包。配置好NRF905内部的五个控制SPI的寄存非常重要,因为这些寄存器与数据的发送与接收相关。首先将无线模块进行初始化,设置工作模式为节电模式,然后通过SPI协议向NRF905无线模块内部写配置信息。主要代码如下://NRF905初始化voidnRF905Init(void){CSN=1; //Spi disable SCK=0; //Spiclocklineinitlow DR=1; //InitDRforinput AM=1; //InitAMforinput CD=1; //InitCDforinput PWR=1; //nRF905poweron TRX_CE=0; //SetnRF905instandbymode TXEN=0; //setradioinRxmode}//NRF905寄存器配置信息unsignedcharidataRFConf[11]={0x00,//配置命令//0x4c,//CH_NO,配置频段在430MHZ0x0c,//输出功率为10db,不重发,节电为正常模式0x44,//地址宽度设置,为4字节0x20,0x20,//接收发送有效数据长度为32字节0xCC,0xCC,0xCC,0xCC,//接收地址0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振};//初始化寄存器voidConfig905(void){ uchari; CSN=0; //Spienableforwriteaspicommand SpiWrite(WC); //Writeconfigcommand写放配置命令 for(i=0;i<11;i++) //Writeconfigrationwords写放配置字 { SpiWrite(RFConf[i]); } CSN=1; //DisableSpi}由初始化函数可以看出,通过SPI配置NRF905,首先要讲SCN拉低,即SPI使能。通过调用SPI向NRF905写入WC指令,然后开始写入配置信息。利用for循环依次写入11个配置信息。最后再将SCN置高,关闭SPI接口的读写功能。5.4.2发送程序设计发送程序是用来将上位机的温湿度传感器采集到的温湿度经过打包与加CRC检验码后发送给下位机。发送过程是单片机控制NRF905无线模块进行的,单片机通过SPI将数据传输给无线模块。无线模块将数据放入发送数据寄存器,再发送出去,同时将接收端的地址一起发送出去。发送数据的程序代码如下://设置发送状态voidSetTxMode(void){ TRX_CE=0; TXEN=1; Delay(3); //delayformodechange(>=650us)}通过NRF905的TRX_CE引脚和TXEN引脚控制无线模块的工作模式,当TRX_CE=0并且TXEN=1的时候,系统处于发射状态。状态的转换时间大约为650微秒。将数据进行打包发送和发送匹配地址的程序代码如下://发送数据voidTxPacket(uchar*TxRxBuf){ uchari; CSN=0; //Spienableforwriteaspicommand SpiWrite(WTP); //Writepayloadcommand for(i=0;i<1;i++) { SpiWrite(TxRxBuf[i]); //Write32bytesTxdata } CSN=1; //Spidisable Delay(1); CSN=0; //Spienableforwriteaspicommand SpiWrite(WTA); //Writeaddresscommand for(i=0;i<4;i++) //Write4bytesaddress { SpiWrite(TxAddress[i]); } CSN=1; //Spidisable TRX_CE=1; //SetTRX_CEhigh,startTxdatatransmission Delay(1); // TRX_CE=0; //SetTRX_CElow}从上面的发送程序可以看出:首先拉低SCN,使能SPI,然后通过调后SPI写函数,向NRF905写入WTP命令,才能进行下一步数据的传输。然后通过for循环,调用SPI写函数,将发送数据写到发送数据寄存器内。将SCN置高,然后再拉低,写入WTA命令,然后再利用for循环写入接收端的地址。然后将数据和地址发送出去,如果DR引脚被置高说明数据和地址被成功发送出去[14]。5.4.3接收数据程序设计首先要初始化NRF905为standby模式,配置相关寄存器。然后通过RX_CE引脚和TXEN引脚将无线模块设置为接收模式。接收端将一直处于检测状态,检测空中的载波信号,当检测到与自己地址相匹配的信号后,开始进入数据接收状态,将数据进行解包,去掉CRC校验码后,放入数据接收寄存器内。接收完毕后,将DR引脚拉高。当单片机检测到DR引脚被置高后,从NRF905无线模块的接收数据寄存器内,通过SPI读取有效数据。单片机对数据进行处理之后,判断温湿度的范围,超出预设的范围将启动蜂鸣器报警。同时将温度和湿度实时地显示到LCD上。接收数据代码如下://接收模式设置函数voidSetRxMode(void){ TXEN=0; TRX_CE=1; Delay(3); //delayformodechange(>=650us)}通过NRF905的TRX_CE引脚和TXEN引脚控制无线模块的工作模式,当TRX_CE=1并且TXEN=0的时候,系统处于接收数据模式。状态的转换时间大约为650微秒。接收数据的程序代码如下:voidRxPacket(void) { uchari;Delay(100);TRX_CE=0; //SetnRF905instandbymode Delay(1); CSN=0; //SpienableforwriteaspicommandDelay(1); SpiWrite(RRP); for(i=0;i<1;i++) { TxRxBuf[i]=SpiWrite(0xFF); //Readdataandsavetobuffer } CSN=1;Delay(10); while(DR||AM); TRX_CE=1; }从上面的程序代码可以知道接收过程只要分为:通过语句TRX_CE=0,使无线模块处于standby模式。单片机给无线模块发送RRP指令,这样才能调用SPI读函数,读取NRF905无线模块接收到的温湿度的数据。然后等待DR引脚和AM引脚被拉低。因为当接收匹配的地址后,AM引脚会被无线模块置高,而接收到数据并且进行解包后,DR引脚会被无线模块拉高,所以当无线模块将接收到的数据处理完之后,会把AM引脚和DR引脚都拉低。需要注意的是,NRF905模块只有在发送或者接收模式下,才能对数据进行有效的操作。因此,在使用该模块之前,先将它设置成相应的工作模式。5.4.4数据显示程序设计在使用LCD1602显示温度和湿度之前,需要先对它进行初始化操作,主要是设置光标,显示起始位置等功能。初始化函数如下:voidLcdInit() //LCD初始化子程序{ LcdWriteCom(0x38);//开显示 LcdWriteCom(0x0c);//开显示不显示光标 LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//设置数据指针起点}显示程序也是采用模块化编程思想,通过调用液晶显示的写命令和写数据子函数,实现将数据显示到液晶屏上的目的。写命令操作和写数据操作函数如下所示://写入命令voidLcdWriteCom(ucharcom) { LCD1602_E=0;//使能 LCD1602_RS=0; //选择发送命令 LCD1602_RW=0; //选择写入 LCD1602_DATAPINS=com;//放入命令 Delay_1ms(1); //等待数据稳定 LCD1602_E=1; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《细胞免疫检测技术》课件
- 微课人力资源管理课程简介财经管理人力资源管理系
- n4护士述职报告
- 中小学水上交通安全知识
- 业务销售工作规划
- 低血糖的预防及应急预案
- 《公司法概论》课件
- 山东省枣庄市2024年中考化学真题【附答案】
- 医疗学术报告
- 数学学案:课堂导学“且”与“或”“非”(否定)
- 班主任工作经验分享如何成为优秀的班主任
- 古诗文系列课件模板-山房春事二首
- 2024年上海市第二十七届初中物理竞赛初赛试题及答案
- 2011年认识实习报告
- 水务公司招聘笔试题库及答案
- 医疗垃圾分类与处理的人员培训与资质要求
- 审核的改进计划和措施
- 《旅游管理》专业调研报告
- 2024野生哺乳动物及栖息地调查技术规程
- 2024年中医药知识与技能竞赛题库附含答案
- 2023年6月大学生英语四级真题试卷及详细答案(三套)
评论
0/150
提交评论