您的当前位置:首页正文

基于STC89C52单片机的温湿度检测系统设计

2020-12-29 来源:步旅网
江苏技术师范学院课程设计说明书

基于STC89C52单片机的温湿度检测系统设计

摘要:

温湿度是生活生产中的重要的参数。本设计为基于单片机的温湿度检测与控制系统,采用模块化、层次化设计。用新型的智能温湿度传感器DHT11主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和处理,为显示和报警电路提供信号,实现对温湿度的控制报警。报警系统根据设定报警的上下限值实现报警功能,显示部分采用LCD1602液晶显示所测温湿度值。系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。

关键词:单片机;温湿度传感器; LCD显示 Summary:

Temperature and humidity is important in the life of the production parameters. The design of microcontroller-based temperature and humidity measurement and control system, modular, hierarchical design. With the new intelligent temperature and humidity sensors DHT11 main achievement of the temperature, humidity testing, the temperature and humidity sensor signal acquisition and signal into digital signal, then the use of single-chip STC89C52RC for data analysis and processing, to provide for the display and alarm circuit signal, the control of temperature and humidity alarm. Alarm system alarm according to the upper and lower limits set an alarm function, some use LCD1602 display the temperature and humidity values. System circuit is simple, highly integrated, stable, easy debugging, high precision and has some practical value.

Keyword:SCM; temperature and humidity sensor; LCD display

1

江苏技术师范学院课程设计说明书

目录

第1章 概述 ................................................ 3 1.1课题背景 ..........................................................................................................3 1.2主要内容 ..........................................................................................................3 第2章 系统总体方案设计 .................................... 4 2.1 温湿度传感器 .................................................................................................5

1、DHT11产品概述 .........................................................................................5 2、引脚说明 ....................................................................................................5 3、电源引脚 ....................................................................................................6 4、串行接口(单线双向) ................................................................................6 2.2 RS232接口 ....................................................................................................6 2.3 单片机STC89C52 ............................................................................................6

1、主要特性如下: .........................................................................................7 2、 STC89C52RC单片机的工作模式 ..............................................................7 第3章 系统的硬件设计和连接 ............................... 10 3.1、时钟电路 ............................................. 10 3.2、复位电路 ...................................................................................................... 11 3.3、晶振电路 ............................................. 11 3.4、LCD1602 .............................................. 12 3.5、报警电路 ............................................. 13 第4章 仿真软件介绍 ....................................... 14 4.1、Proteus软件 ......................................... 14 4.2、Keil C51软件 .............................................................................................15 第5章 硬件电路的调试 ..................................... 16 第6章 总结 ............................................... 17 参考文献 .................................................. 18 附录: .................................................... 19

2

江苏技术师范学院课程设计说明书

第1章 概述

1.1课题背景

温湿度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用。在生产中,温湿度的高低对产品的质量影响很大。由于温湿度的检测控制不当,可能使我们导致无法估计的经济损失。为保证日常工作的顺利进行,首要问题是加强生产车间内温度与湿度的监测工作,但传统的方法过于粗糙,通过人工进行检测,对不符合温度和湿度要求的库房进行通风、去湿和降温等工作。这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大,随机性大。目前,在低温条件下(通常指100℃以下),温湿度的测量已经相对成熟。利用新型单总线式数字温度传感器实现对温度的测试与控制得到更快的开发。但人们对它的要求越来越高,要为现代人工作、科研、学习、生活提供更好的更方便的设施就需要从数字单片机技术入手,一切向着数字化,智能化控制方向发展。

对于国内外对温湿度检测的研究,从复杂模拟量检测到现在的数字智能化检测越发的成熟,随着科技的进步,现在的对于温湿度研究,检测系统向着智能化、小型化、低功耗的方向发展。在发展过程中,以单片机为核心的温湿度控制系统发展为体积小、操作简单、量程宽、性能稳定、测量精度高,等诸多优点在生产生活的各个方面实现着至关重要的作用。

温湿度传感器除电阻式、电容式湿敏元件之外,还有电解质离子型湿敏元件、重量型湿敏元件(利用感湿膜重量的变化来改变振荡频率)、光强型湿敏元件、声表面波湿敏元件等。湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元件要长期暴露在待测环境中,很容易被污染而影响其测量精度及长期稳定性。

1.2主要内容

本文设计的是基于单片机STC89C52的温湿度检测和控制系统,主要以广泛应用的DHT11作为温度和湿度的检测,该仪器具有测量精度较高、硬件电路简单、并能很好的进行显示,可测试不同环境温湿度的特点。另外和控制电路相连,可以进行加湿电路和除湿电路的控制,使温度和湿度参数在预先设定的范围内,不需要人的直接参与。

3

江苏技术师范学院课程设计说明书

单片机是系统的控制核心,所以单片机的性能关系到整个系统的好坏。因此单片机的选择,对所设计系统的实现以及功能的扩展有着很大的影响。本设计中,最终选用的集成温度传感器DHT11,采集到的温湿度信号送至单片机,实现温湿度的显示与控制。

系统主要由以上元器件组成,通过硬件电路和软件程序的设计,实现系统的基本功能。

第2章 系统总体方案设计

用新型的智能集成温温度传感器DHT11主要实现检测温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和处理,为显示和报警电路提供信号。

温湿度度采集模块 LCD显示 PC机 单片机控制模块 键盘输入 报警模块 电源模块

4

江苏技术师范学院课程设计说明书

2.1 温湿度传感器 1、DHT11产品概述

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。

2、引脚说明

引脚号

引脚名称 类型 引脚说明

1 VCC 电源 正电源输入,3V-5.5V DC 2 Dout 3 NC 4 GND

5

输出 单总线,数据输入/输出引脚 空 空脚,扩展未用 地 电源地

江苏技术师范学院课程设计说明书

3、电源引脚

DHT11的供电电压为

3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在

此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。

4、串行接口(单线双向)

DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右, 用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。

2.2 RS232接口

RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。 该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9。

2.3 单片机STC89C52

STC89C52是一种低功耗、高性能CMOS八位微控制器,具有8K在系统可编程Flash

6

江苏技术师范学院课程设计说明书

存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许ROM在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使其为众多嵌入式控制应用系统提供灵活的解决方案。

1、主要特性如下:

1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051

2.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)

3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz 4.用户应用程序空间为8K字节 5.片上集成512字节RAM

6.通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻

7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成

8.具有EEPROM功能 9. 具有看门狗功能

10.共3个16位定时器/计数器。即定时器T0、T1、T2

11.外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒

12.通用异步串行口(UART),还可用定时器软件实现多个UART 13. 14.

工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) PDIP封装

2、 STC89C52RC单片机的工作模式

掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序 空闲模式:典型功耗2mA

7

江苏技术师范学院课程设计说明书

正常工作模式:典型功耗4Ma~7mA

掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备

如图所示STC89C52芯片的引脚图

VCC:电源 Vss:地

P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。

P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,

8

江苏技术师范学院课程设计说明书

通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。

此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。

P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX @DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX @R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。

在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。 P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。

在对Flash ROM编程或程序校验时,P3还接收一些控制信号。

RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。

ALE/PROG (30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚也用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

9

江苏技术师范学院课程设计说明书

PSEN(29引脚):外部程序存储器选通信号是外部程序存储器选通信号。当AT89C51RC从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而访问外部数据存储器时,PSEN 将不被激活。

EA/VPP(31引脚):访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令, EA必须接GND。注意加密方式1时,EA 将内部锁定位RESET。为了执行内部程序指令,EA 应该接VCC。在Flash编程期间,EA 也接收12伏VPP电压。

XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18引脚):振荡器反相放大器的输入端。

第3章 系统的硬件设计和连接

3.1、时钟电路

STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。

外部方式的时钟电路如图所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。

10

江苏技术师范学院课程设计说明书

3.2、复位电路

RST引脚是单片机复位端,高电频有效。在引脚端输入至少连续两个单片机周期的高电频,单片机复位。使用时,在引脚与VSS引脚之间接一个10KΩ的下拉电阻,与VCC引脚之间接一个约10μF的电解电容,即可保证上电自动复位。

3.3、晶振电路

在单片机电路中晶振的作用非常大,结合单片机内部的电路,产生单片机所必需的时钟频率,单片机的一切指令的执行都是建立在晶振的基础上。

晶振利用一种特殊的晶体,在电能和机械能之间相互转化产生共振,提供稳定精确的单频震荡,为系统提供基本的时钟信号。

11

江苏技术师范学院课程设计说明书

3.4、LCD1602

工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线

VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。

VCC1P020P031P042P053P064P075P086P097P20R1VCC23456789U3LCD1602LCD1602VSSVCCEA0A1A2A3A4A5A6A7ABLBLKV0RSRWP25P26P27P00P01P02P03P04P05P06P07VCCW110K12345678190111213141516VCC排阻1602对比调节

12

江苏技术师范学院课程设计说明书

3.5、报警电路

根据单片机接收到的数据经过处理后与该参数设定的上下限进行比较,高于上限值(或低于下限值)则进行报警,同时能进行正常的显示。

13

江苏技术师范学院课程设计说明书

报警电路中,以红色发光二极管构成,在输入温湿度的上下限后,系统进行实时采样,并判断测试温湿度与输入温湿度间的差异,当检测出的温湿度在设定的温湿度上下限外就会报警。

第4章 仿真软件介绍

软件调试主要使用Proteus软件和Keil C51软件。在软件调试中,首先在Proteusz中绘制电路图,并设置各元器件的参数。然后在Keil C51软件编写程序,并编译后输入PROTEUS中进行仿真。

4.1、Proteus软件

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。Proteus软件除了其具有和其它EDA工具软件的一样的原理布图,还可以电路仿真。不止是对单片机的仿真还对其外围器件进行仿真。其特点是:

14

江苏技术师范学院课程设计说明书

实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD 系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。如68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在改软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision3等软件。支持大量的外围芯片和存储器,具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

4.2、Keil C51软件

Keil C51软件是Keil Software公司推出的uVision3,是一款可用于多种8051 MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。其提供逻辑分析器,可监控基于MCU I/O引脚和外设状态变化下的程序变量。编辑的C或汇编文件,分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的HEX文件,以供调试器使用进行源代码调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

注意晶振的频率,默认的是11.0592MHz,可以根据需要修改。调试时注意PC机与仿真器之间始终保持通信联络,导致独立Keil仿真器上一个指示数据接收的LED不断闪亮。

使用Keil C51时,打开界面,并非即刻能够编辑程序的窗口,需要新建文件和设置,其步骤如下:

打开Keil的操作界面,在“Project”中选择“New uVision Project…”新建一

15

江苏技术师范学院课程设计说明书

个文件,并命名(注意此时命名时不需要加后缀),如“温湿度”即可,确定后会弹出选择单片机的窗口。在相应的产品里选择所需要的单片机型号,本设计所用的单片机是Atmel AT89S52,则在相应的栏目里选中。然后接下来的窗口选择“是”,然后新建,在页面里面编辑程序,命名,要注意的是这次命名需要加后缀,如“温湿度.c”。

在主窗口侧边栏找到“Target 1”,右击其子标题栏“Source Group 1”选择“Add Files to Group ‘Source Group 1’”。选择保存的“温湿度.c”文件添加,并在下拉单点击打开,此时,编译开始,指示灯亮。顺序编译,若出现错误,编译窗口下会出现错误提示,双击错误提示,则插入符号将出现在有错的地方,根据提示对程序进行修改,保存,再编译至无错,否则无法生成“HEX”格式。

在主菜单栏里选择“Project”按出下拉单,选择“Options for Target ‘Target 1’”,在该窗口下,将晶振的频率(Xtel (MHz))设置为12MHz,然后选择“Output”在“Create HEX File”前面打钩,OK。在继续编译后出现“create hex file from…”,编译完成,此时文件就可以被单片机识别应用,导入即可。

第5章 硬件电路的调试

按照系统设计,将系统需要的各个组件连接好。 根据实验说明书,了解各个组件的工作原理。

调试DHT11芯片。运行,观察现象。现象正确,说明DHT11正常,可以使用。 调试LCD1602芯片。调用测试程序,运行,观察现象。现象正确,说明LCD1602液晶显示正常,可以使用。

调试键盘,自己编写键盘键值确定程序,运行,观察现象。现象正确,说明键盘扫描正常,可以使用。

焊接完成后检查电路板焊接情况,用万用表检查电路是否存在短路、虚焊。检查完毕确认没有问题的情况下加电测试。

用户温度输入数据时上限、下限分别在LCD1602显示,湿度输入数据时上限、下

16

江苏技术师范学院课程设计说明书

限也在LCD1602显示。读键存储的过程是循环程序。可循环等待直到用户输入正确并确认为止。

第6章 总结

在设计中,主要是以STC89C52单片机为核心,对温度和湿度的检测与控制智能化进行了简单的设计与阐述。对MCS-51单片机系统的温湿度检测控制原理与结构进行了论述。本次设计可以说是软硬结合,又以硬件为主,软件程序为辅。给出了检测系统与控制系统的各部分电路以及相对应的程序。采用模块化、层次化设计。用温温度传感器DHT11主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和处理,为显示和报警电路提供信号,实现对温湿度的控制报警。报警系统根据设定报警的上下限值实现报警功能,显示部分采用1602液晶显示所测温湿度值。实验证明该设计系统实现了对环境温湿度精确控制,达到了相应的效果,系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。

17

江苏技术师范学院课程设计说明书

参考文献

[1]李勋,刘源.单片机实用教程[M].北京:北京航空航天大学出版社,2006. [2]钱晓捷.汇编语言程序设计[M].北京:电子工业出版社,2000.

[3]李勋.单片机微型计算机大学读本[M].北京:北京航空航天大学出版社,2002. [4]吴金戌.8051单片机实践与应用[M].北京:清华大学出版社,2002. [5]付晓光.单片机原理与应用技术[M].北京:清华大学出版社,2004. [6]李维祥.MCS-51单片机原理与应用[M].天津:天津大学出版社,2002. [7]李玉峰,倪虹霞.MCS-51系列单片机原理与接口技术[M].北京:人民邮电出版社,2004.

[8]李广弟,朱月秀,王秀山.单片机基础[M].北京:北京航空航天大学出版社,2001.7. [9]张伟. 单片机原理及应用[M].北京:机械工业出版社,2002.1

[10]陈光东.单片微型计算机原理与接口技术.武汉:华中理工大学出版社,1999.4. [11]徐惠民,安德宁. 单片微型计算机原理接口及应用[M].北京:北京邮电大学出版社,2000.10.

[12]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1990. [13]沙占友.智能化集成温度传感器原理与应用[J].北京:机械工业出版社,2002.2-5. [14]沙占友,葛家怡,马洪涛.集成化智能传感器原理与应用[J].北京:电子工业出版社,2004.74-81.

18

江苏技术师范学院课程设计说明书

附录:

软件程序:

#include #include

#define uchar unsigned char #define uint unsigned int

unsigned char row_scan[4] = {0xfe,0xfd,0xfb,0xf7}; uchar code table1[13]=\"T1:T2:H1:H2:%\";

uchar code table2[11] = \"0123456789 \" ;//字码 uchar dis_buf[3]; //数值显示缓冲区

uchar TU1=40,TD1=10,HU1=60,HD1=35; //节点1报警值 uchar TU2=40,TD2=10,HU2=60,HD2=35; //节点2报警值 sbit RS=P1^6; sbit RW=P1^7; sbit OE=P1^5; sbit DT1=P1^2; sbit DT2=P1^3;

sbit BEEP=P1^0;

bit flag_uart = 0; //字符串接受完成后标志位置位,须软件复位 unsigned char S_LEN = 4;

unsigned char Res_buf[20]={0}; //延时1MS

void delay_ms(unsigned char ms) { unsigned char i; while(ms--)

{ for(i = 0; i< 150; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } }

void delay_s(signed char i) //较长延时 约1s {

while(i--) {

delay_ms(255); delay_ms(255);

19

江苏技术师范学院课程设计说明书

} }

//串口初始化 //查询方式发送 void Uart_init() {

SCON = 0x52; //set SM1、REN and TI; TMOD = 0x20; //set M1,方式2; TH1 = 0xf3;

TL1 = 0xf3; //baud rate 2400b/s TR1 = 1; //计数使能 }

void Uart_sc(unsigned char byte) //发送单字符 {

while(!TI); SBUF = byte; TI = 0; }

void Uart_ss(unsigned char *p,bit flag) //发送字符串 {

while(*p) {

Uart_sc(*p++); }

if(flag==1) {

Uart_sc(0x0D);

Uart_sc(0x0A); //结尾发送回车换行 } }

//1602

void write_com(uchar com) {

OE=0; RS=0; P0=com;

delay_ms(2); OE=1;

delay_ms(2); OE=0; }

void write_dat(uchar dat)

20

江苏技术师范学院课程设计说明书

{

OE=0; RS=1; P0=dat;

delay_ms(2); OE=1;

delay_ms(2); OE=0; }

void LCD_Init() {

RW=0;

write_com(0x38); //显示模式

write_com(0x0c); //开显示 光标和闪烁设置 write_com(0x06); //地址自动加一 write_com(0x01); //清屏 delay_ms(100); }

void shu_dis(unsigned char num) {

signed char i=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; else break; }

for(i=2;i>=0;i--)//逐个显示 {

write_dat(table2[dis_buf[i]]); } }

//DHT11

void delay_us()

{ unsigned char i;

i--;i--;i--;i--;i--;i--; }

//矩阵键盘

//高位输入,低位输出

bit key_check() //按键检测函数,有键按下时置返回1,无键按下返回0

21

江苏技术师范学院课程设计说明书

{

bit flag; P1 = 0xf0; if(P1!=0xf0) {

delay_ms(25); if(P1!=0xf0) {

flag=1; }

else flag=0; }

else flag=0; return flag; }

unsigned char key_event() //取键值函数,并将键值通过key_value返回 {

unsigned char i,j;

unsigned char temp,key_value; for(i=0;i<4;i++) {

temp = 0x10; P1 = row_scan[i]; for(j=0;j<4;j++) {

if((P1 & temp)==0) {

key_value = i*4+j; while(!(P1 & temp)); break; }

temp <<= 1; } }

return key_value; }

unsigned char key_input(unsigned char x,unsigned char y)//键盘输入,参数显示位置 {

unsigned char key_value; unsigned char key_num=0; x--;y--;

write_com(0x80+x*0x40+y); write_com(0x0f);

22

江苏技术师范学院课程设计说明书

for(;;) {

if(key_check()==1) {

key_value = key_event();

if(key_value==15){ write_com(0x0c);return key_num; }//关闭光标,返回键值 if(key_value==14){ key_num = 0;write_com(0x80+x*0x40+y);shu_dis(key_num);}//按键出错,清零数据 if(key_value<=9) {

key_num = key_num*10 + key_value; write_com(0x80+x*0x40+y); shu_dis(key_num); } } } }

void read_th1() {

unsigned char i,j,N=0,teml; unsigned char buf[5];

DT1 = 0;

delay_ms(30); DT1 = 1; delay_us(); delay_us(); delay_us(); delay_us(); DT1 = 1;

if(DT1==0) //是否响应信号 {

while(DT1==0); //跳过 80us DHT响应信号 while(DT1==1); //跳过 80us DHT拉高信号 //准备接受温湿度数据 for(i=0;i<5;i++) {

for(j=0;j<8;j++) {

N = 0;

while(DT1==0);//bit数据头 while(DT1==1) {

delay_us();//适当延时

23

江苏技术师范学院课程设计说明书

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]HU1)||(buf[2]TU1)) {

BEEP = 0; } else {

BEEP = 1; }

write_com(0x80+0x03); shu_dis(buf[2]); write_dat(0xdf);

write_com(0x80+0x0c); shu_dis(buf[0]);

write_dat(table1[12]); Uart_ss(\"T1:\

Uart_sc(buf[2]/10+48); Uart_sc(buf[2]%10+48); Uart_ss(\"度 \ Uart_ss(\"RH1:\ Uart_sc(buf[0]/10+48); Uart_sc(buf[0]%10+48); Uart_sc(0xA3); Uart_sc(0xA5); Uart_sc(0x0D);

Uart_sc(0x0A); //结尾发送回车换行 } } }

void read_th2() {

unsigned char i,j,N=0,teml; unsigned char buf[5];

24

江苏技术师范学院课程设计说明书

DT2 = 0;

delay_ms(30); DT2 = 1; delay_us(); delay_us(); delay_us(); delay_us(); DT2 = 1;

if(DT2==0) //是否响应信号 {

while(DT2==0); //跳过 80us DHT响应信号 while(DT2==1); //跳过 80us DHT拉高信号 //准备接受温湿度数据 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]HU2)||(buf[2]TU2)) {

BEEP = 0; } else {

BEEP = 1; }

write_com(0x80+0x40+0x03); shu_dis(buf[2]); write_dat(0xdf);

25

江苏技术师范学院课程设计说明书

write_com(0x80+0x40+0x0c); shu_dis(buf[0]);

write_dat(table1[12]); Uart_ss(\"T2:\

Uart_sc(buf[2]/10+48); Uart_sc(buf[2]%10+48); Uart_ss(\"度 \ Uart_ss(\"RH1:\ Uart_sc(buf[0]/10+48); Uart_sc(buf[0]%10+48); Uart_sc(0xA3); Uart_sc(0xA5); Uart_sc(0x0D);

Uart_sc(0x0A); //结尾发送回车换行 Uart_sc(0x0D);

Uart_sc(0x0A); //结尾发送回车换行 } } }

void search1() {

uchar value; LCD_Init();

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)

26

江苏技术师范学院课程设计说明书

{

value = key_event(); switch(value) {

case 15 : return;break; case 13 : {

write_com(0x80+0x40+8);shu_dis(0); HU1 = key_input(2,9); }break; case 12 : {

write_com(0x80+0x40+3);shu_dis(0); HD1 = key_input(2,4); }break; case 11 : {

write_com(0x80+8);shu_dis(0); TU1 = key_input(1,9); }break; case 10 : {

write_com(0x80+3);shu_dis(0); TD1 = key_input(1,4); }break; } } } }

void search2() {

uchar value; 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');

27

江苏技术师范学院课程设计说明书

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(); switch(value) {

case 15 : return;break; case 13 : {

write_com(0x80+0x40+8);shu_dis(0); HU2 = key_input(2,9); }break; case 12 : {

write_com(0x80+0x40+3);shu_dis(0); HD2 = key_input(2,4); }break; case 11 : {

write_com(0x80+8);shu_dis(0); TU2 = key_input(1,9); }break; case 10 : {

write_com(0x80+3);shu_dis(0); TD2 = key_input(1,4); }break; } } } }

void main() {

uchar i;

Uart_init();

28

江苏技术师范学院课程设计说明书

LCD_Init();

write_com(0x80); for(i=0;i<3;i++) {

write_dat(table1[i]); }

write_com(0x80+0x09); for(i=6;i<9;i++) {

write_dat(table1[i]); }

write_com(0x80+0x40); for(i=3;i<6;i++) {

write_dat(table1[i]); }

write_com(0x80+0x49); for(i=9;i<12;i++) {

write_dat(table1[i]); }

while(1) {

read_th1(); delay_ms(200); read_th2(); delay_ms(200); if(key_check()==1) {

if(key_event()==14) //设置节点1 {

search1(); LCD_Init();

write_com(0x80); for(i=0;i<3;i++) {

write_dat(table1[i]); }

write_com(0x80+0x09); for(i=6;i<9;i++) {

write_dat(table1[i]); }

29

江苏技术师范学院课程设计说明书

}

}

}

30

write_com(0x80+0x40); for(i=3;i<6;i++) {

write_dat(table1[i]); }

write_com(0x80+0x49); for(i=9;i<12;i++) {

write_dat(table1[i]); } }

if(key_event()==15) //设置节点2 {

search2(); LCD_Init();

write_com(0x80); for(i=0;i<3;i++) {

write_dat(table1[i]); }

write_com(0x80+0x09); for(i=6;i<9;i++) {

write_dat(table1[i]); }

write_com(0x80+0x40); for(i=3;i<6;i++) {

write_dat(table1[i]); }

write_com(0x80+0x49); for(i=9;i<12;i++) {

write_dat(table1[i]); } }

因篇幅问题不能全部显示,请点此查看更多更全内容