版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏理工学院毕业设计说明书(论文)页共43页第1章绪论1.1课题意义和目的温度与湿度是衡量室内环境的一个重要指标,我们需要对这两个指标进行实时监控。通过对温湿度的监控,我们可以及早发现一些问题并及时的处理,比如说在一些温室,花草的成长,和温湿度是离不开的,它们只有在适宜的环境下,在适宜的湿度和温度下,才能成长的更快,我们才能获得更大的效益。我们需要一种造价低廉、使用方便且测量准确的温湿度测量仪,因此根据课题设计出了能够自动检测多个测点温湿度并根据设定值进行报警的系统。1.2课题研究内容本设计课题是基于单片机的室内环境监控系统,其主要研究内容为:1、以单片机、温湿度传感器、LCD显示模块等为核心器件组成室内环境监控系统。2、根据课题要求采购各种元器件并完成软硬件电路设计,完成焊接和调试工作。3、完成该设计的程序设计,提交程序设计框图及源程序清单。4、完成硬件与软件的综合调试,实现基本功能和主要技术指标。1.3课题任务要求设计制作一个利用单片机作为核心的室内环境监测报警系统,具体要求为:1.设计一个利用温湿度传感器监测室内环境中的温湿度数据并根据设定的上下限值进行声光报警的系统。2.该系统共有两个监测点,分别监测当前室内温湿度,要求系统可以分别清晰地显示两个测量点的温湿度值。3.设计的系统可以通过按键调节温湿度上下限,当监测的温湿度超过设定的上下限时就会进行报警。(例如当设置的温度上下限分别为40摄氏度和10摄氏度时,如监测到的温度超过40摄氏度或者低于10摄氏度,此时就会报警)
第2章系统方案设计课题的目的以及需要实现的功能已经明确,接下来根据课题的具体要求制定设计方案,经过对各个模块的仔细分析最终选择可行的方案。2.1系统方案构思温湿度监控系统具有可以对数据进行采集和处理、显示采集到的数据、进行串口通信、输出控制信号等多种功能。本系统由温湿度检测模块、LCD显示模块、单片机控制模块、按键模块、声光报警模块等6个主要模块电路组成。该监测系统具有实时采集室内温湿度并对采集到的数据进行实时比较和分析,当超过设定要求的上下限时进行声光报警的功能。(1)方案一:系统原理图如图2-1所示。本方案采用温湿度传感器采集温湿度信息经过A/D转换器将模拟信号转换成数字信号发送给FPGA中,再通过LED数码管显示出来。按键电路是用来设置采集温湿度数据的上下限值。当显示的温湿度数据超过设置的上限值或低于设置的下限值时,声光报警电路开始工作。图2-1方案一电路原理框图(2)方案二:系统原理图如图2-2所示。本方案使用温湿度传感器采集2个监测点的温湿度数据,并将采集到的数据发送到单片机中进行处理,处理完毕后再由LCD1602显示器显示。按键电路是用来设置采集的温湿度的数据的上下限值。当采集到的数据不在设置的上下限范围内时,监测系统开始报警。图2-2方案二电路原理框图2.2方案的选择与论证2.2.1方案比较与论证1.控制器选择控制器主要有FPGA和单片机两种选择。FPGA相对于单片机来说I/O口较多,扩展电路相对比较简单,而且FPGA的抗干扰性能和速度比单片机要好,但是单片机与FPGA相比价格较低,且功耗低,对于这种较简单的控制系统来说单片机的功能已经足够可以符合该系统的设计要求。而且相比于FPGA,单片机只需4个端口中的2个就能满足系统的设计需要,并且可以用干电池供电,适合像本次设计一样的小型系统。所以综合考虑,本系统选择单片机作为控制器。2.传感器选择传感器部分主要有模拟传感器和数字传感器两种选择。模拟传感器采集的数据需要经过A/D转换器才能转换成数字信号,精度受到A/D转换器的影响,\t"F:/迅雷下载/report_bf759f51_2015-5-30-15-57-16/PaperPass-VIP专业版-检测报告/htmls/detail_report/right"若选用精度较高的转换器费用方面就会提高,而数字传感器具有精度高,费用低的优点,所以选择数字模拟器(DHT11)。3.显示器选择显示器部分主要有LED数码管和LCD显示屏两种选择。由于本次设计要求显示的数据较多,但是数码管显示出的数据并不容易观察,而LCD显示屏可以很直观的显示出收集到的数据,所以本次设计选择LCD显示屏。综上所述,考虑到设计经费、电路功耗和硬件制作工序以及其他各方面的因素,本次设计选择方案二。2.2.2系统结构框图本次设计使用3节干电池作为电源,采用数字温湿度传感器将采集到的温湿度数据送入STC89C52单片机中,再用LCD1602液晶显示器显示出来。按键电路是用来设置温湿度采集数据的上下限值。当显示的数据超过设置的上限值或低于设置的下限值时,声光报警电路开始工作,对不在范围内的数据报警。图2-3电路原理框图
第3章系统硬件电路设计根据系统方案设计要求,进行多点温湿度监测,其主要电路包括以下七个模块:温湿度测量模块、单片机控制模块、按键选择模块、显示模块、报警电路模块、时钟模块和复位模块。3.1单片机简介STC89C52单片机是一款功耗低、性能优秀、工作可靠的微处理器,此单片机的片内有4k字节的存储器,可以支持重复编程和快速擦除写入程序,能重复写入、擦除上千次。本次设计采用STC89C52是因为这款单片机在执行指令方式和引脚上与51系列单片机几乎一致,而且相比51系列单片机,STC89C52具有更多的使用功能。STC89C52可构成单片机最小应用系统,这样可以提升系统的稳定性,降低成本。编程时可以使用5V的电压,不易对器件造成损坏,需要改写程序时也不用取下芯片,并且擦除时间仅需10毫秒,比51系列单片机快很多,适合很多嵌入式领域。引脚介绍:VCC:供电电压GND:接地P0口:P0口是由P0.0—P0.7这8个双向I/O口组成的,每个引脚可以接收8个TTL门电流。当对片内FLASH进行编程时,P0口作为接收命令的端口,而在检验程序时,P0口用来输出命令P1口:P1口既可以作为输入口又可以作为输出口,当它被内部上拉为高电平时为输入口,而当它被拉为低电平时作为输出口。P2口:P2口一般作为双向I/O端口使用或者作为高8位地址总线输出引脚P3口:P3口由8个引脚组成,能作为双向I/O端口使用但是一般会使用其第二功能RST:复位输入ALE/PROG:作为地址锁存允许信号输出引脚或编程脉冲输入引脚PSEN:片外ROM读选通信号输出引脚XTAL1:接入晶体振荡器的引脚XTAL2:另一个接入晶体振荡器的引脚图3-1STC89C52单片机引脚示意图3.2时钟电路时钟电路能产生基准时钟信号,为单片机和整个硬件电路提供运行时钟,可控制PC机的工作节奏,如果没有时钟电路来产生时钟信号驱动单片机,单片机是无法工作的。CPU完成各种不同的命令也需要有复杂的时序。如时钟电路的输出为0或时钟频率超过单片机的工作频率,单片机也不能工作。STC89C52的时钟信号产生方式有两种:一种是利用芯片内部的震荡电路来产生时钟信号,另一种是从外部直接引入时钟信号。图3-2时钟电路3.3复位电路复位电路的作用是初始化程序计数器(PC),它的作用除了可以使系统进入正常的初始化,还可以在系统发生错误锁死时起到重启系统的作用。图3-3复位电路3.4按键电路用5个键来控制,Key1键是使界面返回到最初的的主界面,Key2键是用来由主界面切换到修改温湿度上下限界面,Key3键用来切换具体希望修改的某个温湿度上下限,Key4键用来增加温湿度上下限,Key5键是用来减小温湿度上下限。图3-4按键电路3.5温湿度检测电路DHT11温湿度传感器是一款可以对信号进行自动校准输出的数字型传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有测量精度高,稳定性强等特点。因此DHT11具有稳定性高、抗干扰能力强、数据测量精确、产品价格低廉等优点。每个DHT11传感器都经过实验室严格测试以确保其测量精度。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。这些特性使DHT11成为了各类产品及设计中的首选。产品为4针单排引脚封装。DHT11的供电电压仅需3.3v到5.5v左右,完全可以用干电池供电,而能测量的湿度范围为百分之20到百分之90RH,能测量的温度范围为0摄氏度到50摄氏度。对于像本设计一样的小型系统来说,DHT11的这些特性都极为适合。从STC89C52单片机接受到开始信号后,DHT11传感器开始工作,在主机的开始信号结束后,DHT11发出响应信号并开始进行数据采集。只有当DHT11传感器接收到由主机发送的开始指令时它才会开始采集数据,当没有接收到开始信号时DHT11传感器处于低速状态。接收一次数据包含40bit,它分别由8bit的湿度整数数据加上8bit的湿度小数数据和8bit的温度整数数据和8bit的温度小数数据组成。当数据正确接收时会显示4个数据之和的末八位。图3-5温湿度检测电路3.6显示电路1602LCD的特性:+3.3V电压,对比度可调,内含复位电路,可以提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM,并且其功耗小、体积小、显示内容丰富、超薄轻巧,适合在一些小型仪器中使用。图3-6显示电路3.7报警电路本电路使用四个报警指示灯,一个蜂鸣器和LCD1602液晶显示共同实现报警,四个灯的作用是可以清楚看出是哪个节点的报警,与蜂鸣器组成声光报警系统。使用LCD1602可以清楚的观察测到的温湿度上下限。当报警时,通过四个指示灯可以清楚地看出是哪个节点温度和湿度超限,如果想进一步知道是温度还是湿度报警,是超上限还是超下限报警,可以通过液晶清楚地看出来,因为在软件编程时,在液晶是适当的位置留了空位用来显示超上限还是超下限,设计电路时采用的思想是当温度超过上限时让液晶在适当的位置显示+,超下限时显示-,同样湿度也一样。这样就可以清楚地看出是温度超限还是湿度超限。图3-7报警电路
第4章系统软件设计根据已设计好的硬件功能来编写相应的软件,C语言是我这四年主要学习的编程语言,所以在本次毕业设计中我选用C语言进行软件设计。经过查阅资料分别完成子程序和主程序的设计,并在完成程序编写后进行测试,确保程序达到功能要求。4.1软件设计总体思路整个系统功能的实现需要软硬件之间相互的配合,当硬件功能确定时就应该着手编写可以实现这些功能的软件。编写的软件包括主程序和主程序,主程序是所有程序中最重要的部分,编的时候需要格外留心,因为主程序主要负责调用各个子程序,如果主程序出错将会影响到整个程序的运行。子程序主要用来实现各种功能,例如数据显示、数据通讯、数据测量等。4.2主程序流程图设计图4-1主程序流程图4.3子程序流程图设计4.3.1按键电路子程序流程图用5个键来控制,Key1键是使界面返回到最初的的主界面,Key2键是用来由主界面切换到修改温湿度上下限界面,Key3键用来切换具体希望修改的某个温湿度上下限,Key4键用来增加温湿度上下限,Key5键是用来减小温湿度上下限。图4-2按键电路子程序流程图4.3.2温湿度测量子程序流程图温湿度监测系统主要是采用DHT11传感器实现。DHT11在执行命令时对时序的要求很高,所以必须按照DHT11要求的时序来编写程序这样才能达到任务要求。DHT11会读进来12位高位在后低位在前的数,其中有7位整数、4位小数、一位符号。具体的设计如下:图4-3温湿度测量子程序流程图4.3.3显示模块子程序流程图本设计通过LCD1602显示实时的温湿度测量结果,LCD1602显示屏可以同时显示多组数据并且清晰直观,器件成品低,适合运用在本次设计上,具体软件设计如下:图4-4显示模块子程序流程图4.3.4报警模块子程序流程图电路的具体报警用LED灯和蜂鸣器来指示,温湿度超过上下限,相应的指示灯会点亮,并且蜂鸣器响。图4-5报警模块子程序流程图
第5章系统调试与数据分析在完成了软硬件设计的基础上,根据任务书上的功能对整个监测系统进行整体调试及检查,并对发现的问题进行及时处理,完善整个系统的功能、稳定性和实用性。5.1硬件电路调试5.1.1硬件电路功能与测试通电前先进行静态调试,因为本系统采用的电路板为PCB印制板,元器件大多使用贴片元器件,首先用万用表测量元器件焊接是否有短路、虚焊的情况。确保各器件焊接正确后通电测量。(1)单片机最小系统电路在单片机外围接一个发光二极管,写一个简单的程序,把程序下载到单片机,看能否正常工作,如果可以说明单片机时钟电路没有问题。在电路工作时按下复位电路的控制按键,通过观察发光二极管工作情况,可以看出复位电路是否正常工作。由此来检查单片机最小系统是否工作正常。(2)LCD1602显示电路焊接好LCD1602电路模块后,将一个简单的显示测试程序下载到单片机中,观察LCD1602是否亮起,如果亮起说明显示模块电路焊接无误。(3)温湿度测量电路接上DHT11温湿度监测电路,严格按照DHT11的工作时序来编写程序,将编写好的程序下载到单片机STC89C52中,通过观察DHT11是否进行测量工作来确定电路是否正确。(4)按键扫描电路按键电路的检测主要是通过万用表进行测量。(5)报警电路报警电路由四个发光二极管,蜂鸣器和LCD1602显示电路构成,确保各个模块能正常工作的前提下,把编写好的程序下载到单片机里,使DHT11进行温湿度采集,当温湿度超过或低于预先设置好的上下限时,对应的发光二极管就会亮起,蜂鸣器响。5.1.2存在问题及解决方法(1)焊好后发现LCD1602不亮,初步猜想是可能存在虚焊或者各个端口与程序编写的不一致。经过检查发现是LCD1602的A、K引脚未连接,连接好后LCD正常。(2)键盘焊好后发现按下相应的键盘没有正常跳转,首先我用万用表依次检查每个按键是否都有效,将5个按键检测一下,看键盘接口与软件是否匹配。结果发现是软件消抖不理想。(3)整个系统焊接好后发现单片机不能正常工作,我依次检查了单片机各个引脚的接线,以及电源与地是否都接正确了。最后发现是接触不良,重新调整单片机与卡座的连接,单片机可以正常工作了。硬件调试后排除了那些硬件问题,硬件能正常工作了,达到室内环境监测系统的要求。LCD1602屏幕上能显示当前温湿度,可以通过5个按键来进行温湿度上下限的调节,Key1键是使界面返回到最初的的主界面,Key2键是用来由主界面切换到修改温湿度上下限界面,Key3键用来切换具体希望修改的某个温湿度上下限,Key4键用来增加温湿度上下限,Key5键是用来减小温湿度上下限。当温湿度超过按键设置的上下限,蜂鸣器响,且LED指示灯能指示出具体是哪一个温湿度传感器的哪个值不在上下限区间内。5.2软件调试由于已经进行了硬件调试,所以软件调试主要是软件的编译和功能的仿真。在进行功能调试前必须用KEILC软件对所有程序进行编译,编译成功产生可执行的.hex文件后方可进行硬件仿真。进行软件调试时不在PCB板上调试,而是用51单片机开发板,用LED灯模拟子程序是否工作正常。5.2.1程序编写与测试软件方面主要包括按键模块子程序编写、温湿度检测模块子程序编写、显示模块子程序编写、报警模块子程序编写等几个子程序设计,采取分模块设计,用KEIL软件进行程序编写,并分别将各个子程序在51单片机开发板上做软件调试。按键模块程序编写在KEIL软件上编写按键模块子程序,按下按键,相应的指示灯亮起,以此来测试按键模块子程序是否正确。温湿度检测程序编写在KEIL软件上编写温湿度检测子程序,采集温湿度传感器的接收信号,采集其中的一个温度参数显示在数码管上,为了测试程序是否正确,增加了当前温度,经过观察发现数码管上温度上升了,说明程序编写基本无误。显示模块程序编写在KEIL软件上编写LCD1602显示子程序,先编写静态显示程序,显示一串字符串,显示正常后再将温湿度传感器检测到数据显示到LCD屏幕上,经过观察可以正确显示传感器检测到的数据。报警模块程序编写在KEIL软件上编写一个小程序,让蜂鸣器响,指示灯依次点亮,以此来检测程序是否正确以及蜂鸣器是否能正常工作。(5)上述子程序都成功后,将各个子程序整合,编写主程序,然后整体调试。5.2.2存在问题及改进措施由于本系统是模块化程序设计的,所以调试时要对各个模块的子程序进行调试。调试从最简单的模块开始,一步一步的进行调试。先进行显示模块的调试,调试LCD是否可以正常显示。然后依次对数据处理、加操作、减操作等子程序进行调试,将键盘程序烧入进行调试。然后将传感器部分接入,看是否和预想的一样,最后所有模块子程序都检验没有错误以后,编写主程序连接各个子程序进行整体的软硬件系统调试。调试结果如下:按键按下不灵敏,这是软件上按键消抖的问题,本设计采用的是延时消抖,所以按下按键时需要长按。LCD显示会闪烁,经过对程序的检测发现这主要是显示中延时的长短设置问题,通过改变延时时间,可以让LCD屏幕在肉眼看的时候不闪烁。传感器接受信号反应慢,这个一方面是传感器本身的原因,另一方便是程序中需要改进,经过对程序的修改,发现缩短延时,精简语句可以解决传感器接受信号反应慢的问题。5.3测试结果分析本系统通过单片机能够完成实时室内环境的监测,能够接收命令和发送室内环境参数信息值传给单片机,单片机接收到数据后也可以进行处理并驱使显示模块进行数据显示以及触发报警。硬件的制作已达到要求,软件也能达到任务书上的要求,但是整个系统还是存在一些不足之处的。首先在LCD1602显示数据方面,一开始我采用4位显示,温湿度值不能同屏显示,不能达到直观显示结果的目的,而电路板上也没有足够的位置让我再加4位显示,于是我从软件下手,用T代表温度,H代表湿度,这样就能温湿度同屏显示了。其次我发现了按键并不灵敏,有时按下有反应,有时则会失灵,通过查阅资料,我知道了这是由于按键自身构造的关系,由于按键中有弹簧,导致了按下的过程中电路不会马上接通而是产生一系列的信号而产生按键被按下多次的效果。因为按键比较多所以我从软件出发,采用了软件消抖的方法,解决了这个问题。室内环境监测系统测试结果如下:LCD1602显示屏上能正常显示两个监测点的温湿度,能通过切换按键更改温湿度上下限。当温湿度超过范围时,报警灯亮,蜂鸣器响,基本达到设计要求。
第6章总结与展望本次我设计的是一个以STC89C52为核心的室内环境监测系统,该系统可以实时检测室内的温湿度数据并且反应在LCD屏幕上,此外还可以对温湿度值上下限值进行设定,让其在温湿度不在设定的范围内时进行报警,使我们可以及时采取应对措施。本次系统设计完成了电源电路、显示电路、按键电路、复位电路、报警电路的软硬件设计,经过理论上的分析和实际的操作,基本完成设计目标。虽然排除了很多问题,但本设计最终实现还是存在一些不足,例如翻页显示存储内容时,不能显示每两秒存储的时间。通过这次室内环境监控系统设计与制作,让我在编写程序方面有了很大的进步,也让我了解了关于温湿度的原理与设计理念,要焊接硬件电路一定要先确保整个电路的连线无误。但连线无误并成功焊接好硬件电路不代表最后的实物就能实现所有功能,因为焊接实物时有时难以避免出现各种问题,可能会出现各种短路或断路的情况。而且在仿真时用的连线接法在实际情况中不一定通用。所以在制作实物时应该仔细制定焊接方案,选择最简单可行的设计方法。并且在这为期一个学期的学习中让我对我的学科有了新的了解。所以说想要更好的加深巩固自己所学的专业知识就一定要勤于自己动手操作。在这一学期中我明白了查阅资料的重要性,也看到了自己知识量和经验的不足,通过查阅资料让我对我的学科的专业知识有了更深的了解。比如在焊接时我因为不熟悉DHT11的构造把它的1和3脚焊反了,导致DHT11在工作时发烫,不能正常测量数据,后经过查找资料才纠正了这个错误。另外,我还深刻体会到了理论结合实际的重要性,要学会把学校学习到的知识运用到现实生活中去,做到学以致用,对单机片机的学习也是一样,只有经常自己编写程序才能提高水平,这就是我在这次课程设计中的最大收获。经过这次毕业设计我对单片机的兴趣更加浓厚了,我学会了用Keil,PROTEUS,Altiumdesigner等专业软件,学会了调试系统电路的方法,可以运用所学知识分析并选择正确的元器件制作硬件电路,调试时可以独立发现电路或软件中的问题并解决,学会了如何阅读各种元器件手册及如何编写论文
参考文献[1]夏继强.单片机实验与实践教程[M].北京:北京航空航天大学出版社,2001.[2]高锋.单片微型计算机原理与接口技术[M].北京:科学出版社,2003.[3]何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2001.[4]邓力.PROTEUS51单片机的电路仿真[J].中国科技信息,2006,(14):90-92.[5]唐颖.EDA技术与单片机系统[J].现代电子技术,2001(3):31-32.[6]戴仙金.51单片机及其C语言程序开发实例.北京:清华大学出版社,1993.[7]谭浩强.C语言程序设计[M].北京:清华大学出版社,2001.[8]李朝青.PC机及单片机数据通信技术[M].北京:北京航空航天大学出版社,2000.[9]孙玉艳.实现PC机与单片机的数据通信与控制[J].广东白云职业技术学院学报,2002,(4):33-34.[10]张培仁.基于C语言编程MCS-51单片机原理及应用[M].北京:清华大学出版社,2013.[11]沈红卫.基于单片机的智能系统设计与实现[M].北京:电子工业出版社,2005.[12]张为民.温湿度测控系统中的智能控制器研制[J].西北民族大学学报(自然科学版),2004(02):32-33.[13]倪天龙.单总线传感器DHT11在温湿度测控中的应用[J].单片机与嵌入式系统应用,2010(06):58-61.[14]李长有,王文华.基于DHT11的温湿度测控系统设计[J].机床与液压,2013,41(13):21-23.[15]杜宇芳.基于nRF905和DHT11的无线温湿度采集器[J].信息技术,2012,(8):25-26.[16]XUTai-zhong,ZOUGao-Ping.Lowpowerdesignofportableelectronicsystem[J].ApplicationofMCUandEmbeddedSystem,2001,(8):11-13.
致谢充实而又短暂的四年大学生活就快结束了,我们也即将告别学习生涯踏入社会,对于这所再熟悉不过的校园,我的心中充满了留恋。走出校园,我们的人生将有一番新的旅途,要把我们在学校学到的各种知识运用到接下来的工作中去本次毕业设计是对我大学四年求学生涯最好的检验。经过这为期一学期的毕业设计,让我对大学四年所学的知识得到了巩固及升华,也让我明白了与人交流的重要性,既培养了我的学习能力,又锻炼了我的交流合作能力。在做毕业设计期间,多亏了同学及老师的帮助我才能顺利解决一个个难题。在他们的帮助下我才能顺利完成这次毕业设计。首先要感谢带我毕业设计的吴建明老师,在毕业设计中遇到的问题,都能得到老师的认真指导和帮助,在设计遇到瓶颈的时候,老师为我们留在学校指导毕业设计,为我们找到突破口。通过这个毕业设计,我对单片机有了更深入的了解,更重要的是让我学会了待人处事的道理以及不管在生活还是学习上都应具备的个人素质。其次我还要感谢我的同学特别是舍友,感谢他们不厌其烦地在我遇到难题时给予我帮助,以及在日常生活中对我的种种关照,因为有他们的存在才使我的大学生活充满乐趣,我也把他们当成竞争的目标,这使我在学习上得到了很大的进步。同时我要感谢所有在学习或者生活中帮助过我的老师。
最后,我要感谢我的父母,正是因为有了他们辛苦无私的奉献,我才能全心全意的完成这大学四年的学习。
附录1电路原理图
附录2PCB图附录3实物图附录4程序#include<reg52.h>//头文件#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable1[13]="T1:T2:H1:H2:%";ucharcodetable2[11]="0123456789";//字码uchardis_buf[3];//数值显示缓冲区ucharTU1=30,TD1=20,HU1=60,HD1=35; //节点1报警值ucharTU2=30,TD2=20,HU2=60,HD2=35; //节点2报警值sbitRS=P2^7;sbitRW=P2^6;sbitOE=P2^5;sbitDT1=P3^2;sbitDT2=P3^3;sbitk1=P1^0;sbitk2=P1^1;sbitk3=P1^2;sbitk4=P1^3;sbitk5=P1^4;sbitL2=P2^0;sbitL1=P2^1;uintaa=0,bb=0,cc=0,dd=0,key; //延时1mSvoiddelay_ms(unsignedcharms) { uinti,j; for(i=0;i<ms;i++) for(j=0;j<280;j++) ;}voiddelay_s(signedchari) //较长延时约1s{ while(i--) { delay_ms(255); delay_ms(255); }}//1602voidwrite_com(ucharcom){ OE=0; //写命令 RS=0; P0=com; delay_ms(2); OE=1; delay_ms(2); OE=0; }voidwrite_dat(uchardat){ OE=0; RS=1; //写数据 P0=dat; delay_ms(2); OE=1; delay_ms(2); OE=0;}voidLCD_Init(){ RW=0; write_com(0x38); //显示模式 write_com(0x0c); //开显示光标和闪烁设置 write_com(0x06); //地址自动加一 write_com(0x01); //清屏 delay_ms(100);}voidshu_dis(unsignedcharnum)//将显示数据十位、各位拆分开{signedchari=0;for(i=0;i<3;i++)//拆分bcd{dis_buf[i]=num%10;;num=num/10;}for(i=2;i>0;i--)//灭零{if(dis_buf[i]==0)dis_buf[i]=10;elsebreak;}for(i=2;i>=0;i--)//逐个显示{write_dat(table2[dis_buf[i]]);}}//DHT11voiddelay_us() //1us{unsignedchari=7;if(i)i--;}//键盘unsignedcharkey_event()//取键值函数,并将键值通过key_value返回{ unsignedcharkey_value; if(k1==0)key_value=1; else {if(k2==0) {key_value=2;aa++; if(aa==3)aa=0; delay_ms(255);} else {if(k3==0){key_value=3;bb++; delay_ms(255);} else {if(k4==0) {key_value=4;cc++; delay_ms(255);} else {if(k5==0){key_value=5;dd++; delay_ms(255);} } } }}returnkey_value;}unsignedcharkey_check()//按键检测函数,有键按下时置返回1,无键按下返回0{bitflag; P1=0xff;if(P1!=0xff)//按键消抖{delay_ms(20);if(P1!=0xff){flag=1;}elseflag=0;}elseflag=0;returnflag;}voidread_th1()//读取DHT11采样数据{ unsignedchari,j,N=0,teml; unsignedcharbuf[5]; DT1=0;//响应信号’1’有效 delay_ms(30); DT1=1; delay_us(); delay_us(); delay_us(); delay_us(); DT1=1; if(DT1==0) //是否响应信号 { while(DT1==0); //跳过80usDHT响应信号 while(DT1==1); //跳过80usDHT拉高信号 //准备接受温湿度数据 for(i=0;i<5;i++) { for(j=0;j<8;j++) { N=0; while(DT1==0);//bit数据头 while(DT1==1) { delay_us();//适当延时 N++; } buf[i]<<=1; if(N>3)buf[i]++; } } DT1=1; teml=buf[0]+buf[1]+buf[2]+buf[3]; if(teml==buf[4]) { if((buf[0]<HD1)||(buf[0]>HU1)||(buf[2]<TD1)||(buf[2]>TU1))//判断采集的温湿度是否在设置的上下限内 {L1=0; if(buf[0]<HD1){write_com(0x80+0x0b);write_dat('-');}//小于下线,显示‘-’ elseif(buf[0]>HU1){write_com(0x80+0x0b);write_dat('+');}//大于上线,显示‘+’ else{write_com(0x80+0x0b);write_dat('');}//没有超过上下限不显示显示 if(buf[2]<TD1){write_com(0x80+0x02);write_dat('-');}//同上 elseif(buf[2]>TU1){write_com(0x80+0x02);write_dat('+');} else{write_com(0x80+0x02);write_dat('');}} else{L1=1;} write_com(0x80+0x03); shu_dis(buf[2]); write_dat(0xdf); write_com(0x80+0x0c); shu_dis(buf[0]); write_dat(table1[12]); } }}voidread_th2(){ unsignedchari,j,N=0,teml; unsignedcharbuf[5]; DT2=0; delay_ms(30); DT2=1; delay_us(); delay_us(); delay_us(); delay_us(); DT2=1; if(DT2==0) //是否响应信号 { while(DT2==0); //跳过80usDHT响应信号 while(DT2==1); //跳过80usDHT拉高信号 //准备接受温湿度数据 for(i=0;i<5;i++) { for(j=0;j<8;j++) { N=0; while(DT2==0);//bit数据头 while(DT2==1) { delay_us();//适当延时 N++; } buf[i]<<=1; if(N>3)buf[i]++; } } DT2=1; teml=buf[0]+buf[1]+buf[2]+buf[3]; if(teml==buf[4]) { if((buf[0]<HD2)||(buf[0]>HU2)||(buf[2]<TD2)||(buf[2]>TU2)) {L2=0; if(buf[0]<HD2){write_com(0x80+0x40+0x0b);write_dat('-');} elseif(buf[0]>HU2){write_com(0x80+0x40+0x0b);write_dat('+');} else{write_com(0x80+0x40+0x0b);write_dat('');} if(buf[2]<TD2){write_com(0x80+0x40+0x02);write_dat('-');} elseif(buf[2]>TU2){write_com(0x80+0x40+0x02);write_dat('+');} else{write_com(0x80+0x40+0x02);write_dat('');}} else{L2=1;} write_com(0x80+0x40+0x03); shu_dis(buf[2]); write_dat(0xdf); write_com(0x80+0x40+0x0c); shu_dis(buf[0]); write_dat(table1[12]); } }}voidsearch1() //显示节点1设置界面{ ucharvalue; LCD_Init();//LCD初始化 write_com(0x80);//对应位置显示字符串 write_dat('T'); write_dat('1'); write_dat(':'); shu_dis(TD1); write_dat(''); write_dat('-'); shu_dis(TU1); write_dat(0xdf); write_com(0x80+0x40);//换行 write_dat('H'); write_dat('1'); write_dat(':'); shu_dis(HD1); write_dat(''); write_dat('-'); shu_dis(HU1); write_dat('%'); while(1) //一直循环 { if(key_check()==1) //按键检测有按键按下 {value=key_event(); //判断哪个键按下 if(aa==1) { if(value==1){bb=0;return;} switch(bb) //判断k3键按几下 { case5:bb=1;break; case1:{write_com(0x80+4);write_com(0x0c); //温度下限调节 TD1=TD1+cc;TD1=TD1-dd;cc=0;dd=0; shu_dis(TD1); }break; case2:{write_com(0x80+8);write_com(0x0c); //温度上限调节 TU1=TU1+cc;TU1=TU1-dd;cc=0;dd=0; shu_dis(TU1); }break; case3:{write_com(0x80+0x40+4);write_com(0x0c); //湿度上限调节 HD1=HD1+cc;HD1=HD1-dd;cc=0;dd=0; shu_dis(HD1); }break; case4:{write_com(0x80+0x40+8);write_com(0x0c); //湿度下限调节 HU1=HU1+cc;HU1=HU1-dd;cc=0;dd=0; shu_dis(HU1); }break; } } elsereturn; }}}voidsearch2()//显示节点2设置界面{ ucharvalue; LCD_Init(); write_com(0x80); write_dat('T'); write_dat('2'); write_dat(':'); shu_dis(TD2); write_dat(''); write_dat('-'); shu_dis(TU2); write_dat(0xdf); write_com(0x80+0x40); write_dat('H'); write_dat('2'); write_dat(':'); shu_dis(HD2); write_dat(''); write_dat('-'); shu_dis(HU2); write_dat('%'); while(1) { if(key_check()==1) {value=key_event(); if(aa==2) { if(value==1){bb=0;return;} switch(bb) { case5:bb=1;break; case1:{write_com(0x80+4);write_com(0x0c); TD2=TD2+cc;TD2=TD2-dd;cc=0;dd=0; shu_dis(TD2); }break; case2:{write_com(0x80+8);write_com(0x0c); TU2=TU2+cc;TU2=TU2-dd;cc=0;dd=0; shu_dis(TU2); }break; case3:{write_com(0x80+0x40+4);write_com(0x0c); HD2=HD2+cc;HD2=HD2-dd;cc=0;dd=0; shu_dis(HD2); }break; case4:{write_com(0x80+0x40+8);write_com(0x0c); HU2=HU2+cc;HU2=HU2-dd;cc=0;dd=0; shu_dis(HU2); }break; }} elsereturn; } }}voidmain(){ uchari; LCD_Init(); //lcd显示 write_com(0x80);//LCD地址 for(i=0;i<2;i++)//数据显示 { write_dat(table1[i]); } write_com(0x80+0x09); for(i=6;i<8;i++) { write_dat(table1[i]); } write_com(0x80+0x40); for(i=3;i<5;i++) { write_dat(table1[i]); } write_com(0x80+0x49); for(i=9;i<11;i++) { write_dat(table1[i]); } while(1) //没有按键按下 { read_th1(); delay_ms(200); //延迟0.2s read_th2(); delay_ms(200); if(key_check()==1) //有按键按下 {key_event(); //取键值函数 if(aa==1) //设置节点1 { search1(); //搜索节点1的原始设置值 LCD_Init(); write_com(0x80); for(i=0;i<2;i++) { write_dat(table1[i]); } write_com(0x80+0x09); for(i=6;i<8;i++) { write_dat(table1[i]); } write_com(0x80+0x40); for(i=3;i<5;i++) { write_dat(table1[i]); } write_com(0x80+0x49); for(i=9;i<11;i++) { write_dat(table1[i]); } } if(aa==2) //设置节点2 { search2(); LCD_Init(); write_com(0x80); for(i=0;i<2;i++) { write_dat(table1[i]); } write_com(0x80+0x09); for(i=6;i<8;i++) { write_dat(table1[i]); } write_com(0x80+0x40); for(i=3;i<5;i++) { write_dat(table1[i]); } write_com(0x80+0x49); for(i=9;i<11;i++) { write_dat(table1[i]); } } }}}目录TOC\o"1-2"\h\z\u12767前言 1159991总论 1289051.1编制依据 1215641.2环境影响识别和评估因子筛选 5287341.3评估标准 7269351.4评估范围 10313601.5区域环境概况 14267461.6主要环境保护目标 28137501.7桥西区污水处理厂 29211092项目政策相符性分析 30207522.1规划及产业政策符合性分析 30287112.2环境管理政策相符性分析 31137833建设项目工程概况 37247943.1工程概况 37HYP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 押题宝典质量员之装饰质量专业管理实务基础试题库和答案要点
- 学校突发应急预案
- 部编版一年级语文下册语文园地二 大单元教学设计
- 招投标管理制度 (二)
- 阻塞性睡眠呼吸暂停综合征对泪腺功能的影响:机制与临床关联探究
- 阶段性护理干预:化解慢性阻塞性肺疾病患者疲劳困境的密钥
- 阳离子掺杂与异质结结构协同优化Ta3N5光阳极电荷分离效率的研究
- 暖通面试笔试题及答案
- 出纳笔试题及答案
- 常识判断笔试题及答案
- 2025年湖北省孝感市事业单位人员招聘考试试题及答案详解
- 2024-2025学年广东省深圳市龙岗区北师大版五年级下册期末数学试卷(完整试题+详细解析)
- 2026云南师范大学能源与环境科学学院招聘科研助理岗位工作人员5人备考题库及参考答案详解1套
- 大型工业吊扇销售合同
- 2026云南临沧国投宏华招聘综合业务开单员3人备考题库及答案详解(必刷)
- 2026年潍坊房地产行业分析报告及未来发展趋势报告
- 2026年西安建筑科技大学《绿色建筑学报》编辑部招聘(3人)考试备考题库及答案解析
- 广州版小学综合实践三年级下学期教案全集
- 2025年CSCO肾癌诊疗指南解读
- 人教部编版七年级道德与法治上册让友谊之树常青23张
- 麻醉药品、第一类精神药品安全储存措施及管理制度
评论
0/150
提交评论