基于单片机的温湿度计的设计_第1页
基于单片机的温湿度计的设计_第2页
基于单片机的温湿度计的设计_第3页
基于单片机的温湿度计的设计_第4页
基于单片机的温湿度计的设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、传 感 器 大 作 业温湿度传感器 摘 要温度和湿度是两个最基本的环境参数,人们生活与温湿度息息相关。在日常生活、工业、医学、环境保护、化工、石油等领域,经常需要对环境温度和湿度进行测量和控制。准确测量温湿度在生物制药、食品加工、造纸等行业更是至关重要。因此,研究温湿度的测量方法和装置具有重要的意义。随着科技的不断发展,单片机技术已经普及到我们的工作、生活、科研等各个领域。已经成为一种比较成熟的技术。由于+ 单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便等优点,目前已经渗透到我们工作和生活的方方面面。本论文介绍了一种以AT89C51为主要控制器件,以DHT11为数字温度传感器的新型

2、数字温湿度计。本设计主要包括硬件电路的设计和系统软件的设计。关键词:温湿度传感器; LCD1602; STC; DHT1 1;20一 绪论1.1 背景概述进入21世纪后,各行各业特别是传统产业都急切需要应用电子技术、自动控制技术进行改造和提升很多企业对温湿度的测控手段很粗糙,十分落后,绝大多数仍在使用湿球湿度计,采用人工观测人工调节阀门、风机的方法,很少有人使用温湿度传感器。随着科技的发展进步,工业及电器行业对温湿度的要求的提高,温湿度传感器的应用范围也越来越加广泛。1.2设计的内容在本次传感器大作业设计中,为实现对温湿度的检测与显示,主要利用以STC为核心构架硬件电路,DHT11温湿度传感器

3、采集环境温度及湿度信息,(温度检测范围: -30至+55。测量精度: 2.;湿度检测范围: 20%-90%RH。检测精度:5%RH)。LCD1602显示器直接显示温度和湿度(显示方式: 温度:四位显示;湿度:四位显示);同时利用C语言编程实现温湿度信息的显示功能。二 系统设计方案及硬件设计2.1 系统设计方案本方案使用STC作为控制核心,一直能温湿度传感器DHT11作为温湿度测量元件,显示电路采用LCD1602模块显示,采用单片机最小系统。系统硬件电路设计框图如下图2-1。STC单片机LCD1602液晶显示DHT11温湿度传感器数据采集时钟复位电路图2-1 系统硬件电路设计框图2.2 系统硬件

4、介绍2.2.1 STC部分介绍STC的制作工艺为CMOS,采用40管脚双列直插DIP封装,引脚说明如下:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时

5、,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口

6、管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下所示: P3.0 RXD(串行输入口);P3.1 TXD(串行输出口);P3.2 /INT0(外部中断0);P3.3 /INT1(外部中断1);P3.4 T0(记时器0外部输入);P3.5 T1(记时器1外部输入);P3.6 /WR(外部数据存储器写选通);P3.7 /RD(外部数据存储器读选通);P3口同时为闪烁编程和编程校验接收一些控制信

7、号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 图2-2 单片机STC引脚图STC的工作模式:模式0:选择定时器的高8位和低5位组成一个13位定时器/计数器。TL低5位溢出时向TH进位,TH溢出时向中断标志位TF进位,并申请中断。定时时间t=(213-初值)振荡周期12;计数长度位213=8192个外部脉冲。模式1:与模式0的唯一差别是寄存器TH和TL以全部16位参与操作。定时时间t=(216-初值)振荡周期12;计数长度位216=65536个外部脉冲。模式2:把TL0和TL1配置成一个自动重装载的8位定时器/计数器。TL用作8位计数器,TH用以保存初值。

8、TL计数溢出时不仅使TF0置1,而且还自动将TH中的内容重新装载到TL中。定时时间t=(28-初值)振荡周期12;计数长度位28=256个外部脉冲。模式3:对T0和T1不大相同。若设T0位模式3,TL0和TH0被分为两个相互独立的8位计数器。TL0为8位计数器,功能与模式0和模式1相同,可定时可计数。TH0仅用作简单的内部定时功能,它占用了定时器T1的控制位TR1和中断标志位TF1,启动和关闭仅受TR1控制。定时器T1无工作模式3,但T0在工作模式3时T1仍可设置为02。2.2.2 DHT11数字传感器介绍DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数

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

10、脚,3号引脚一般悬空,如图2-3所示。DHT11的供电电压为35.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。图2-3 DHT11引脚图2.2.3 LCD1602介绍1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。LCD1602引脚功能说明LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,引脚功能如下表2-1所示。编号符号

11、引脚说明编号符号引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极表2-1 LCD1602引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS

12、为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。LCD1602指令说明及时序:1602液晶模块内部的控制器共有11条控制指令,如下表2-2所示。1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1

13、为高电平、0为低电平)序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表2-2 LCD1602控制命令表指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标

14、复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令

15、7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。2.3 系统部分硬件电路设计介绍2.3.1 主控制电路的设计MCS-51系列单片机是采用高性能的静态STC设计由先进CMOS 工艺制造并带有非易失性Flash 程序存储器全部支持12时钟和6时钟操作P89C51X2和P89C52X2/54X2/58X2分别包含128字节和256字节RAM 32条I/O口线3个16位定时/计数器6输入4优先级嵌套中断结构1个串行I/O口可用于多机通信I/O扩展或

16、全双工UART以及片内振荡器和时钟电路。 图2-4 主控制电路图2.3.2 温湿度检电路的设计DHT11的供电电压为35.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。2.3.3 LCD1602液晶显示电路的设计显示模块选用1602字符型液晶模块,是目前工控系统中使用最为广泛的液晶屏之一,1602字符型液晶模块是点阵型液晶,驱动方便,经编码后显示内容多样化。系统的输入模块采用中断扫描的44矩阵键盘,相比定时扫描方式,提高了MCU的使用效率。同时1602液晶显示模块可以和单片机STC89C52直接接口。电路图如图2-7所示。图2-7 LCD1602电路图三. 系统的软件

17、设计系统程序主要包括主程序、LCD模块控制程序、DHT11控制模块程序、延时子程序,整体程序见附录2。3.1 系统软件主程序流程程序开始后,先对液晶模块显示进行初始化,通过延时一秒等待DHT11温湿度传感器启动。DHT11温湿度传感器启动后,对其进行数据初始化后,进行温湿度信息的采集、转化、处理,最后通过液晶显示器读出。DHT11温湿度传感器经过一次数据采集和处理后需返回次延时程序处理来重新初始化后采集温湿度数据。具体流程图如图3-1所示:3.2 DHT11数据采集流程图3-2DHT11数据采集流程图主程序里主要的一部分是数据采集和显示的循环部分,其中DHT11温湿度传感器有严格的时序要求,程

18、序一定要遵守按照其与主机通信的步骤。其温湿度数据采集流程图如下图3-2所示:LCD初始化机显示部分,在程序中应先对显示器进行初始化,然后循环调用DHT11模块采集的数据对温度和湿度进行实时显示。其LCD初始化机显示流程图如下图3-3图3-3 LCD初始化显示流程图DHT11源程序#include INCLUDES.H#define uchar unsigned char#define uint unsigned intsbit dht_dat=P10; /用哪个I/O口自选,注意不要用P3口uchar dht_t1=0,dht_t2=0; /依次为温度整数部分和温度小数部分uchar dht_

19、d1=0,dht_d2=0; /依次为湿度整数部分和湿度小数部分uchar dht_chk=0; /和校验,可选择是否使用,具体参照数据手册uchar dht_num=0; /用于while循环中计数,超时则跳出循环void dht_delay_10us() ; /自己调,一定要尽量精确到10us,很重要void dht_delay_10ms(uchar t);uchar dht_readat();void dht_getdat();void dht_init();void dht_delay_10us()uchar i=0;for(i=0;i1;i+);void dht_delay_10ms

20、(uchar t) /大概10ms就行,粗略延时uchar i=0,j=0,k=0;for(i=0;it;i+)for(j=0;j40;j+)for(k=0;k75;k+);uchar dht_readat() /接收一个8位数据,先高位后低位uchar i=0,dat=0;for(i=0;i8;i+)dht_num=2;while(dht_dat=0)&(dht_num+);dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();dat=dat1;if(dht_dat=1)dht_num=2;dat=dat|0x

21、01;while(dht_dat=1)&(dht_num+);return dat;void dht_getdat() /给DHT11一个开始信号,然后读取一次数据,共五个8位字节uchar i=0;dht_dat=0;dht_delay_10ms(4);dht_dat=1; /单片机给起始脉冲信号dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_dat=1; /稍作延时,等待DHT11返回响应(响应为低电平)if(dht_dat=0) /有响应才接收数据,否则不作处理dht_num=2;while(

22、dht_dat=0)&(dht_num+);dht_num=2;while(dht_dat=1)&(dht_num+);dht_d1=dht_readat();dht_d2=dht_readat();dht_t1=dht_readat();dht_t2=dht_readat();dht_chk=dht_readat();/一次读出五个数据dht_dat=1; /释放总线dht_delay_10ms(10); /稍作延时void dht_init() /DHT11的初始化函数,别忘了写程序时先加上之dht_delay_10ms(100); /DHT11上电前准备时间,大概1sdht_dat=1;

23、 /总线准备void DisplayHumidity()dht_getdat();DisplayString(2,3,%RH);DisplayTime(1,3,dht_d1);LCD1602源程序#include INCLUDES.H#define uchar unsigned char#define uint unsigned intsbit dht_dat=P10; /用哪个I/O口自选,注意不要用P3口uchar dht_t1=0,dht_t2=0; /依次为温度整数部分和温度小数部分uchar dht_d1=0,dht_d2=0; /依次为湿度整数部分和湿度小数部分uchar dht_

24、chk=0; /和校验,可选择是否使用,具体参照数据手册uchar dht_num=0; /用于while循环中计数,超时则跳出循环void dht_delay_10us() ; /自己调,一定要尽量精确到10us,很重要void dht_delay_10ms(uchar t);uchar dht_readat();void dht_getdat();void dht_init();void dht_delay_10us()uchar i=0;for(i=0;i1;i+);void dht_delay_10ms(uchar t) /大概10ms就行,粗略延时uchar i=0,j=0,k=0;

25、for(i=0;it;i+)for(j=0;j40;j+)for(k=0;k75;k+);uchar dht_readat() /接收一个8位数据,先高位后低位uchar i=0,dat=0;for(i=0;i8;i+)dht_num=2;while(dht_dat=0)&(dht_num+);dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();dat=dat1;if(dht_dat=1)dht_num=2;dat=dat|0x01;while(dht_dat=1)&(dht_num+);return dat;

26、void dht_getdat() /给DHT11一个开始信号,然后读取一次数据,共五个8位字节uchar i=0;dht_dat=0;dht_delay_10ms(4);dht_dat=1; /单片机给起始脉冲信号dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_dat=1; /稍作延时,等待DHT11返回响应(响应为低电平)if(dht_dat=0) /有响应才接收数据,否则不作处理dht_num=2;while(dht_dat=0)&(dht_num+);dht_num=2;while(dht_

27、dat=1)&(dht_num+);dht_d1=dht_readat();dht_d2=dht_readat();dht_t1=dht_readat();dht_t2=dht_readat();dht_chk=dht_readat();/一次读出五个数据dht_dat=1; /释放总线dht_delay_10ms(10); /稍作延时void dht_init() /DHT11的初始化函数,别忘了写程序时先加上之dht_delay_10ms(100); /DHT11上电前准备时间,大概1sdht_dat=1; /总线准备void DisplayHumidity()dht_getdat();D

28、isplayString(2,3,%RH);DisplayTime(1,3,dht_d1);主程序#includeINCLUDES.h #define uchar unsigned char#define uint unsigned intsbit dht_dat=P10; /用哪个I/O口自选,注意不要用P3口uchar dht_t1=0,dht_t2=0; /依次为温度整数部分和温度小数部分uchar dht_d1=0,dht_d2=0; /依次为湿度整数部分和湿度小数部分uchar dht_chk=0; /和校验,可选择是否使用,具体参照数据手册uchar dht_num=0; /用于w

29、hile循环中计数,超时则跳出循环void dht_delay_10us() ; /自己调,一定要尽量精确到10us,很重要void dht_delay_10ms(uchar t);uchar dht_readat();void dht_getdat();void dht_init();void dht_delay_10us()uchar i=0;for(i=0;i1;i+);void dht_delay_10ms(uchar t) /大概10ms就行,粗略延时uchar i=0,j=0,k=0;for(i=0;it;i+)for(j=0;j40;j+)for(k=0;k75;k+);ucha

30、r dht_readat() /接收一个8位数据,先高位后低位uchar i=0,dat=0;for(i=0;i8;i+)dht_num=2;while(dht_dat=0)&(dht_num+);dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();dat=dat1;if(dht_dat=1)dht_num=2;dat=dat|0x01;while(dht_dat=1)&(dht_num+);return dat;void dht_getdat() /给DHT11一个开始信号,然后读取一次数据,共五个8位字节u

31、char i=0;dht_dat=0;dht_delay_10ms(4);dht_dat=1; /单片机给起始脉冲信号dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_dat=1; /稍作延时,等待DHT11返回响应(响应为低电平)if(dht_dat=0) /有响应才接收数据,否则不作处理dht_num=2;while(dht_dat=0)&(dht_num+);dht_num=2;while(dht_dat=1)&(dht_num+);dht_d1=dht_readat();dht_d2=dht_readat();dht_t1=dht_readat();dht_t2=dht_readat();dht_chk=dht_readat();/一次读出五个数据dht_dat=1; /释放总线dht_delay_10ms(10); /稍作延时void dht_init

温馨提示

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

最新文档

评论

0/150

提交评论