基于51单片机的温湿度测量仪课程设计.doc

上传人:仙人指路1688 文档编号:4147859 上传时间:2023-04-07 格式:DOC 页数:22 大小:499.50KB
返回 下载 相关 举报
基于51单片机的温湿度测量仪课程设计.doc_第1页
第1页 / 共22页
基于51单片机的温湿度测量仪课程设计.doc_第2页
第2页 / 共22页
基于51单片机的温湿度测量仪课程设计.doc_第3页
第3页 / 共22页
基于51单片机的温湿度测量仪课程设计.doc_第4页
第4页 / 共22页
基于51单片机的温湿度测量仪课程设计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《基于51单片机的温湿度测量仪课程设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机的温湿度测量仪课程设计.doc(22页珍藏版)》请在三一办公上搜索。

1、重庆邮电大学单片机应用课程设计2013-2014(1)课设题目: 基于单片机的简易温湿度测量仪 指导教师: 黄 老 师 序号姓名班级学号性别工作量(%)分数1夏恒发01211012011210050男202文 翻01211012011210009女203罗春雪01211012011210010女154王 琎01211012011210043男155刘 艺01211012011210069女156李怡佳01211012011210072女15目录第1章 摘要1第2章 设计任务分析及方案论证12.1设计要求12.2设计方案及其论证12.3器件选定22.4 AT89C51单片机42.5显示部分5第3

2、章 电路与程序设计63.1主控制电路和测温时控制电路63.2主要模块的电路7 3.2.1温湿度采集模块 7 3.2.2报警模块 7 3.2.3显示模块 8第4章 测试方案与测试结果 104.1测试方案及测试条件 104.2测试结果及其完整性104.3测试结果分析10结论 11心得体会 12参考文献 12附录 13摘 要本次设计是采用MSC-51系列单片机中的AT89C51和DHT11构成的低成本的温湿度的检测控制系统。单片机AT89C51是一款低消耗、高性能的CMOS8位单片机,由于它强大的功能和低价位,因此在很多领域都是用它。DHT11温湿度传感器是一款含有已校准数字输出的温湿度复合传感器,

3、传感器包括一个电阻式感湿原件和一个NTC测温元件,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。设计主要包括硬件电路的设计和系统软件的设计。硬件电路主要包括单片机、温湿度传感器、显示模块、报警器以及控制设备等5部分。其中由DHT11温湿度传感器及1602字符型液晶模块构成系统显示模块;测温湿度控制电路由温湿度传感器和预设温度值比较报警电路组成;用户根据需要预先输入预设值,当实际测量的温湿度不符合预设的温湿度标准时,发出报警信号(蜂鸣器蜂鸣),启动相应控制。关键词:AT89C51;DHT11;温湿度传感器第2章 设计任务分析及方案论证2.1设计要求 以MCS_51系列单片机AT8

4、9C51学习板作为本次实验的核心器件,外接报警电路,温湿度采集电路,组成一个温湿度采集报警系统。基本要求温湿度采集使用DHT11芯片,报警电路用有源蜂鸣器作为报警器件;测量空气温湿度;通过数码管显示温度和湿度,显示位数精确到个位,要求观察时无闪烁;设置温度和湿度的上下限,通过蜂鸣器报警;将温度和湿度单位显示在数据后面,温度C 或F、湿度%RH。提升部分:采用液晶显示,声音告警、闪烁显示告警项、按键设定上下限值,单位转换。2.2设计方案及其论证本设计要实现的功能是:实时显示当前环境的温湿度,并且允许用户设定温湿度阀值,当环境温湿度超过或低于标准值时,系统会以蜂鸣器鸣响的方式进行报警提示。 用于用

5、户设定温湿度准确值,1602用于数据显示,蜂鸣器用于提示用户。按照系统的设计功能所要求的,温湿度监控系统原理图如下图2.2.1所示:温湿度传感器LCD1602、数码管温湿度显示 蜂鸣器 单片机 LED灯图2-2-1 温湿度监控系统原理图方案1:利用DHT11与单片机上的数码管一起用来显示室内温湿度。然后对当前的温湿度进行判断是否超出阈值。若超出阈值,通过三极管放大作用使蜂鸣器报警。方案2:利用DHT11采集温湿度,然后传入单片机,通过扩展槽连接到LCD1602上,使用LCD1602显示温湿度,然后在温湿度后面显示阈值。若温度或湿度超出阈值,通过三极管使蜂鸣器报警。方案3:利用DHT11采集温湿

6、度,将数据传入单片机,通过扩展槽连接到LCD1602,并一起使用数码管显示温湿度。阈值的显示在LCD1602上显示。若温度或湿度超出阈值,通过三极管产生三种不同频率,使蜂鸣器发出不同的报警声音。2.3器件选定2.3.1测量部分:温湿度传感器DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的温湿度传感和数字模块采集技术,具有很高的稳定性和可靠性,DHT11传感器内含一个NTC测温和一个电阻式感湿元件,并与一个8位的高性能单片机相连接,在精确的湿度校验室中DHT11传感器进行过校准,以程序的形式校准系数储存在0TP内存中,检测信号的时候,在处理过程中传感器内部要

7、调用这些校准系数,采用单线制的串行接口,使系统集成可以有较低的功耗,而且更加简单快速,信号传输距离超过20米,作为一个数字温湿度传感器DHT11具有响应快速、抗干扰强、性价比高等优点,它的性能指标如下:湿度测量范围为2090RH;湿度测量精度为5RH;温度测量范围为050 ,温度测量精度为2,工作电压3055 V,相应时间5S,DHT1l采用4针单排引脚封装, 传感器通电后,需要等待1s,这是因为要越过不稳定的状态,在此期间不需发送指令,电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。图2-3-1典型的应用电路图2-3-1 DHT11实物图(1)DHT11温湿度传感器

8、产品参数:相对湿度分 辨 率:16Bit重 复 性:1%RH精 度:25C 5%RH迟 滞:0.3%RH长期稳定性:0.5%RH/yr温度分 辨 率:16Bit重 复 性:0.2C量程范围:25C 2C电气特征供 电:DC 3.5-5.5V供电电流:测量0.3mA 待机60A采样周期:次 大于2秒引脚说明(1)VDD 供电3.5-5.5V (2)DATA 串行数据,单总线(3)NC 空脚(4)GND 接地,电源负极2.3.2串行接口(单线双向)DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数

9、部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。DHT11发送响应信号的时候总线为低电平 ,DHT11把总线拉高80us之前,必须等到响应信号发送,准备发送数据时,每一bit数据都以50us低电平时隙开始,数据位是0或1是由高电平的长或短来决定。假如响应信号的读取为高电平,但是DHT11无响应响应,这时候说明路线

10、可能连接不正常,当最后一bit数据传送结束后,DHT11把总线拉低50us,接着总线由上拉电阻拉高进入空闲状态。2.3.3引脚说明表2.3.5 DHT11引脚说明Pin名称注释1VDD供电35.5V2DATA串行数据,单总线3NC空脚,悬空4GND接地,电源负极2.3.7 封装信息图2-3-6 DHT11的封装信息:2.4单片机资料简介AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-5

11、1指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。2.5显示部分:LCD显示部分是LCD1602液晶显示,图2-8 正常工作LCD1602显示2.5.1引脚功能说明 1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。表2-8-3 引脚接口说明表LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明符号引脚说明1VSS地2VDD正极3VL液晶显示偏压4RS寄存器选择5R/W读/写选择6EN使能信号7D0数据8D1数据9D2数据10D3数据11D4数

12、据12D5数据13D6数据14D7数据15BLA背光源正极16BLK背光源负极图2-8-3 LCD1602的管脚图图2-8-3 1602字符型液晶显示器实物图第3章 电路与程序设计 单片机是整个系统的控制中枢,它指挥外围器件协调工作,从而完成特定的功能,硬件实现上采用模块化设计,每一模块只实现一个特定功能,最后再将各个模块搭接在一起,这种设计方法可以降低系统设计的复杂性,本系统主要硬件设计包括电源电路、蜂鸣器电路、晶振电路,LCD显示电路以及温湿度传感器电路。3.1主控制电路和测温时控制电路 本次硬件的核心就是AT89C511,其他的外围电路都是围绕它所设计的。数字温湿度传感器的DHT11的D

13、ATA口连接单片机AT89C51的P1.7口。显示电路就是把LCD1602和单片机的P2口分别相连,当温度或湿度高于预设值的时候蜂鸣器蜂鸣报警,代表控制系统的指示灯闪烁。3.2主要模块的电路3.2.1系统的蜂鸣器电路图3-2-1 蜂鸣器电路开始(RHH|RHL)&(HT|LT)HXD=0,蜂鸣器报警HXD=1,蜂鸣器不报警报警电路流程图void warning() /报警函数 uchar i; HXD=1; /蜂鸣器不报警 if(RHH|RHL)&(HT|LT) for(i=0;i5;i+) HXD=0;Delay(2000); HXD=1;Delay(2000); HXD=0;Delay(2

14、000); HXD=1; /温湿度都超标时,频率1报警 报警模块子程序3.2.2传感器电路 DHT11是数字型温湿度传感器,可直接以数字方式传输所采集的当前环境温湿度,DHT11采用的是单总线通信,因此只需将单片机的一个IO端口与DHT11的通信接口连接就可以实现数据的采集和传送,相对于其他电路来说比较简单。如图3.4所示:图3-2-5 传感器电路3.2.3显示电路 显示模块选用1602字符型液晶模块,它是目前工控系统中使用最广泛的液晶屏之一,由于它显示的质量高,电路图如图3.4所示,1602字符型液晶模块是点阵型液晶,驱动方便,经过编程后显示内容多样化。图3-2-4 显示电路显示子程序开始初

15、始化P0=0;P1=0X0C段选/位选Seq_Tab/Dig_Tab 结束数码管显示流程图LCD模块开始LCD_init初始化,清屏设置输入指令函数LCD_write_command设置输入数据函数LCD_write_data单数据显示函数LCD_disp整体显示函数LCD_display结束LCD显示流程图void display() /数码管显示函数 uint j=0; P0=0XFF;Digce=1;Digce=0; P0=Seg_Tab10;Segce=1; Segce=0; P0=Dig_Tab4;Digce=1;Digce=0;for(j=0;j500;j+); P0=0XFF;D

16、igce=1;Digce=0;P0=Seg_Tab11; Segce=1;Segce=0; P0=Dig_Tab0;Digce=1;Digce=0;for(j=0;j500;j+); P0=0XFF;Digce=1;Digce=0;P0=Seg_Tab12;Segce=1;Segce=0;P0=Dig_Tab1;Digce=1;Digce=0;for(j=0;j500;j+); P0=0XFF;Digce=1;Digce=0;P0=Seg_Tabd4;Segce=1;Segce=0;P0=Dig_Tab2;Digce=1;Digce=0;for(j=0;j500;j+);P0=Seg_Tabd

17、3;Segce=1;Segce=0; /*LCD液晶屏函数部分*void LCD_write_command(uchar dat) /写指令 LCD_DB=dat; LCD_RS=0;/指令 LCD_RW=0;/写入 LCD_E=1;/允许 delay_n40us(1); LCD_E=0; delay_n40us(1); 显示模块子程序第4章 测试方案与测试结果4.1测试方案及测试条件 软件调试将整个硬件电路通过学习板上的接口与电脑上的软件Keil uVision4连接,运行程序,此时学习板上的数码管显示的为测量的当前温湿度值(室温)。 改变测量温湿度值用手握住DHT11,人为改变芯片所处环境

18、温度,观察数码管上显示的温度值是否有改变。超出初始设定温度上下限时,蜂鸣器发出响声报警;对着DHT11哈气,改变湿度,观察数码管上显示的湿度度值是否有改变。超出初始设定湿度上下限时,蜂鸣器发出响声报警 软件设定报警温湿度上下限值在Keil uVision4中直接改变初始设定的报警温湿度值,运行程序,观察显示效果。超出新设的报警温湿度,蜂鸣器发出响声报警。4.2测试结果及其完整性 能正常显示DHT11测量到的温湿度。显示无闪烁,有效值精确到小数点后一位; 超出设定的报警温湿度值,蜂鸣器发出不同频率响声报警; 当显示温度值在设定温度值之内时,蜂鸣器不发出声音; 多次改变报警温度上下限值,蜂鸣器能在

19、每次显示温度值超出设定报警值时发出声音报警。4.3测试结果分析 稳定无闪烁显示当前环境温湿度值,有效值精确到小数点后一位。改变环境温湿度,显示改变; 蜂鸣器在显示温湿度超出设定的上下限值时发出响声报警,显示温湿度在设定范围之内时,不发出声音; 多次改变报警温度上下限值,改变DHT11所处环境温度,每次超出新设报警温度值时,蜂鸣器都可以准确发出声音报警。根据温湿度监控系统功能,系统软件流程图如图41所示:NY图4-1系统流程图结 论本文设计的是粮库的温湿度监测报警、控制系统。由高性价比单片机对数字温湿度传感器控制,通过温、湿度传感器,实现对温湿度数据采集,并对数据处理、LCD1602显示屏显示即

20、时温、湿度值。当温湿度数据超出设定温、湿度值时,由单片机驱动报警装置,实现现场报警功能,控制系统自行启动,调节不在范围内的温、湿度,使其恢复正常。首先,介绍了设计的核心组成部分单片机AT89S51的的基本构成和原理,简要的说明了单片机的最小系统,中断系统,复位电路和时钟电路。然后介绍了显示部分LCD1602的各个引脚和指令说明,为下面的编程做准备。其次,介绍了本次设计的传感器:DHT11温湿度传感器。然后给出了主要模块电路的结构,在硬件连接以后,初步的硬件运行结果,以实物图的形式进行了说明。介绍了控制温、湿度的设备,在根据不同环境下的应用和选择。最后,说明了用到的软件,给出了总体的原理图和流程

21、图和Proteus运行结果,以便更好的理解。最后程序检查正常,焊接成品,硬件运行正常,满足了初步设计要求,达到了粮库温、湿度控制的目的。在设计中还有不足的部分,在现场控制时,保证传感器不受条件因素的影响是很重要的,由于研究时间和条件的限制,粮库温、湿度还有许多地方需要深入研究。心得体会这次的课程设计是要求做一个DHT11的温湿度传感器,才拿到这个任务的时候,看着上面的要求,觉得好像是一个挺大的工程的,当时感觉还是比较迷茫的。于是我们从找资料到买器材就花了一周的时间,这期间对于DHT11的一些性能有了初步的了解,也对一些实际的电路器材有了认识,但毕竟都是第一次做这种项目,所以光是完全确认原理电路

22、和元件清单就用了很久,不过还好最后基本上准备齐全了。做项目的第一步,我们组是在一起讨论了一个比较完善的焊接电路图,因为只是51板的一个外拓模块,且元器件也不是很多,所以留给我们的设计空间很大,最后我们决定了一个充分利用板子大小的方案来作为最终的方案。然后第二步,我们则是焊电路和编程一块进行的。在焊电路过程中,因为有设计图做参考,所以比较顺利,而在程序编写过程中,则遇到了一些困难。比如DHT11的数据传输有严格的时间标准,但是我们设计的延时程序总是与传输标准存在误差,导致无法正确接收数据。还有数据处理上面,因为没有进行字符型转化,所以一开始在LCD液晶屏上显示的是乱码。再就是对于按键设置上面,一

23、开始是准备添加按键功能的,然后在编程过程中发现对于单一的温度或者湿度的按键调整比较好编,但是模式转换和将两者结合在一起的地方感觉思路很混乱,最终因为其他模块还亟待改善,就放弃了这个模块的添加。最后在全部设计完了以后做硬件调试时还发现了蜂鸣器一直会叫,检查了几遍也没发现错误,结果后来换了一个端口就没事了,一开始用的是P0口,后来是把LED灯的端口用来做蜂鸣器端口,发现鸣叫正常了,而且LED灯也会亮起报警,是意料之外的惊喜。最后,这一次的课程设计真的让我们学到了很多,从一开始的资料查找,到购买原件,再到设计电路和编写程序,让我们切实的感受到了一个项目的完成需要做很多的准备和付出很多的精力。不过在这

24、同时我们收获的也很多,总之这次课程设计让我们对单片机这一块有了很大的提高,很有意义。参考文献1 电子发烧友网.2 谭浩强.C语言程序设计(第三版)清华大学出版社.3 胡汉才.单片机原来及其接口技术(第三版)清华大学出版社.4 百度文库:最全面的DHT11中文资料 5 百度文库:单片机驱动蜂鸣器原理与设计 6 百度文库:DHT11数据手册 附录附录A硬件原理图附录B 代码#include#include#define uchar unsigned char#define uint unsigned int#define LCD_DB P2uchar Seg_Tab=0x3f,0x06,0x5b,

25、0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x76,0x77,0x63;/uchar Seg1_Tab=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;uchar Dig_Tab=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar temp_H,temp_L,humi_H,humi_L;uchar value,check,bt,sum,bt_temp,keynum,flag;uchar tH,tL,hH,hL,RHH,RHL,HT,LT;uchar warning_

26、RHHL2=65,20;uchar warning_THL2=25,16;uchar m,n,d1,d2,d3,d4,d5,d6;uchar TD=0;uchar s15;uchar s25;sbit Segce=P10;sbit Digce=P11;sbit Keyce=P13;sbit LCD_RS=P14;sbit LCD_RW=P15;sbit LCD_E=P16;sbit DHT11=P17;sbit HXD=P12;/*延时函数部分*void Delay(uint j)/(j/10)ms uchar i; for(;j0;j-) for(i=0;i0;i-) for(j=0;j2;

27、j+); /*DHT11数据接收处理与数码管显示部分*void inter_init() /初始化函数 P0=0; P1=0x0c; TMOD=0x01; TH0=-50000/256; TL0=-50000%256; EA=1; ET0=1;void COM(void) /DHT11的bit读取 uchar i; for(i=0;i8;i+) flag=2; while(!DHT11)&flag+); Delay_10us(); Delay_10us(); Delay_10us(); bt=0; if(DHT11)bt=1; flag=2; while(DHT11)&flag+); /超时则

28、跳出for循环 if(flag=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 value= warning_RHHL0) RHH=1 ; else RHH=0; /湿度与最大值相比 if(n= warning_THL0) HT=1 ; else HT=0; /温度与最大值相比 if(m= warning_THL1) LT=1 ; else LT=0; /温度与最小值相比s10 = (char)(0X30+d3); s11 = (char)(0X30+d4); /湿度整数部分 s12 = (char)(0X30+d6); /湿度小数部分 s20 = (

29、char)(0X30+d1); s21 = (char)(0X30+d2); /温度整数部分 s22 = (char)(0X30+d5); /温度小数部分void warning() /报警函数 uchar i; HXD=1; /蜂鸣器不报警 if(RHH|RHL)&(HT|LT) for(i=0;i5;i+) HXD=0; Delay(2000); HXD=1; Delay(2000); HXD=0; Delay(2000); HXD=1; /温湿度都超标时,频率1报警 else if(RHH|RHL)|(HT<) for(i=0;i5;i+) HXD=0; Delay(1000); H

30、XD=1; Delay(1000); HXD=0; Delay(1000); HXD=1; / 只有湿度超标时,频率2报警 else if(RHH&RHL)|(HT|LT) for(i=0;i5;i+) HXD=0; Delay(500); HXD=1; Delay(500); HXD=0; Delay(500); HXD=1; / 只有温度超标时,频率3报警 / 蜂鸣器报警void display() /数码管显示函数 uint j=0; P0=0XFF;Digce=1;Digce=0; P0=Seg_Tab10;Segce=1; Segce=0; P0=Dig_Tab4;Digce=1;D

31、igce=0;for(j=0;j500;j+); P0=0XFF;Digce=1;Digce=0;P0=Seg_Tab11; Segce=1;Segce=0; P0=Dig_Tab0;Digce=1;Digce=0;for(j=0;j500;j+); P0=0XFF;Digce=1;Digce=0;P0=Seg_Tab12;Segce=1;Segce=0;P0=Dig_Tab1;Digce=1;Digce=0;for(j=0;j500;j+); P0=0XFF;Digce=1;Digce=0;P0=Seg_Tabd4;Segce=1;Segce=0;P0=Dig_Tab2;Digce=1;Di

32、gce=0;for(j=0;j500;j+);P0=Seg_Tabd3;Segce=1;Segce=0; P0=Dig_Tab3;Digce=1;Digce=0;for(j=0;j500;j+);P0=Seg_Tab13;Segce=1;Segce=0;P0=Dig_Tab5;Digce=1;Digce=0;for(j=0;j500;j+); P0=0XFF;Digce=1;Digce=0;P0=Seg_Tabd2;Segce=1;Segce=0;P0=Dig_Tab6;Digce=1;Digce=0;for(j=0;j500;j+); P0=0XFF;Digce=1;Digce=0;P0=S

33、eg_Tabd1;Segce=1;Segce=0;P0=Dig_Tab7;Digce=1;Digce=0;for(j=0;j500;j+); /*LCD液晶屏函数部分*void LCD_write_command(uchar dat) /写指令 LCD_DB=dat; LCD_RS=0;/指令 LCD_RW=0;/写入 LCD_E=1;/允许 delay_n40us(1); LCD_E=0; delay_n40us(1); void LCD_write_data(uchar dat) /写数据 LCD_DB=dat; LCD_RS=1;/数据 LCD_RW=0;/写入 LCD_E=1;/允许

34、delay_n40us(1); LCD_E=0; delay_n40us(1); void LCD_disp_char(uchar x,uchar y,uchar dat) /字符显示 uchar address; if(y=1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); void LCD_init(void)/液晶屏初始化 LCD_write_command(0x38);/设置 8 位格式,2 行,5x7 LCD_write_command(0x0c);/整体显示,关光标,不闪烁 LCD_write_command(0x06);/设定输入方式,增量不移位 LCD_write_command(0x03);/清除屏幕显示 delay_n40us(100); void LCD_display() /LCD液晶屏显示 LCD_disp_char(0,1,s);LCD_disp_c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号