收藏 分享(赏)

环境温、湿度检测系统设计——课程设计论文.doc

上传人:wo7103235 文档编号:6153590 上传时间:2019-03-30 格式:DOC 页数:29 大小:811.50KB
下载 相关 举报
环境温、湿度检测系统设计——课程设计论文.doc_第1页
第1页 / 共29页
环境温、湿度检测系统设计——课程设计论文.doc_第2页
第2页 / 共29页
环境温、湿度检测系统设计——课程设计论文.doc_第3页
第3页 / 共29页
环境温、湿度检测系统设计——课程设计论文.doc_第4页
第4页 / 共29页
环境温、湿度检测系统设计——课程设计论文.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、1湖南工程学院课 程 设 计课程名称 单片机原理与应用 课题名称 温湿度检测系统 专 业 自动化 班 级 学 号 姓 名 指导教师 年 月 日2湖南工程学院课 程 设 计 任 务 书课程名称 单片机与应用 课 题 环境温、湿度检测系统设计 专业班级 学生姓名 学 号 指导老师 审 批 任务书下达日期 年 月 日任务完成日期 年 月 日3设 计 内 容 与 设 计 要 求设计内容:本课题要求以单片机为核心,采用温湿度传感器 DHT11设计一个对环境温度湿度的检测系统,要求用按键控制系统选择分别对温度或湿度的测试、复位、清除功能,用四位 LED 数码管显示实时温度和湿度。还可由用户设定温度和湿度的

2、上、下限,设计越限报警功能。设计要求:1)确定系统设计方案;2)进行系统的硬件设计;3)完成必要元器件选择;4)系统软件设计及调试;5)系统联调及操作说明6)按规范要求写设计说明书4主 要 设 计 条 件1、 PC 机及单片机调试软件;2、 开发板 1 块; 3、系统设计、调试所需的元器件。说 明 书 格 式1. 课程设计任务书2. 目录3. 总体方案确定4. 各单元硬件电路设计及计算方法5. 软件设计与说明(包括流程图)6. 调试结果与必要的调试说明7. 总结8、参考文献9、附录附录 A 系统原理图附录 B 程序清单 10、课程设计成绩评分表。5进 度 安 排设计时间分为二周第一周星期一、上

3、午:布置课题任务,课题介绍及讲课。下午:借阅有关资料,总体方案讨论。星期二、确定总体方案,学习与设计相关内容。星期三、各部分方案设计,各部分设计。星期四、设计及调试。星期五、设计及调试。星期六、设计及调试。第二周星期一:设计及调试。星期二:设计及调试。星期三:调试、写说明书。星期四-星期五上午:写说明书、完成电子版并打印成稿。星期五下午:答辩。参 考 文 献1 王迎旭等.单片机原理及及应用.机械工业出版社.2012 年6目录第 1 章 系统总体方案设计 .81.1 系统设计方案总体思路 81.2 系统总体方案框图 8第 2 章 硬件设计 92.1 STC89C52 简介 .92.2 晶振电路

4、.92.3 复位电路 .92.4 共阳数码管显示电路 .102.5 键盘电路 .102.6 DHT11 传感器电路 .112.7 报警电路 .12第 3 章 软件设计与说明 .123.1 系统软件设计思路 .123.2 主程序设计 133.3 键盘函数 143.4 显示程序设计 .15第 4 章 调试结果与说明 .174.1 系统调试说明 .174.2 调试结果 .17第 5 章 总结 18参考文献 .19附录 A 系统电理图路原 .20附录 B 系统程序清单 .217第 1 章 系统总体方案设计1.1 系统设计方案总体思路根据课题,设计温湿度检测系统电路,采用单片机 STC89C52 为控制

5、芯片。根据设计要求所需的实现要求,将总电路分为键盘接口电路、单片机时钟电路、复位电路、LED 显示电路、DHT11 传感器电路、报警电路几个模块。键盘接口电路为 4*4 矩阵式键盘,采用查询法,键盘连接到单片机的 P2 口(P1.0-P1.3 列线, P1.4-P1.7 行线) ,在本系统中采用内部时钟电路,由一个石英晶体管振荡器和两个微调电容组成;复位电路中给给 RST 引脚连续输入 2 个机器周期(即 24 个时钟振荡周期)以上高电平,就可完成初始化操作;显示电路与单片机 I/O 相连,采用4 段 7 位共阳 LED 显示管显示温湿度。 。1.2 系统总体方案框图根据设计思路确定的总体方案

6、如图 1-2 所示。图 1-2 系统总体框图DHT11 传感器STC89C52晶振电路键盘电路LED 数码管显示复位电路段码位控制报警电路8第 2 章 硬件设计2.1 STC89C52 简介STC89C52 是 STC 公司生产的一种低功耗高性能 CMOS8 位微控制器,具有 8K 在系统可编程 FLASH 存储器。STC89C52 使用经典的 MCS-51内核,但做了很多改进使得芯片具有传统 51 单片机不具备的功能。拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 STC89C52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。2.2 晶振电路单片机工作的时间基准是由时

7、钟电路所控制的。在单片机的XTAL1 和 XTAL2 两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路。电路中,电容器 C1 和 C2 对振荡频率有微调作用,均选用20pF,石英晶体选择 12MHZ。晶振电路如图.图 2-2 晶振电路 2.3 复位电路复位电路是保证单片机正常运行的关键因素,所以可靠地复位电路设9计是必要的。将 RST 引脚连续输入 2 个机器周期(即 24 个时钟振荡期间)以上高电平,即可以完成单片机的初始化操作。本设计采用按钮复位方式。复位电路如图:图 2-3 复位电路2.4 共阳数码管显示电路LED 数码管采用共阳数码管,采用动态显示方式,减少硬件资源。动态扫描显示

8、接口是单片机中应用最广泛的一种显示方式。数码管的 dp 段以及 g-a 段依序与 P0 口的 P0.7-P0.0 连接。4 位 LED的位选线分别由相对应的 P2.0-P2.3 控制。显示电路如图:图 2-4 显示电路102.5 键盘电路该系统采用 4*4 矩阵式键盘电路,在矩阵式键盘中,每条水平线和垂直线交叉处都由一个按钮连接。键盘的行线与 P1 口的 P1.4-P1.7 相连,列线与 P1.0-P1.3 相连。本系统采用 4 个键:键 0:启动系统,传感器有响应。键 1:设置温湿度的上下限。键 2:暂停。键 3:单片机复位,系统停止工作。键盘电路如下 :图 2-5 键盘电路图2.6 DHT

9、11 传感器电路DHT11是一种能对环境的温湿度参数进行采样的传感器。传感器中的DATA 用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据。 +8bi温度整数数据+8bit温度小数数据。+8bit校验和。DHT11传感器电路如下:11图2-6 DHT11传感器电路2.7 报警电路蜂鸣器是一种一体化的电子通讯响应器。在本系统中,当温湿度超过其上下线时报警。图2-7 报警

10、电路12第 3 章 软件设计与说明此次系统设计是通过 C 语言编程,其中包括数码管显示部分、键盘扫描部分、传感器采样温湿度部分。3.1 主程序设计主程序初始化,主程序循环扫描是否有键按下,如有键按下则做出相应的功能处理,若无键按下则继续执行显示函数。3.4 显示程序设计显示采用 4 位共阳数码管,段码在程序数据区定义,根据需要查表取得,再送往 P0 口,以控制数码管显示不同字符数字。位码由 P2.0P2.3口分别控制晶体数码管的位控位 W4W1,以控制各个数码管显示。13NY图 3-4 显示程序流程图开始保护现场开始初始化送段码查表取字型码送位码恢复现场延时显示4 位显示扫描完?返回14第 4

11、 章 调试结果与说明4.1 系统调试说明本系统调试过程中采用直接硬件调试的方法,对整体的系统程序进行分解排故,首先对八段显像管进行数字显示测试,然后对键盘进行按键响应测试,当测试都得到正确结果时,将键盘与显示结合起来,并给予恰当的字型码,最后加入定时器中断程序,给出正确的脉冲信号和频率。调试过程中,数码管显示的数字闪烁,原因是传感器接触不良,后换了导线,数字不在闪烁。按键出现按下一键响应多次的情况,后查出由于键位抬起子程序书写不当,造成键盘多次响应,并加上了松手去抖程序后问题得以顺利解决。4.2 调试结果接上温湿度传感器 DHT11 后和电源后,将程序下载到板子上,按下 0号键启动,执行程序,

12、数码管上显示了环境的温湿度参数。图 5-1 显示环境温湿度参数15第 5 章 总结经过两周的单片机课程设计,终于完成了单片机环境温湿度检测系统的设计,其中收获许多,付出了许多精力和时间,实践能力的到了一定的提高。刚学完单片机并且经历了考试,我一直以为我对单片机有了不少的了解,课透过此次课程设计,我才看到了自己的诸多不足,也学到了很多知识与技巧。虽然之前有做过不少课程设计,但以前大多是单独的软件或者硬件设计,这次设计让我有了长足的进步,真正实现了对单片机硬件与软件的兼顾与融会贯通。单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件

13、简单的事。由于 C 语言学习较早,很多技巧与方法早就忘得差不多了,上课与做实验,我一直以来都是使用汇编语言来编写程序,可课题的复杂度明显比试验中遇到的要大得多,C 语言编程的方便性让我不得不着手 C 语言开始。这也让我再次巩固了以前学习的专业知识。面对大量的参考资料甚至是几乎现成的参考报告,我选择了在学习吸纳的基础上另辟蹊径,虽然遇到困难的时候都想放弃,直接用现成的程序和报告,可看到其他同学和我一样在埋头苦干、老师期盼的眼神,我选择了坚持下来,当然,现在这是我骄傲的资本。虽然这个课题不算难,但是从硬件电路到最后程序的编写和调试都是自己摸索出来的,这个过程中也遇到了不少困难,更多的是成功后的喜悦

14、,学习永无止境,只有把学习和实践当做一种乐趣那么即便有再大的困难也会是一种享受。16参考文献1 王迎旭. 单片机原理与应用 M.北京:机械工业出版社 ,2004.2 陈海宴. 51 单片机原理及应用 M.北京:北京航空航天大学出版社,2010.3 胡汉才. 单片机原理及其接口技术 M.北京:清华大学出版社,2010.4 李全利. 单片机原理及应用技术 M.北京:高等教育出版社,2004.5 陈光东. 单片微型计算机原理及接口技术 M.华中科技大学出版社,2001.6 何立民. 51 系列单片机应用与实践教程 M. 北航出版社,.17附录 A 系统电路原理图18附录 B 系统程序清单/P1.0-

15、P1.7 段选 a-dp,P2.0-P2.3 位选 w4-w1,p1 口接矩阵键盘 列接高四位,横接低四位/键盘:0 键启动,1 键设置,2 键暂停,3 键复位#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define uchar unsigned char#define uint unsigned intunsigned char code led_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf;/*共阳字型段码表,“0“-

16、“F“,“-“*/uchar led0,led1,led2,led3;/*-函数声明-*/ uchar keyscan(void);/键盘扫描void delay(uint i); /延时程序void display(uchar led0,led1,led2,led3);/动态扫描显示程序/*-主函数-*/void main()uchar key;19P1=0xff; /*关所有位显示 */led0=16; /*显示初始状态 “- - - 0”*/led1=16;led2=16;led3=0;while(1)display(led0,led1,led2,led3); /*调显示*/key=ke

17、yscan(); /调用键盘扫描,switch(key)case 0x7e:led0=0;break; /0 按下相应的键,首位数码管显示相对应的值case 0x7d:led0=1;break; /1case 0x7b:led0=2;break; /2case 0x77:led0=3;break; /3case 0xbe:led0=4;break; /4case 0xbd:led0=5;break; /5case 0xbb:led0=6;break; /6case 0xb7:led0=7;break; /7case 0xde:led0=8;break; /8case 0xdd:led0=9;b

18、reak; /9case 0xdb:led0=10;break; /acase 0xd7:led0=11;break; /bcase 0xee:led0=12;break; /ccase 0xed:led0=13;break; /dcase 0xeb:led0=14;break; /ecase 0xe7:led0=15;break; /f20/*-键盘扫描程序,P1.0-P1.3 列线, P1.4-P1.7 行线,-*/uchar keyscan(void) /键盘扫描函数,使用行列反转扫描法uchar cord_h,cord_l;/行列值中间变量P1=0x0f; /行线输出全为 0cord_

19、h=P1 /读入列线值if(cord_h!=0x0f) /先检测有无按键按下,cord_h 不等于 0x0f 无键按下display(led0,led1,led2,led3); /*调显示*/if(cord_h!=0x0f)cord_h=P1 /读入列线值P1=cord_h|0xf0; /输出当前列线值cord_l=P1 /读入行线值return(cord_h+cord_l);/键盘最后组合码值return(0xff); /无键按下返回值/*-动态扫描显示程序,P0 段控,P2.0-P2.3 位控 (反向驱动)-*/21void display(led0,led1,led2,led3) /P2

20、=0xfe;P0=led_codeled0;delay(5);P2=0xfd;P0=led_codeled1;delay(5);P2=0xfb;P0=led_codeled2;delay(5);P2=0xf7;P0=led_codeled3;delay(5);/*-延时程序-*/void delay(int x )int i,j;for(i=0;i #include typedef unsigned char unint8; typedef unsigned char unint16; unsigned char table0= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x

21、82,0xf8,0x80,0x90;/不带小数点 unsigned char str1=“ “; unsigned char str2=“ “; sbit TRH = P30;/温湿度传感器 DHT11 数据接入 sbit LCD_RS = P26; 22sbit LCD_RW = P25; sbit LCD_EN = P27; void disp(unint8 str1,unint8 str2,unint8 str3,unint8 str4); unint8 TH_data,TL_data,RH_data,RL_data,CK_data; unint8 TH_temp,TL_temp,RH_

22、temp,RL_temp,CK_temp; unint8 com_data,untemp,temp; unint8 respond; void delayNOP() _nop_(); _nop_(); _nop_(); _nop_(); / 毫秒级延时子程序 void delay_ms(unsigned char ms) unsigned char i; while(ms-) for(i = 0; i 150; i+) _nop_(); _nop_(); _nop_(); _nop_(); /5us 级延时程序 23void delay_us() unint8 i; i-; i-; i-; i

23、-; i-; char receive() unint8 i; com_data=0; for(i=0;i=7;i+) respond=2; while(!TRH) delay_us(); delay_us(); delay_us(); if(TRH) temp=1; respond=2; while(TRH) else temp=0; com_data=1; com_data|=temp; 24return(com_data); void read_TRH() /主机拉低 18ms TRH=0; delay_ms(18); TRH=1; /DATA 总线由上拉电阻拉高主机延时 20us de

24、lay_us(); delay_us(); delay_us(); delay_us(); TRH=1; /判断 DHT11 是否有低电平响应信号如不响应则跳出,响应则向下运行 if(!TRH) respond=2; /判断 DHT11 发出 80us 的低电平响应信号是否结束 while(!TRH) respond=2; /判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(TRH /数据接收状态 RH_temp = receive(); RL_temp = receive(); 25TH_temp = receive(); TL_temp = receive();

25、CK_temp = receive(); TRH=1; /数据校验 untemp=(RH_temp+RL_temp+TH_temp+TL_temp); if(untemp=CK_temp) RH_data = RH_temp; RL_data = RL_temp; TH_data = TH_temp; TL_data = TL_temp; CK_data = CK_temp; /湿度整数部分 str10 = table0RH_data/10; str11 = table0RH_data%10; /温度整数部分 str20 =table0TH_data/10; str21 = table0TH_

26、data%10; /主函数 /TH,TL,RH,RL 分别代表温湿度的整数和小数部分 void main() delay_us(); TMOD=0X01;/选择定时器工作方式 26TH0=(65536-12000)/256; TL0=(65536-12000)%256; EA=1;/开总中断 ET0=1;/开定时器中断 TR0=1;/启动定时器 while(1) read_TRH(); void T0_timer() interrupt 1 TH0=(65536-20000)/256; TL0=(65536-20000)%256; disp(str10,str11,str20,str21);

27、void disp(unint8 str1,unint8 str2,unint8 str3,unint8 str4) P2=0xfe; P0=str1; delay_ms(1); P2=0xfd; P0=str2; delay_ms(1); /P2=0xfb; /P0=str3; /delay_ms(1);P2=0xfb; 27P0=str3; delay_ms(1); P2=0xf7; P0=str4; delay_ms(1); /P2=0xdf; /P0=str6; /delay_ms(1); 28电气与信息工程系课程设计评分表评 价项 目优 良 中 及格 差设计方案合理性与创造性(10%)开发板焊接及其调试完成情况*(10%)硬件设计或软件编程完成情况(20%)硬件测试或软件调试结果 *(10%)设计说明书质量(20%)答辩情况(10%)完成任务情况(10%)独立工作能力(10%)出勤情况(10%)综 合 评 分指导教师签名:_日 期:_ 注:表中标*号项目是硬件制作或软件编程类课题必填内容;此表装订在课程设计说明书的最后一页。课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件(非 16K 大小的图纸及程序清单) 。 29

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

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报