基于单片机的远程大棚温湿度监控系统毕业设计论文.docx_第1页
基于单片机的远程大棚温湿度监控系统毕业设计论文.docx_第2页
基于单片机的远程大棚温湿度监控系统毕业设计论文.docx_第3页
基于单片机的远程大棚温湿度监控系统毕业设计论文.docx_第4页
基于单片机的远程大棚温湿度监控系统毕业设计论文.docx_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

毕 业 设 计 论 文题 目:基于单片机的远程大棚温湿度监控系统学 院: 电气与信息工程学院 专 业: 电气工程及其自动化 摘 要本课题以远程大棚温湿度监控为研究目的,数据采集部分采用51单片机和dht11单总线数字式温湿度传感器,数据传输部分采用485总线电平标准。数据的集中处理部分采用了51单片机硬件上位机和pc软件上位机两种方案。51单片机上位机或pc软件上位机通过485电平和51单片机温湿度数据采集器通信。本课题根据市场的情况开发出了一个硬件上位机平台,其采集到温湿度信息后通过1602液晶进行实时显示。pc软件上位机是本课题提供的一个额外的新方案,采用python编程语言,利用其开发速度快的优点,在短时间内开发出了一个简单的软件上位机平台,软件上位机可以和硬件上位机可以轻松组成一个冗余系统。关键字:python编程,dht11温湿度,51单片机abstract the purpose of this topic is to remote greenhouse temperature and humidity monitoring. the data collection uses 51 mcu and dht11 single-bus digital temperature and humidity sensors. the data transmission part adopts 485-level standards. centralized data processing part uses two programs:a microcontroller hardware by 51 mcu and pc software moniter. the 51 single host computer or pc software pc communications through 485 levels, 51 single temperature and humidity data logger. this topic can be developed according to the market situation out of a pc hardware platform,after which the collected information in real-time display of temperature and humidity through 1602.pc software is an additional new program that provides in this topic,which uses python programming language,takes advantage of its speed in a short time developed a simple software pc platform.pc software is self-evident advantages.key words: python , dht11, 51mcu目 录摘要iabstractii目录iii第1章 引言11.1课题背景11.2 大棚温湿度监控系统系统发展现状11.3 本设计的主要工作2第2章 系统设计32.1 主要构成32.2 总体方案32.3 方案说明4第3章 温湿度采集点的设计53.1 工作原理53.2 硬件原理图63.3 stc89c52单片机63.3.1 简介63.3.2 引脚图73.3.3 串口通讯73.4 dht11数字温湿度传感器93.4.1 简介93.4.2 在本设计中的应用103.4.3 串行接口103.4.4 通信过程113.5 程序设计113.5.1 开发工具介绍113.5.2 c语言介绍123.5.3 c语言优点123.5.4 c程序设计13第4章 硬件上位机的设计214.1 工作原理214.2 lcd1602液晶224.2.1 简介224.2.2 引脚图224.3 硬件原理图234.4 程序设计244.4.1 设计算法244.4.2 宏定义和预处理244.4.3 子函数设计244.4.4 main函数和中断函数设计27第5章 软件上位机设计315.1 工作原理315.2 python语言简介315.3 所用库简介325.3.1 pygame325.3.2 pyserial335.4 python语言特点335.4.1 python 数据类型335.4.2 python强制缩进345.5 程序设计345.5.1 源代码345.5.2 exe程序制作385.6 程序运行界面39第6章 设计总结416.1 设计过程中遇到的问题及解决方法416.2 展望41参考文献42致谢43附录:44附录a:44第1章 引言1.1课题背景 温湿度是工业、农业生产中常见的和最基本的参数之一,在生产过程中常常需要对温湿度进行检测和监控。采用现代技术进行温湿度检测、数字显示、信息存储及实时显示,对于提高农业生产效率和产品质量、节约能源等都有重要的作用。伴随农业科技的发展,温湿度测量需求越来越多,也越来越重要,但是在许多特定环境温度检测环境范围大、精度要求高。这就要采用现场总线技术对温湿度进行采集和控制。 我国的农业生产自改革开放以来取得了可喜可贺的成绩的同时,也凸现出了越来越多的问题,这些问题严重制约我国农业可持续发展,如果得不到及时解决,将成为发展中的瓶颈。其存在的问题有:首先是我国人口众多,其次是资源短缺,再次是我国农业生产的农产品成本高以及科技含量低,没有形成规模产业。解决这些问题的关键在于我国农业实现从传统农工业向以高效、优质、高产为目的的现代科技农业转型。农业环境以高效、优质、高产为目的的科技控制手段,有利于推动温室技术设备的大面积推广,缩小与国外技术的差距,加快我国农业现代化进程。 结合我国现在大棚种植的现状,本课题研究了单片机作为核心控制器实现对于温湿度的实时采集、传输。对于大棚种植的现代化,智能化具有重大的意义。1.2 大棚温湿度监控系统系统发展现状目前,大棚温湿度监控系统大多采用模拟温度检测传感器,ad转换芯片以及单片机构成的传输系统,这种温湿度度采集系统需要在温室大棚内布置大量的测温电缆,才能把现场传感器的信号送到采集卡上,安装和拆卸繁杂,成本也高。同时线路上传送的是模拟信号,易受干扰和损耗,测量误差也比较大。显然,这种温湿度监控系统已经满足农业生产要求了,对于现在的大棚温湿度测温系统我提几种不足: 室内布线复杂 传统的温湿度测试系统需要在室内布置大量的电缆,这需要大量的耗费的人力、物力。这也间接增加了农业生产成本. 传输不稳定 由于传统的温湿度测试系统是通过模拟信号传输的,由于模拟信号对于干扰很敏感,极易受干扰。这样很可能导致信号在传输过程中失真和变形。1.3 本设计的主要工作 鉴于大棚温湿度监控系统的现状,本设计研究了以单片机和数字式温湿度传感器为核心部件的大棚温湿度监控系统。现给出如下的解决方案: stc89c52作为核心控制器 8051系列单片机芯片是从其诞生到目前都是一款非常常用的一款微控制器。stc是目前国内最受欢迎的单片机生产商,本设计采用了stc89c52单片机,其内部有丰富的i/o资源。stc具有串口isp功能,可以很方便的通过串口进行flash的在线烧写。由于其价格比较低廉、工作稳定、抗干扰性强已经成为了微控制器的首选产品 dht11作为温湿度传感器 由于模拟温湿度传感器传输不稳定,易受干扰,而且其需要大量的外部器件作为配合才能够完成温湿度采集,本设计采用数字式温湿度传感器dht11。其采用了单总线结构,只需要占用单片机一个i/o口,这样就简化了布线。由于无需a/d转换,还为开发提供了便利。 采用串口通信 stc89c52单片机内部有一个串口资源,可以用于串口通信。波特率采用了业内最通用的9600bps。数据采集采用“询问”方式,这样可以避免了通信中产生冲突。本设计以以上的方案为基准进行设计,完成了两点的温度采集然后通过串口发送到硬件上位机端进行温湿度的实时显示的程序以及硬件开发。第2章 系统设计2.1 主要构成本大棚远程温湿度监控系统主要由监测系统、执行机构、上位机平台三大部分构成。本设计以简单的一个大棚为例进行方案的设计。监测系统:主要是温湿度采集点、状态控制器。 温湿度采集点主要完成远程温湿度的采集然后通过485总线及时发送温湿度信息,以供远方上位机能够获取到相关信息。例如:当温湿度采集点接收到远方上位机发送来的请求温湿度数据时,其会立即采集大棚内的温湿度信息,然后通过485总线把采集到的温湿度信息发送给上位机。 状态控制器主要完成根据上位机的指令完成执行机构状态的采集和控制例如:当状态控制器接收到远方上位机发送来的请求大棚通风机状态时,其会立即采集大棚通风机的状态然后通过485总线把大棚通风机状态发送给上位机。当状态接收器接收到远方上位机发送来的关闭大棚通风机指令时,其会立即终止大棚通风机的工作,然后向远方上位机发送执行完毕指令高速上位机指令已执行。执行机构:主要由大棚通风机、透光控制单元构成。 大棚通风机主要完成大棚内湿度的控制,当大棚通风机接收到状态控制器的控制信息的时候,其会启动调节大棚内的湿度,直到接收到状态控制器的停止指令为止。 透光控制单元主要完成大棚内温度的调节和控制,当大棚透光控制单元接收到状态控制器的控制信息的时候,透光控制单元开始工作,直到接收到状态控制器的停止指令为止。上位机平台:主要由硬件上位机、软件上位机组成。 硬件上位机主要进行和监测系统、执行机构的数据交互,当需求温湿度信息的时候,向监测系统发送请求温湿度信息指令。当需要对大棚通风机进行控制的时候,向状态控制器发送大棚通风机控制指令。 软件上位机主要是对硬件上位机进行互补,当硬件上位机出现故障无法工作可以切换到软件上位机。软件上位机拥有硬件上位机的所有功能。2.2 总体方案本大棚远程监控系统以一个单个蔬菜大棚进行方案设计,系统包括四个大棚通风机、一个透光控制单元、六个温湿度采集点、两个状态控制器、一个硬件上位机、一个软件上位机。其中硬件上位机和软件上位机构成冗余系统,正常情况下硬件上位机工作,当硬件上位机出现故障的时候,可以切换到软件上位机系统。从而保证了增强了上位机的稳定性和容灾能力。采用常规的485电平通信。系统方案图如下图所示:图2.1 系统平面图2.3 方案说明 本方案主要是对单个大棚进行的温湿度监控系统,内部包含了温湿度的采集、状态控制器对各单元的控制、通风机的工作条件等。大棚种植中最重要的两个指标就是温湿度,大棚温湿度远程监控系统实际上相当于一个大棚种植自动化系统。 大棚温湿度远程监控系统模块众多且内部原理相当复杂,在短期内靠单人能力完成整个系统而且能够直接应用到大棚领域几乎是无法完成的。所以本设计对此方案中的3个重点模块进行了实物开发,并且完成了实物,验证了可行性。可以作为大棚温湿度远程监控系统相关模块开发的一个参考。此三个模块分别为温湿度采集点、硬件上位机、软件上位机。其中软件上位机中率先采用了python编程语言,可以作为开发类似功能的一个参考。第3章 温湿度采集点的设计3.1 工作原理 温湿度采集点采用了目前最为常用的stc89c52单片机作为微控制器,dht11作为温湿度监控系统传感器,data线连接到p2.0口,串口作为主要通信端口。串口接max13487芯片转换成485电平进行远距离传输。单片机串口处于监听通信状态,一旦串口接收到和和自己相关的特定字符串就开始一次温湿度度采集,采集完后立即通过串口发送。温湿度采集点1大致流程如3.1图所示: 图:3.1 温湿度采集点1工作流程3.2 硬件原理图 硬件部分主要由stc89c52、dht11温湿度传感器 max13487(485电平转换)组成。 温湿度采集点原理图如下图所示:图3.2 硬件原理图3.3 stc89c52单片机3.3.1 简介stc89c52是stc公司生产的一种低功耗、高性能cmos8位微控制器,具有 8k 在系统可编程flash存储器。stc89c52使用经典的mcs-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位cpu 和在系统可编程flash,使得stc89c52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节flash,512字节ram, 32 位i/o 口线,看门狗定时器,内置4kb eeprom,max810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 stc89c52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu 停止工作,允许ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35mhz,6t/12t可选。3.3.2 引脚图本模块中用到的单片机为stc89c52,由于通信中使用了9600bps的波特率,采用了11.0592mhz晶振,其引脚如下图所示: 图3.3 51单片机引脚图3.3.3 串口通讯本次设计中,用到了大量的串口通信,采用的是8位异步串行方式,波特率为最常用的9600bps。以下对51单片机的串行口相关部分进行了详细的介绍。51单片机内部有一个可编程的双向全双工串行通信接口,简称串口;该串口有4种工作方式,以适用于不同场合;其波特率由单片机内部的定时器/计数器产生,可由软件设置;接收和发送均可工作在查询模式和中断模式,比较灵活。51单片机内部的串口拥有两个物理上相互独立的接收、发送缓冲器sbuf,可以同时接收和发送数据;发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入;两个缓冲器占用同一个地址(99h);控制mcs-51单片机串口的寄存器有两个scon和pcon。串口工作方式控制寄存器scon(99h)如下图所示:图3.4 scon寄存器 sm0和sm1:控制单片机的工作方式; sm2:允许方式2和方式3进行多机通信控制位; ren:允许串行接收控制位;1-允许接收;0-禁止接收; tb8:用于工作在方式2和方式3时存放要发送的第9位数据,根据需要,由软件设置; rb8:用于工作在方式2和方式3时存放接收到的第9位数据; ti:发送中断标志位,必须由软件清0;当发送完一帧数据时,就产生一个中断,此时ti被硬件自动置1,用于标记产生了发送中断; ri:接收中断标志位,必须由软件清0;当接收完一帧数据时,就产生一个中断,此时ri被硬件自动置1,用于标记产生了接收中断;特殊功能寄存器pcon(87h)如下图所示:图 3.5 pcon寄存器 smod:波特率倍增位:当smod=1时,波特率加倍;当smod=0时,波特率不加倍; gf1和gf0:两个通用标志,供用户使用; pd和idl:cmos型8051单片机的低功耗控制位;串口的工作方式有4种,由特殊功能寄存器scon的sm0位和sm1位共同决定,当sm0 sm1取不同的值的时候,串口对应不同的工作方式。对应关系如下图所示:图 3.6 串口的工作方式 方式0: 该方式下串口为同步移位寄存器输入/输出方式,其波特率固定不变为fosc/12;数据由rxd(p3.0)口输入/输出,同步移位脉冲由txd(p3.1)端输出,发送接收的都是8位数据,低位在先。 方式1: 当sm0 sm1=01时,串口以该方式工作,此时的串口为8位异步通信接口。 方式2: 当sm0 sm1=10时,串口以该方式工作,此时发送和接收的都是一帧数据,即:由11位组成,其中第1位是起始位,接下来的8位是用户数据(低位在先),然后是1位可编程位(第9位数据),最后一位是停止位;rb8/tb8根据需要,设置成0或1,作为多机通信中的地址数据标志位或数据的奇偶检验位。 方式3:当sm0 sm1=11时,串口以该方式工作,该方式是波特率可变的9位异步通信方式,除了波特率外,方式3与方式2相同。目前,在串口的应用中多采用8位异步串行方式,即为方式1,在本次设计中,为了保持兼容性,串口一律采用了方式1,波特率采用9600bps。3.4 dht11数字温湿度传感器3.4.1 简介dht11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个ntc测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个dht11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在otp内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。3.4.2 在本设计中的应用产品为4针单排引脚封装。dht11的供电电压为 35.5v。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(vdd,gnd)之间可增加一个100nf 的电容,用以去耦滤波,5k的上拉电阻用于增加数据传输稳定性。下图中data1为p2.0口的网络标号。dht11在本设计中应用如下图:图 3.7 dht11在本设计中的应用3.4.3 串行接口dht11的2pin为其data引脚,其是一个单线双向串行接口data 用于微处理器与dht11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据”所得结果的末8位。3.4.4 通信过程通信时序图如下图所示:图 3.8 dht11通信时序图 一次正常的数据读取应该如下: 初始化阶段: 主机拉低总线18ms或大于18ms,dht11模块被唤醒。 主机把data线置高电位,总线开始等待dht11把其拉低。 总线被模块拉低后,单片机等待总线被拉高。 总线被模块拉高后,单片机等待总线被拉低。 数据包传输阶段: 总线被模块拉低后开始第一位的传输 每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1,若高电平时间小于30us此位为0,若高电平时间大于30us此位为1。3.5 程序设计3.5.1 开发工具介绍 本次开发所用工具为keil uv2,其是德国keil software公司出品的51系列兼容单片机c语言软件开发系统,使用接近于传统chyperlink /view/1219.htm语言的语法来开发,与汇编相比,chyperlink /view/1219.htm语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。keilc51标准c编译器为8051微控制器的软件开发提供了c语言环境,同时保留了汇编代码高效,快速的特点。c51编译器的功能不断增强, 使你可以更加贴近cpu本身,及其它的衍生产品。3.5.2 c语言介绍 c语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔实验室的dennis m. ritchie于1972年推出,1978年后,c语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到c语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。 c语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐。最近25年是使用最为广泛的编程语言。3.5.3 c语言优点 c语言是运行速度最快的可读编程语言,其运行速度仅次于汇编。其在单片机开发方面具有其他编程语言不具有的优点。不懂得单片机的指令集,也能够编写完美的单片机程序;无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;不同函数的数据实行覆盖,有效利用片上有限的ram空间;程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。c语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏;c语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址;提供small、compact、large等编译模式,以适应片上存储器的大小;中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由c编译器代办;提供常用的标准函数库,以供用户直接使用;头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉;可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。3.5.4 c程序设计c程序设计采用模块化结构,对dht11采集部分进行封装成头文件。main函数中调用其子函数即可实现读取温湿度,这样使得程序简单易懂,而且更具有条理性。 01号温湿度采集点程序用到了三个文件,分别是dht11.h、dht11.c、main.c。01号温湿度采集点程序所完成的功能为:串口一直处于监听状态,一旦串口收到数据0x01便触发一次温湿度采集,采集完后立即将8位温度数据和8位湿度数据依次发送出去。其总算法如下图所示:图 3.9 温湿度采集点1的总算法dht11.h文件为一个声明部分,对于程序中用到的宏定义进行声明。其内容如下:#ifndef _dht11_h_ /定义一个宏,防止文件被重复include出现#define _dht11_h_ /重复定义#define ok 1 /定义一个宏ok 代表常量1#define error 0 /定义一个宏error代表常量0extern void delay_1ms(unsigned int ms);/声明一个外部函数eelay_1ms()extern unsigned char dht11_readtempandhumi();/声明一个外部函数#endifdht11.c为温湿度读取子函数的实现部分,其对温湿度读取子函数进行定义,以供外部调用。其主要算法如下图所示:图 3.10 dht11.c 温湿度读取子函数算法c代码内容如下:#include dht11.h /头文件包含#include sbit dht11=p20; /声明dht11 data连接线#define number 20#define size 5static unsigned char status; /定义全局变量static unsigned char value_arraysize; /定义数组存放dht11一帧数据unsigned char temp_value,humi_value; /定义两个全局变量存放温度 湿度static unsigned char dht11_readvalue(); /声明 数据读取子函数extern void delay_1ms(unsigned int ms) /延时x毫秒子函数 unsigned int x,y; for(x=ms;x0;x-) for(y=110;y0;y-);static void dht11_delay_10us(void) /延时10us子函数 unsigned char a; for(a=3;a0;a-);static unsigned char dht11_readvalue()/温湿度采集读取数据部分子函数 unsigned char count,value=0,i; status=ok; for(i=8;i0;i-) value=1; count=0; while(dht11=0); /wait up dht11_delay_10us(); dht11_delay_10us(); dht11_delay_10us(); if(dht11=1) value+;while(dht11=1); return(value);extern unsigned char dht11_readtempandhumi(void)/温湿度采集子函数 unsigned char i=0,check_value=0,count=0; /定义一些局部变量 dht11=0; delay_1ms(20); /拉低data线20ms dht11=1; dht11_delay_10us(); dht11_delay_10us(); dht11_delay_10us(); dht11_delay_10us(); /拉高data线40us if(dht11=1) return error; else while(dht11=0); /data线 被dht11拉低,等待拉低结束 dht11=1;while(dht11=1);for(i=0;isize;i+) /data线 被dht11拉高,等待拉高结束value_arrayi=dht11_readvalue();/调用读取数据子函数humi_value=value_array0;/读取到的湿度部分赋值给humi_valuetemp_value=value_array2;/读取到的温度部分赋值为temp_value main.c为主程序,调用dht11.c中的函数完成整个温湿度的采集,其中当串口接收到0x01时,flag为1,flag为1触发一次温湿度采集。其算法如下图:图3.11 01温湿度采集点main.c算法main.c代码如下:#includedht11.h /导入dht11.h文件#includedht11.c /导入dht11.c文件/#include#include /导入标准输入输出库unsigned char flag,a; /定义2个全局变量用于标识一些信息void main() /main函数 /dht11=1;scon=0x50;tmod=0x20;th1=0xfd;tl1=0xfd;tr1=1;ea=1;es=1; /串口初始化,工作方式1,波特率9600bps/delays(3); while(1) /进入函数主循环 if(flag=1) /判断flag是否为1 dht11_readtempandhumi();/如果flag=1,调用温湿度采集子函数 p1=temp_value;/将temp_value赋值为p1口,用于程序测试,可删 flag=0; /flag置0 es=0; /关闭串口中断 sbuf=temp_value; /发送温度数据 while(!ti); /等待发送完毕 ti=0; /发送中断标志置0 sbuf=humi_value; /发送湿度数据 while(!ti); /等待发送完毕 ti=0; /发送中断标志置0 es=1; /打开串口中断 void serial()interrupt 4 /串口中断子程序 ri=0; /接收中断标志位清零 a=sbuf; /读取接收到的数据 if(a=0x01) /判断接收到的数据是否为0x01 flag=1; /若接收到的数据位0x01,flag置1 02号采集点程序也是用到了3个文件,分别是dht11.h、dht11.c、main.c。 02号温湿度采集点程序所完成的功能为:串口一直处于监听状态,一旦串口收到数据0x02便触发一次温湿度采集,采集完后立即将8位温度数据和8位湿度数据依次发送出去。02号温度采集点所用到的dht11.h、dht11.c和上面的相同,只是其main.c不同,其main.c内容算法如下图:图 3.12 02温湿度采集点main.c算法main.c代码如下:#includedht11.h /导入 dht11.h#includedht11.c /导入 dht11.c/#include#include /导入标准输入输出库stdio.hunsigned char flag,a; /定义两个全局变量void main() /main函数scon=0x50;tmod=0x20;th1=0xfd;tl1=0xfd;tr1=1;ea=1;es=1; /对串口进行初始化while(1) /进入函数主循环 if(flag=1) /判断flag是否为1 dht11_readtempandhumi();/如果flag是1,调用温湿度采集子函数 p1=temp_value; /将temp_value赋值给p1,用于程序测试,可删 flag=0; /flag置0 es=0; /关闭串口中断 sbuf=temp_value;/发送温度数据 while(!ti);/等待发送完毕 ti=0; /发送中断标志清零 sbuf=humi_value;/发送湿度数据 while(!ti);/等待发送完毕 ti=0; /发送中断标志清零 es=1; /打开串口中断 void serial()interrupt 4 /串口中断子程序 ri=0; /接收中断标志清零 a=sbuf; /读取接收到的数据 if(a=0x02) /判断接收到的数据是否为0x02 flag=1; /若为0x02,flag置1第4章 硬件上位机的设计4.1 工作原理硬件上位机采用了stc89c52单片机作为核心微控制器、串口作为通信手段、485作为通信电平标准、lcd1602作为显示终端的设计方案。stc89c52通过串口向温湿度采集点发送0x01采集到01温湿度采集点的温湿度信息,然后再通过串口向温湿度采集点发送0x02采集到02温湿度采集点的温湿度信息,最后通过1602液晶进行实时显示。这样就完成了一次温湿度采集,如此循环下去就可以实现实时监测远方温度。其流程图如图4.1所示:图4.1 硬件上位机流程图4.2 lcd1602液晶4.2.1 简介1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义cgram,显示效果也不好)。1602lcd是指显示的内容为16x2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于hd44780液晶芯片的,控制原理是完全相同的4.2.2 引脚图 本模块中用到的lcd 1602引脚图如下所示: 图4.2 lcd1602引脚图 1602采用标准的16脚接口,其中: 第1脚:vss为电源地 第2脚:vcc接5v电源正极 第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。 第4脚:rs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:rw为读写信号线,高电平1时进行读操作,低电平0时进行写操作。 第6脚:e(或en)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第714脚:d0d7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。4.3 硬件原理图硬件部分主要由stc89c52单片机、max13487(485电平转换芯片)、1602液晶显示屏组成,其中晶振采用11.0592mhz。 硬件上位机原理图如下图所示:图 4.3 硬件上位机原理图4.4 程序设计4.4.1 设计算法单片机先进行1602初始化,然后通过串口发送0x01 延时200ms等待接收中断,接收到数据后立即读取到一个全局变量,再次通过串口发送0x02 延时200ms等待接受中断,接收到数据后立即读取到一个全局变量。最后通过字符串处理手段把数据嵌入到2个数组内,然后把这两个数组的内容显示到1602液晶,这样就完成了一次温湿度显示。串口再次发送0x0 宏定义和预处理 在程序的开始部分要进行位声明,库函数引用声明。#include /头文件包含sbit lcden=p25; /lcd 使能端引脚声明sbit lcdrs=p10; /lcd 寄存器选择端引脚声明sbit dula=p26; /锁存器相关引脚声明,可删sbit wela=p27; /锁存器相关引脚声明,可删sbit lcdrw=p11; /lcd 读写端引脚声明 定义一些程序内用到全局变量,用于显示的全局数组。由于lcd显示部分用的是8bit数据,故采用了unsigned char 数据类型。也可以采用char 数据类型。unsigned char aa,b,c,d,flag,num;unsigned char table116=temp: humi: ;/lcd 第一行显示部分unsigned char table216=temp: humi: ;/lcd 第二行显示部分4.4.3 子函数设计 由于程序内部要用到大量的相同的操作,所以定义了一些经常重复使用的函数。这样能够使得程序可读性更好,更具有条理性。延时子函数组:要是通过for语句实现,让单片机一直执行for语句的代码块,这样就会消耗一定的执行时间。根据这个原理,我们定义了一个延时子函数用于程序中需要进行延时处理的地方直接调用。for语句延时常常用于毫秒级的延时,延时所用到的算法如下:图 4.4 delayms算法流程图void delayms(unsigned char xms)/定义delayms函数 参数类型为unsigned char unsigned char i,j; /定义局部变量i,j for(i=xms;i0;i-) /for循环体 for(j=110;j0;j-);向1602液晶写命令子函数:先选择模式为写命令模式,然后写入数据,进行延时。再让液晶使能端产生一个负跳变执行指令。程序流程如下:图4.5 1602写命令子函数流程图void write_com(unsigned char com)/定义write_com函数lcdrs=0; /lcdrs置0,选择写命令模式p0=com; /p0输出数据 delayms(5); /延时5mslcden=1; /lcden置1delayms(5); /延时5ms lcden=0; /lcden置0 ,lcden完成了一个负跳变向1602液晶写数据子函数:先选择模式为写数据模式,然后写入数据,进行延时。再让液晶使能端产生一个负跳变存储数据。

温馨提示

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

评论

0/150

提交评论