温湿度检测系统设计_第1页
温湿度检测系统设计_第2页
温湿度检测系统设计_第3页
温湿度检测系统设计_第4页
温湿度检测系统设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、等级:湖南工程学院课 程 设 计课程名称 单片机原理与应用 课题名称 环境温、湿度检测系统设计 专 业 自动化 班 级 1003 学 号 201001020324 姓 名 罗金细 指导教师 李晓秀 王迎旭 汪超 林国汉 2013年 7 月 2 日湖南工程学院课 程 设 计 任 务 书课程名称 单片机原理与应用 课 题 环境温、湿度检测系统设计 专业班级 自动化1003 学生姓名 罗金细 学 号 201001020324 指导老师 李晓秀 审 批 任务书下达日期 2013 年 6 月 21 日任务完成日期 2013年 7 月 2 日设计内容与设计要求设计内容:本课题要求以单片机为核心,采用温湿度

2、传感器 DHT11设计一个对环境温度湿度的检测系统,要求用按键控制系统选择分别对温度或湿度的测试、复位、清除功能,用四位LED数码管显示实时温度和温度。还可由用户设定温度和湿度的上、下限,设计越限报警功能。设计要求:1)确定系统设计方案; 2)进行系统的硬件设计;3)完成必要元器件选择;4)系统软件设计及调试;5)系统联调及操作说明6)按规范要求写设计说明书主 要 设 计 条 件1、 PC机及单片机调试软件;2、 开发板1块; 3、系统设计、调试所需的元器件。说 明 书 格 式1. 课程设计任务书2. 目录3. 总体方案确定4. 各单元硬件电路设计及计算方法5. 软件设计与说明(包括流程图)6

3、. 调试结果与必要的调试说明7. 总结8、参考文献9、附录附录A 系统原理图附录B 程序清单 10、课程设计成绩评分表。进 度 安 排设计时间分为二周第一周星期一、上午:布置课题任务,课题介绍及讲课。下午:借阅有关资料,总体方案讨论。星期二、确定总体方案,学习与设计相关内容。星期三、各部分方案设计,各部分设计。星期四、设计及调试。星期五、设计及调试。星期六、设计及调试。第二周星期一:设计及调试。星期二:设计及调试。星期三:调试、写说明书。星期四-星期五上午:写说明书、完成电子版并打印成稿。星期五下午:答辩。参 考 文 献1 王迎旭等.单片机原理及及应用.机械工业出版社.2012年2 陈海晏编.

4、51单片机原理与应用M.北京航空航天大学出版社.20103 百度百科目录第1章 总体方案设计11.1 设计内容11.2 总体设计1第2章 硬件设计22.1 DHT11温度湿度传感器电路设计22.2 按键电路模块设计22.3 晶振电路和复位电路设计32.3 LED数码显示模块设计42.4 报警模块设计5第3章 软件设计63.1 主程序设计63.2 DHT11数据读取子程序设计73.3 按键子程序设计83.4 LED显示子程序设计10第4章 系统安装与调试114.1 系统安装接线图114.2 调试与结果11第 5章 总结13第6章 参考文献14第7章 附录15附录A 系统原路图15附录B 程序清单

5、15电气与信息工程系课程设计评分表29第1章 总体方案设计1.1 设计内容要求以单片机为核心,采用温湿度传感器 DHT11设计一个对环境温度湿度的检测系统,要求用按键控制系统选择分别对温度或湿度的测试、复位、用四位LED数码管显示实时温度和温度。还可由用户设定温度和湿度的上、下限,设计越限报警功能。1.2 总体设计本次设计主要设计了温湿度的测量与显示,硬件方面共分为7个模块,即单片机主控模块、按键模块、晶振电路、复位电路、LED显示模块、报警模块以及DHT11电路模块。数字温湿度传感器DHT11送来数据,经单片机STC90C52RC处理后,并送入LED显示模块,按键电路主要用来完成单片机的启动

6、操作和温湿度初始值的设定,需要4个按键,一个显示温度,一个显示湿度,一个用来设定初始温度和初始湿度的上限值和下限值一个,另外一个负责启动DHT11。报警电路就是用一个蜂鸣器和一个指示灯来实现的,用来判断周围环境的温度或者湿度是否超出设定值了,超出设定值蜂鸣器就会报警。系统总体框图如图1-1。DHT11传感器模块按键电路模块STC90C52RC单片机LED数码显示模块报警模块晶振电路复位电路 图1-1 系统总体框图30第2章 硬件设计2.1 DHT11温度湿度传感器电路设计此次单片机课程设计采用的是DHT11数字温湿度传感器,而且是单总线(双向)结构,所以温湿度检测电路的结构比较简单。此次课程设

7、计温度测量范围:0-50摄氏度;湿度测量范围:20%-90%RH。DHT11只有一根数据线,一根电源线,一根地线,还有一根(NC)悬空。直接将电源线与单片机的电源VCC相连,地线与单片机的GND相连。数据线DATA与单片机的P1.0口相连,外加一个5K的上拉电阻。所需要的温湿度数据便是由DATA引脚通过P1.0送入单片机的,在单片机内做出相应的处理之后得到相应的温湿度数据,原理图如图2-1所示。悬空DATADHT11VCCSTC90C52RCP1.0图2-1 温度检测原理图2.2 按键电路模块设计此次课程设计采用的按键电路为独立按键电路。按键电路就是四个按键分别与STC90C52RC的P1.1

8、、P1.2、P1.3、P1.4口相连,分别与S1-S4相连。当有按键按下时单片机收到有效的信号,S1键显示实际所测得的湿度,S2键显示实际所测得的温度和S3键的功能为设置温+5VMCS-51P1.1P1.2P1.3P1.4湿度的上限值和下限值,S1键为加1,S2键为减1。当S1键和S2键单独使用时用来切换显示温湿度的精确数据,S4为启动DHT11传感器的独立开关具体原理图如图2-2所示。S1GNDS2S3S4图2-2 按键原理图2.3 晶振电路和复位电路设计STC90C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部

9、方式产生。其晶振电路如图2-3所示。图2-3 晶振电路复位电路是保证单片机正常运行的关键因素,所以可靠地复位电路设计是必要的。将RST引脚连续输入2个机器周期(即24个时钟振荡期间)以上高电平,即可以完成单片机的初始化操作。本设计采用按钮复位方式,其复位电路如图2-4所示。图2-4 复位电路2.3 LED数码显示模块设计 此次课程设计采用的共阳极LED动态数码显示,所谓动态显示,是采用动态扫描的方法逐个地循环点亮各位显示器。虽然在任一时刻只有一位显示器被点亮,但由于人眼具有视觉残留效应看起来与全部显示器持续点亮效果是完全一样的。为了实现LED显示器的动态扫描,除了要给显示器提供段码(字形代码)

10、的输入外,还要对显示器进行位控制,这就是通常所说的段控和位控。本次课程设计中段码控制为单片机的P1.0-P1.7分别与LED的A.B.C.D。E.F.G.Dp相连,实现了字符的显示,单片机的P2.4-P2.7分别与四个LED(W1.W2.W3.W4)显示起相连,实现位控制。其显示原理图如图2-5所示。图2-5 数码显示原理图2.4 报警模块设计此次课程设计的报警模块采用一个LED显示灯、一个10K的限流电阻和一个扬声器。当实测温度湿度在设定的范围内,LED灯熄灭,扬声器不会发出警报,工作正常!如果实测温湿度不在设定的范围内,LED灯亮,扬声器发出警报,此时系统工作不正常!应根据要求调节温湿度设

11、定的上下阀值!报警指示原理图如图2-6所示。 图2-6 报警指示原理第3章 软件设计3.1 主程序设计开机启动系统,进入主函数MAIN后延时0.1S等待启动,当按下启动键S4,然后调用温湿度子程序CWD读取温湿度,并用数组将实测的温湿度数据保存起来,分别将温湿度除十取整,将处理后的数据调用到温湿度范围检测函数temphumi_range判断实测的温湿度是否在设定的范围内并作出相应的处理(正常工作或警报)。其主程序流程图如图3-1所示。开机延时、启动读取温湿度、处理、存储N温湿度越限?Y报警N按键是否按下?Y结束显示实测温、湿度 图3-1 主程序流程图3.2 DHT11数据读取子程序设计单片机通

12、过I/O口P1.0向DHT11发送开始信号,DHT11接收到开始信号后进行处理。过对P1.0的状态进行监测,判断DHT11是否准备就绪,若准备就绪则读取温湿度数据,如果未准备就绪,则继续等待,此时开始读取温湿度数据,然后进行数据保存、显示。其数据读取流程图如图3-2所示。开始主机P1.0发送开始信号否是否准备就绪?是读取温湿度数据保存、显示结束图3-2 数据读取流程图3.3 按键子程序设计系统开始工作,按下功能键S3显示所测的温湿度(前两位为所测湿度,后两位为所测温度)。此时如果按下功能键S1单独显示所测的湿度,具体显示到小数点后一位,再按下功能键S2单独显示所测的温度,精度同湿度显示一样,此

13、刻按下功能键S3回到初始工作状态即同时显示温湿度。在按下功能键S3可以分别对温湿度上下限进行设计,本次所用的温湿度传感器DHT11所测的范围是湿度测量范围:20%-90%RH;温度测量范围:0-50摄氏度。其按键流程图如图3-3所示。开始功能键S3是否按下?显示温湿度是否是功能键S2是否按下?单独显示温度否是单独显示湿度功能键S1是否按下?否结束 图3-3 按键流程图在功能键S3按下的时候可以分别对上下限温湿度进行设定,当按下功能键S1或S2的时候,此时为+”键和“-”键分别用来设置温湿度上下限的数值,“+”键按下一次,相应数值加1,“-”键按下一次,相应数值减1。当功能键按下次数为0,此时显

14、示的是实际温湿度。其温湿度上下限设定程序流程图如图3-4所示。开始 功能键S3是否按下?是显示温湿度否上限键是否按下?是设置温湿度上限否下限键是否按下?否是设置温湿度下限结束图3-4 温湿度上下限设定程序流程图3.4 LED显示子程序设计数码管显示主要用于同时显示温湿度和单独显示精确的温度和湿度,其显示流程图如图3-5所示 开始段码送入P0位码送入P2.4-P2.7显示结束图3-5 显示流程图第4章 系统安装与调试4.1 系统安装接线图本设计是在Keil C环境下开发的,在编译完Keil C后,再运用STC_ISP_V48.8软件烧录到开发板上,实现实物与程序的连接。如图4-1系统安装接线图。

15、图4-1 系统安装接线图4.2 调试与结果调试完成后,可进行温湿度的测量和上下限温湿度的设定。当功能键按下时,可单独显示温湿度和温湿度上下限值。鉴于调试图很多,本次设计以典型具有代表性调试图作为本次课程设计有力说明。如图所示。 图4-2 湿度的显示 图4-3 温度的显示 图4-4 湿度上限值 图4-5 温度上限值第 5章 总结本次课程设计还算比较的成功,设计初期,老师要我们确定系统的主体设计,比如一些主流程图、按键显示模块等,我们这个小组也能按时完成李老师布置的任务,跟着李老师一步步的走过来,其实感觉起来这个课程设计不是那么的难,比我刚开始着手的时候要简单。在设计的过程中,为了找到自己需要的资

16、料我们一起去读书馆找一些单片机课程设计实例来看看,不过在南校区读书馆资源也是非常的有限,而且还是比较旧的资料,像关于本次用的温湿度传感器DHT11在南院的图书馆几乎没有,图书馆只有什么单个测温度或者湿度的传感器,不过这个对我们的课程设计帮助也挺大的,另外此次课程设计的程序来源与百度百科,不过并不是按部就班,我们在它的基础上把它弄懂、理解之后加入自己的设计想法,我想做课程设计无非是想让我们学到,在别人已有的基础上加入自己的设计方案,慢慢的变为自己的知识。在此分别对李晓秀老师和我这组的同学表示感谢。第6章 参考文献1 王迎旭编.单片机原理与应用M.机械工业出版社.20122 陈海晏编.51单片机原

17、理与应用M.北京航空航天大学出版社.20103 黄仁欣编.单片机原理与应用技术M.清华大学出版社.20104 张中明编.单片计算机原理及接口技术M.人民邮电出版社出版社.2009 5 百度百科第7章 附录附录A 系统原路图附录B 程序清单#include <reg52.h>#include <intrins.h> #define uchar unsigned char#define uint unsigned inttypedef uchar U8; /* 无符号8位整型变量 */typedef uint U16; /* 无符号16位整型变量 */ -定义区-/ U8

18、U8FLAG;U8 U8count,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp;U8 U8comdata ,U8RH_data_L_temp,U8checkdata_temp;U8 str5="DHT11"sbit dht11= P10 ;/ 定义传感器端口sbit Buffer=P15;/ 高电平有效 蜂鸣器Sbit keyqd=14; / 按键定义sbit keyfun=P13

19、;sbit keyadd=P11;sbit keysub=P12;/ 报警上、下限温湿度uchar tup=50,tdown=0,hup=90,hdown=20;/ 按键功能标识uchar keynum=0,warn_flag=0,count=0,differ=0;/ 共阳极数码管 0-9"0-9", 10-小数点,11-负号, 12-空,13-上限号,14-下限号;uchar code LEDData = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0xbf,0xff,0xfe,0xf7; / 低位选通,从

20、右往左数1-4uchar code LEDwei=0x7f,0xbf,0xdf,0xef;void keyscan();void temphumi_range(int tempr,int humir);void CWD(void);void COM(void);void display_4f1(uint i,uint j,uint k,uint l);void display_3w(uint i,uint j,uint k);void display_4w(uint i,uint j,uint k,uint l);void show11(uchar wei,uchar num);int BUF

21、FER_ON();int BUFFER_OFF();void Delay_10us(void);void delay_ms(uchar xms);void main()uint tt,hh;uchar i;delay_ms(0.1); / 延时0.1mS(12M晶振) if(keyqd=0) /启动while(1) i=120;/ 调用温湿度读取子程序 CWD();str0=U8RH_data_H; str1=U8RH_data_L;str2=U8T_data_H;str3=U8T_data_L;str4=U8checkdata;tt=str2*10+str3/10;hh=str0*10+st

22、r1/10;temphumi_range(tt,hh);/ 120次调用显示,消耗_2.12s_时间while(i-)if(keynum=0)/ 前两位显示湿度,后两位显示温度display_4w(str0/10,str0%10,str2/10,str2%10); / 传感器休息时间长,防止按键丢包keyscan(); else if(keynum=1)temphumi_range(tt,hh);display_4f1(13,tup/10,tup%10,0);keyscan();else if(keynum=2)temphumi_range(tt,hh);display_4f1(14,tdow

23、n/10,tdown%10,0);keyscan();else if(keynum=3)temphumi_range(tt,hh);display_4f1(13,hup/10,hup%10,0);keyscan();else if(keynum=4)temphumi_range(tt,hh);display_4f1(14,hdown/10,hdown%10,0);keyscan();/ Delay(20000); / 读取模块数据周期不易小于2S* /*延时子程序*/void delay_ms(uchar xms) / 1ms延时 char x,y;for(x=xms;x>0;x-)fo

24、r(y=110;y>0;y-);/ -延时函数-/ void Delay_10us(void) / 延时_10usU8 i;i-;i-;i-;i-;i-;i-;int BUFFER_OFF()Buffer=0;return -1;int BUFFER_ON()Buffer=1;return -1; /*显示子程序*/void show11(uchar wei,uchar num)P2=0xff;/ 消影P0=LEDDatanum;P2=LEDweiwei;delay_ms(1);/ 执行整个函数时间 17.675msvoid display_4w(uint i,uint j,uint k

25、,uint l)uint n;for(n=0;n<90;n+)if(i=0)show11(3,12);else show11(3,i);if(j=0)if(i=0)show11(2,12);else show11(2,j);else show11(2,j);show11(2,10);/ 小数点show11(1,k);show11(0,l);/ 执行整个函数时间 14.071msvoid display_3w(uint i,uint j,uint k)uint n;for(n=0;n<90;n+)if(i=0)show11(1,12);else show11(2,i);show11(

26、1,j);show11(1,10);/ 小数点show11(0,k);void display_4f1(uint i,uint j,uint k,uint l)uint n;for(n=0;n<90;n+)if(i=0)show11(3,12);else show11(3,i);if(j=0)if(i=0)show11(2,12);else show11(2,j);else show11(2,j);show11(1,k);show11(1,10);/ 小数点show11(0,l);/ -主机接收DHT11数据-/ void COM(void)U8 i; for(i=0;i<8;i+

27、) U8FLAG=2;while(!dht11)&&U8FLAG+);/ dht11=0等待/ 30us是个界限(2628代表'0';50代表'1'=小于30是'0',/ 大于30是'1'(下一步用if判断)Delay_10us();Delay_10us();Delay_10us();U8temp=0; / 没过30us代表的就是'0'if(dht11)U8temp=1; / dht11=1,过了30us还是高电平,说明高电平持续时间代表的是'1'U8FLAG=2;while(dht

28、11)&&U8FLAG+); / dht11=1,/ 超时则跳出for循环 if(U8FLAG=1)break;/ 上一步dht11一直是0,知道U8FLAG加到0(256)才执行到此,/ (跳出时又加了一次'1'=U8FLAG=1)上一步执行了254次,这一步接的是上一个while语句/ 判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; / 数据位左移U8comdata|=U8temp; / - 湿度读取子程序 -/ / -以下变量均为全局变量-/ / -温度高8位= U8T_data_H-/ /

29、-温度低8位= U8T_data_L-/ / -湿度高8位= U8RH_data_H-/ / -湿度低8位= U8RH_data_L-/ / -校验 8位 = U8checkdata- / void CWD(void)/ 主机拉低18ms dht11=0; / 消耗18ms时间,防止闪屏if(keynum=0)display_4w(str0/10,str0%10,str2/10,str2%10); / 前两位显 示湿度,后两位显示温度else if(keynum=1)display_4f1(13,tup/10,tup%10,0);else if(keynum=2)display_4f1(14,

30、tdown/10,tdown%10,0);else if(keynum=3)display_4f1(13,hup/10,hup%10,0);else if(keynum=4)display_4f1(14,hdown/10,hdown%10,0);/ Delay(180);dht11=1;/ 总线由上拉电阻拉高 主机延时30usDelay_10us();Delay_10us();Delay_10us();/ 主机设为输入 判断从机响应信号 dht11=1;/ 判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!dht11) U8FLAG=2;/ 判断从机是否发出 80us 的低

31、电平响应信号是否结束 while(!dht11)&&U8FLAG+);U8FLAG=2;/ 判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while(dht11)&&U8FLAG+);/ 数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata; / 湿度COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;/ 温度COM();U8checkdata_temp=U8comdata;/ 校验

32、码dht11=1; / _(数据校验) U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);if(U8temp=U8checkdata_temp)U8RH_data_H=U8RH_data_H_temp;U8RH_data_L=U8RH_data_L_temp;U8T_data_H=U8T_data_H_temp;U8T_data_L=U8T_data_L_temp;U8checkdata=U8checkdata_temp;/*判断温湿度范围函数*/void temphumi_range(int

33、tempr,int humir)if(tempr>=tdown)&&(tempr<=tup)&&(humir>=hdown)&&(humir<=hup)BUFFER_OFF();elseBUFFER_ON();/*按键函数*/void keyscan()if(keyfun=0) / 功能键检测delay_ms(10);if(keyfun=0) while(keyfun=0); keynum+; / 0启动,非0停止if(keynum=5)keynum=0; if(keynum=0)display_4w(str0/10,st

34、r0%10,str2/10,str2%10); / 前两位显示湿度,后两位显示温度if(keynum=1)display_4f1(13,tup/10,tup%10,0);if(keynum=2)display_4f1(14,tdown/10,tdown%10,0);if(keynum=3)display_4f1(13,hup/10,hup%10,0);if(keynum=4)display_4f1(14,hdown/10,hdown%10,0);if(keyadd=0) / +键检测delay_ms(10);if(keyadd=0)switch(keynum)/ 组合键功能case 0: while(keyadd=0);while(1)display_3w(str0/10,str0%10,str1/10);/ 指定湿度显示功能按键if(keysub=0)|(keyadd=0)|(keyfun=0)break; case 1: tup+; if(tup=100)tup=99; while(keyadd=0) display_4f1(13,tup/10,tup%10,0); / 防止停顿break;case 2: tdown+; if(td

温馨提示

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

评论

0/150

提交评论