温湿度传感器课程设计.docx
《温湿度传感器课程设计.docx》由会员分享,可在线阅读,更多相关《温湿度传感器课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
![温湿度传感器课程设计.docx](https://file1.bdocx.com/fileroot1/2023-6/27/0f857c17-c56f-4d4f-b227-de5ba3d0989e/0f857c17-c56f-4d4f-b227-de5ba3d0989e1.gif)
温湿度传感器课程设计
等级:
湖南工程学院
课程设计
课程名称单片机原理与应用
课题名称环境温、湿度检测系统设计
专业自动化
班级1191
学号20
姓名
指导教师李晓秀王迎旭
2013年12月12日
湖南工程学院
课程设计任务书
课程名称单片机原理与应用
课题环境温、湿度检测系统设计
专业班级自动化
学生姓名
学号2011
指导老师李晓秀
审批
任务书下达日期2013年12月1日
任务完成日期2013年12月13日
设计内容与设计要求
设计内容:
本课题要求以单片机为核心,采用温湿度传感器DHT11设计一个对环境温度湿度的检测系统,要求用按键控制系统选择分别对温度或湿度的测试、复位、清除功能,用四位LED数码管显示实时温度和温度。
设计要求:
1)确定系统设计方案;
2)进行系统的硬件设计;
3)完成必要元器件选择;
4)系统软件设计及调试;
5)系统联调及操作说明
6)按规范要求写设计说明书
主要设计条件
1、PC机及单片机调试软件;
2、开发板1块;
3、系统设计、调试所需的元器件
说明书格式
1.课程设计任务书
2.目录
3.总体方案确定
4.各单元硬件电路设计及计算方法
5.软件设计与说明(包括流程图)
6.调试结果与必要的调试说明
7.总结
8、参考文献
9、附录
附录A系统原理图
附录B程序清单
10、课程设计成绩评分表。
进度安排
设计时间分为二周
第一周
星期一、上午:
布置课题任务,课题介绍及讲课。
下午:
借阅有关资料,总体方案讨论。
星期二、确定总体方案,学习与设计相关内容。
星期三、各部分方案设计,各部分设计。
星期四、设计及调试。
星期五、设计及调试。
星期六、设计及调试。
第二周
星期一:
设计及调试。
星期二:
设计及调试。
星期三:
调试、写说明书。
星期四--星期五上午:
写说明书、完成电子版并打印成稿。
星期五下午:
答辩。
参考文献
[1]王迎旭等.单片机原理及及应用[M] 机械工业出版社.2012年
[2]康华光等.模拟电子技术 第五版[M] 高等教育出版社 2011年
[3]杜树春等.单片机C语言[M] 北京航空航天大学出版社
第1章概述7
设计任务与要求7
设计方案7
第2章硬件设计8
时钟电路和复位电路8
温湿度测量电路设计9
按键电路10
第3章软件设计12
主函数设计12
按键查询13
实时监控与测试流程图14
第4章硬件调试与结果分析15
调试过程15
硬件调试16
第5章总结18
参考文献19
附录一:
系统仿真图20
附录二:
源程序21
电气与信息工程系课程设计评分表29
第1章概述
设计任务与要求
本课题以单片机为核心,用智能集成温温度传感器DHT11主要实现检测温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机进行数据的分析和处理,在数码管上显示当前温湿度。
要求用按键控制系统选择分别对温度或湿度的测试、复位、清除功能,完成硬件调试。
设计方案
本课题的温湿度测试,通过单片机STC-89C51连接温湿度模块、显示模块将温度、湿度同时显示。
单片机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,如果没有接收到单片机发送来的信号,DHT11不会主动进行温度采集,采集数据后转换到低速模式。
系统设计框图如图所示。
图程序设计框图
第2章硬件设计
时钟电路和复位电路
MCS-51单片机内部有一个用于构成振荡器的高增益反放大器,引脚XTAL1和XTAL2分别是反相放大器的输入端和输出端。
通常,经由片外晶体振荡器或陶瓷谐振器与两个匹配电容一起构成一个自激振荡电路。
本课题由片外晶体振荡器与两个匹配电容一起构成了一个内部时钟振荡电路,为单片机提供时钟源。
本设计复位电路采用按键复位,当开关断开时,与上电自动复位电路相同;当开关闭合时,电容通过并联的电阻迅速放电,然后,RC电路充电,能够保证RST端能够维持一段时间的高电平。
如图所示。
图时钟及复位电路
温湿度测量电路设计
DHT11的供电电压为3-,传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。
电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。
数据用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分。
如图所示,本电路上拉电阻为5K,数据端接(接受温湿度数据)。
图2.2温湿度测量电路
显示电路
本电路由四位一体共阳极数码管显示,采用9015三极管做位驱动。
根据发光二极管物理连接的不同,七段数码管可以分为共阴极和共阳极两种结构。
其中P0端口为段选,~为位选,如图所示。
图显示电路
按键电路
单片机设计中按键可分为独立式按键和矩阵式按键,本系统由于按键较少,故采用四个独立按键,上拉电阻为1K。
其中,四个按键功能分别是显示温度、显示湿度、实时监控显示温湿度、测试温湿度。
如图。
图按键电路
第3章软件设计
本软件设计主要是对距离进行测量、显示。
因此,整个软件可分为按照硬件电路对单片机位定义;温湿度设置子程序;温湿度接收子程序;显示子程序;延时子程序等。
由于本设计方案要求硬件电路和软件编程相结合,所以选择合适的编程语言十分重要。
C语言执行效率没有汇编语言高,但语言简洁,使用方便灵活,运算丰富,表达化类型多样化,程序设计自由度大,很好的可重用性,可移植性等特点基于C语言的众多优点本设计选择此语言来编程。
主函数设计
软件分为两部分,主程序和中断服务程序。
主程序完成初始化工作、温湿度数据接收处理控制。
外部中断服务子程序主要完成时间值的读取、结果的输出等工作,如图所示。
初始化
开始
显示
扫描
按键
图主程序流程图
按键查询
独立式按键接口采用直接读入方式工作,直读式键盘接口是一个输入接口,输入接口主要功能是解决数据输入的缓冲(选通)问题。
本设计按键较少,采用的独立按键。
是否按键
确定键
实
时
测
试
显
示
湿
度
显
示
温
度
测
试
Y
图查询按键处理
在扫描按键函数中,每按下不同按键会返回一个不同的数值,在主函数中有按键查询函数判断为那个按键按下,随后进入不同的子函数,如图所示。
实时监控与测试流程图
本系统设计分为实时监控与测试模块,图示为测试模块。
上电是数码管显示四个零,当按下测试按键后,系统开始测量环境温、湿度。
当数码管显示四个“—”时,表示成功测量温、湿度。
当按下温度(湿度)显示按键,该模块显示测试时的温度(湿度)。
当要进行下一次测量时,必须按下测试按键。
开始
是否按键
显示
是否按键
调用测试函数
N
温度按键按下
调用显示温度函数
调用显示湿度函数
Y
Y
湿度按键按下
Y
N
Y
图测试流程图
图示为实时监控模块,按下实时监控键后,启动T0定时器开始定时,每一分钟测试一次温度、湿度,并在四位一体的共阳极数码管轮流显示温度、湿度。
当按下温度(湿度)显示按键后,该模块只显示实时的温度(湿度)。
当再次按下实时监控按键后。
定时器T0关闭。
显示
开始
是否按键
是否按键
重装初值启动定时器
调用测试函数
N
N
Y
Y
轮流显示温湿度
图实时监控模块
第4章硬件调试与结果分析
调试过程
在编写此程序前,感觉DHT11的通信程序和取数程序最为难写,在之前的学习中我并没有接触过单总线的通信时序图。
通过查阅资料和参考现有的程序,然后在老师讲解和与本组的其他组员谈论后,终于弄明白这方面的知识。
而在测量函数中,刚开始并没有测得数据,通过查阅书籍我设置了一个全局变量,一步一步跟踪每一步并显示在P1的LED灯上,一步一步跟踪,完善了DTH11的通信与取数函数。
但在通信与取数函数与按键函数衔接时,总是有一定的概率测不到数据,慢慢的调试我发现我的通信与取数函数要连续调用两次才能每次正确的读取数据,在此,我设置了一个全局变量作为一个标志位,每次按下测量键是将该标志位设置为2,使通信与取数函数循环两次,这样保证了每次按下测试按键后就能与DHT11正确的通信从而保证得到正确的数据。
在实时监控这个模块中,为了保证温、湿度能循环显示、按键后能只显示温度(湿度)。
由于按键有限,所以一下设置了很多的标志位。
因为标志位太多,而没有将所有的环节考虑进去,一下程序有调试了很久才正确的实现要求的功能。
硬件调试
如图所示,按下左下角按键时,单片机开始与DHT11通信并开始测试温、湿度。
图示为测量温、湿度成功。
图初始化
当按下图示按键时,数码管显示此时或实时监控的环境湿度。
其中最前端的“C”表示此时显示的事环节温度,如图。
图显示湿度
当按下此按键时,数码管显示此时或实时监控的环境温度。
其中最前端的“H”表示此时显示的是环境湿度,如图。
图显示温度
第5章总结
这次单片机课程设计不仅巩固了以前学过的知识,而且学到了很多书本上没有没到的知识,掌握了一种系统的研究方法,可以进行一些简单的编程,通过这次课程设计我们明白理论与实际相结合是很重要的,只有理论知识还不够,理论实践相结合才能提高实际动手能力和独立思考的能力。
同样,在学习中也发现了自己的不足之处,例如对以前所学过的知识理解不够深刻,掌握不够牢固。
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我仍感慨颇多。
的确,从选题到定稿,从理论到实践,在接近两个星期的日子里,可以说得是苦多于甜,在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,通过这次课程设计之后,一定把以前所学过的知识重新温故。
参考文献
[1] 王迎旭等.单片机原理及及应用[M] 机械工业出版社.2012年
[2] 龚建伟、熊光明等.串口通信[M]
[3] 康华光等.模拟电子技术第五版[M] 高等教育出版社2011年[4] 杜树春等.单片机C语言[M] 北京航空航天大学出版社
附录一:
系统仿真图
附录二:
源程序
#include<>
bitflag2,flag3,flag5;
sbitdht11=P1^7;
#defineNUMBER20待50us低电平结束
while((dht11==0)&&(count++if(count>=NUMBER)
{
status=ERROR;度值
for(i=0;i{
value_array[i]=DHT11_ReadValue();
if(status==ERROR)//调用ReadValue()读数据出错会设定status为ERROR
{
dht11=1;
returnERROR;
}
//读出的最后一个值是校验值不需加上去
if(i!
=SIZE-1)
{//读出的五字节数据中的前四字节数据和等于第五字节数据表示成功
check_value+=value_array[i];
}
}//endfor
display(led0,led1,led2,led3);//在没用发生函数调用失败进行校验
if(check_value==value_array[SIZE-1])
{
value_humi=value_array[0];
value_temp=value_array[2];
dht11=1;
returnOK;//正确的读出dht11输出的数据
}
else
{
returnERROR;//校验数据错
}
}
}
voiddelay_1_002s(void)
{
unsignedcharz,b,c;
for(z=0;z<10;z++)
{
for(b=0;b<160;b++)
{
for(c=0;c<207;c++);
}
}
}
voiddelay(unsignedcharx)
{
unsignedchari,j;
for(i=0;ifor(j=0;j<120;j++);
}
voiddisplay(unsignedcharled0,led1,led2,led3)
{
P2=0xfe;P0=led_code[led0];delay(5);
P2=0xfd;P0=led_code[led1];delay(5);
P2=0xfb;P0=led_code[led2]&0x7f;delay(5);
P2=0xf7;P0=led_code[led3];delay(5);
P2=0xff;
}
unsignedcharkeyscan(void)
{
unsignedcharcord_l;
cord_l=P3&0xf0;
if(cord_l!
=0xf0)
{
display(led0,led1,led2,led3);
if(cord_l!
=0xf0)
{
while(P3!
=0xf0)
{
P3=0xf0;//等待按键释放
}
return(cord_l);
}
return(0xf0);
}
}
voidceshiwenshidu(void)
{
unsignedchard;
for(;flag4>0;flag4--)
{
d=DHT11_ReadTempAndHumi();
display(led0,led1,led2,led3);
if(flag3==0)
{
if(d==1)
{
led0=16;
led1=16;
led2=16;
led3=16;
}
}
}
flag4=1;
}
voidxianshishidu(void)
{
led0=17;
led1=value_humi/10;
led2=value_humi%10;
led3=0;
}
voidxianshiwendu(void)
{
led0=12;
led1=value_temp/10;
led2=value_temp%10;
led3=0;
}
voidmain()
{
unsignedcharkey;
P3=0xf0;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=0;
delay_1_002s();
display(led0,led1,led2,led3);
while
(1)
{
display(led0,led1,led2,led3);
key=keyscan();
if(flag1==10)
{
ceshiwenshidu();
display(led0,led1,led2,led3);
}
switch(key)
{
case0xe0:
flag4=2,ceshiwenshidu();break;//开始测试温湿度
case0xd0:
xianshishidu(),flag5=1,flag2=0;break;//显示湿度
case0xb0:
xianshiwendu(),flag5=1,flag2=1;break;//显示温度
case0x70:
flag4=1,TR0=~TR0,flag3=~flag3,flag5=0;break;
}
}
}
voidshishiceshi_T0(void)interrupt1
{
TH0=0x3c;
TL0=0xb0;
flag1++;
if(flag1==NUMBER)
{
flag1=0;
if(flag5==0)
{
flag2=~flag2;
}
if(flag2==0)
{
xianshishidu();
}
else
{
xianshiwendu();
}
}
}
电气与信息工程系课程设计评分表
项目
评价
优
良
中
及格
差
设计方案合理性与创造性(10%)
开发板焊接及其调试完成情况*(10%)
硬件设计或软件编程完成情况(20%)
硬件测试或软件调试结果*(10%)
设计说明书质量(20%)
答辩情况(10%)
完成任务情况(10%)
独立工作能力(10%)
出勤情况(10%)
综合评分
指导教师签名:
________________
日期:
________________
注:
①表中标*号项目是硬件制作或软件编程类课题必填内容;
②此表装订在课程设计说明书的最后一页。
课程设计说明书装订顺序:
封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。