温湿度检测设计概要.docx
- 文档编号:24256975
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:22
- 大小:298.57KB
温湿度检测设计概要.docx
《温湿度检测设计概要.docx》由会员分享,可在线阅读,更多相关《温湿度检测设计概要.docx(22页珍藏版)》请在冰豆网上搜索。
温湿度检测设计概要
课程设计
题目温、湿度测量系统的研究
学院(部)工业制造学院
专业测控技术及仪器
学生姓名车健
学号201010114208年级2010
指导教师莫莉职称讲师
2013年12月30日
摘要
本次课程设计是以51单片机为核心,利用51单片机控制传感器芯片将采集到的温度和湿度信号转换成数字信号并进行采集,用LCD16020进行显示温度湿度的大小;同时单片机做出判断如果温度过高或者过低LED发光二极管和蜂鸣器发出警报。
本次实习利用C言编程,本次设计Protues、Keil软件进行仿真和编程。
通过本次课程设计我做到了进一步加深巩固理解单片机的工作原理和操作编程以及连接方法。
关键字:
单片机;温湿度传感器;C语言程序;仿真
一绪论
1研究背景:
随着工业的发展,需要对温湿度进行控制的场合越来越多。
例如:
仓库系统、电力系统、档案资料库、烟草、食品加工等待,温湿度的高低对其影响很大,如仓库中的温湿度过高会使食物变质;档案资料库房中的温度忽高忽低,纸张纤维热胀冷缩,使强度降低,湿度过大会使霉菌害虫滋长,以致造成资料变质。
由于温湿度的控制不当导致的经济损失将让我们无法估计,为避免收到温湿度的影响,需要安装温湿度控制系统减少因温度和湿度的变化给我们带来的经济损失。
温湿度是基本的环境参数,人们生活与其息息相关,在工业生产过程中需要实时测量温湿度,在农业生产中也离不开温湿度的测量。
因此研究温湿度的测量有着重要的意义。
2国内外现状及主要应用
国外对温湿度控制技术研究较早,始于20世纪70年代。
先是采用模拟式的组合仪表,采集现场信息并进行指示、记录和控制。
80年代末出现了分布式控制系统。
目前正开发和研制计算机数据采集控制系统的多因子综合控制系统。
现在世界各国的温湿度测控技术发展很快,一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展。
我国对于温湿度测控技术的研究较晚,始于20世纪80年代。
我国工程技术人员在吸收发达国家温湿度测控技术的基础上,才掌握了温湿度室内微机控术,该技术仅限于对温湿度的单项环境因子的控制。
我国温湿度测控设施计算机应用,在总体上正从消化吸收、简单应用阶段向实用化、综合性应用阶段过渡和发展。
在技术上,以单片机控制的单参数单回路系统居多,尚无真正意义上的多参数综合控制系统,与发达国家相比,存在较大差距。
我国温湿度测量控制现状还远远没有达到工厂化的程度,生产实际中仍然有许多问题困扰着我们,存在着装备配套能力差,产业化程度低,环境控制水平落后,软硬件资源不能共享和可靠性差等缺点。
二课程设计的方案设计及论证
1设计要求
基于单片机设计温湿度测量系统,对某些有特殊要求的温度和湿度场合实现长期、稳定、实时和自动的监测。
测量到的温湿度由LCD显示,如果温湿度过高或过低,则报警电路会自动报警。
本系统的湿度测量范围为0~100%RH,湿度测量精度为±3.0%RH,温度测量范围为-40~+120℃。
2课程设计方案
本系统采用AT89C52单片机作为控制芯片,LCD1602作为显示模块,利用LED等作为指示器,报警装置是蜂鸣器,当温度过高或者过低蜂鸣器发出警报,直到温度降低至设定值一下。
而温湿度传感器采用SHT75作为传感器芯片。
3论证
使用AT89C51单片机设计温湿度检测系统,可以及时精确的反应室内的温度以及湿度的变化。
完成诸如温度湿度过高或者过低的报警以便我们更好的控制、实时检测温度的变化、湿度的变化,将测系统应用到温室当中无疑为植被的生长提供了更加适宜的环境、该系统电路简单、工作温度、集成度高、调试方便、测试精度高、功能强、体积小、价格低、简单灵活等优点,能很好的满足工农业工艺要求。
SHT75既可以检测温度还可以检测湿度精度满足要求而且可靠性高。
LED灯价格便宜发光强度大。
LCD1602显示字节数、多两排显示方便调节。
三统的硬件结构设计
图3-1硬件电路图
硬件连接口设计
单片机P0口作为LCD1602的数据传输口,P2.0、P2.1、P2.2作为控制端;P1.1口作为SHT75的SCK传送口、P1.2作为SH75的DATA连接口外接上拉电阻;P2.5作为警报器的连接口;P2.6和P2.7作为LED灯的连接口
芯片介绍
AT89C51
AT89C51是ATMEL公司推出的8位微处理器,硬件1287M数据存储器,4个可编程I/O口、一个全双工异步串行口、2个可编程16位定时器、一个看门口定时器,中断系统拥有5个中断源、26个特殊功能寄存器。
由6MHz的晶振,两个30pF电容,以及一个复位电路共同构成单片机的最小系统。
P0端口(P0.0~P0.7,39~32引脚):
P0口是一个漏极开路的8位双向I/O口。
作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。
在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。
此时,P0口内部上拉电阻有效。
在FlashROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。
验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):
P1口是一个带内部上拉电阻的8位双向I/O口。
P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流(
)。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:
表2-1P1.0和P1.1引脚复用功能
引脚号
功能特性
P1.0
T2(定时器/计数器2外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器2捕获/重装触发和方向控制)
P2端口(P2.0~P2.7,21~28引脚):
P2口是一个带内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。
P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(
)。
在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX@DPTR”指令)时,P2送出高8位地址。
在访问8位地址的外部数据存储器(如执行“MOVX@R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。
P3口除作为一般I/O口外,还有其他一些复用功能,如下表所示:
表2-2P3口引脚复用功能
引脚号
复用功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0的外部输入)
P3.5
T1(定时器1的外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
RST(9引脚):
复位输入。
当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作。
ALE/
(30引脚):
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
(29引脚):
外部程序存储器选通信号(
)是外部程序存储器选通信号。
当AT89C51RC从外部程序存储器执行外部代码时,
在每个机器周期被激活两次,而访问外部数据存储器时,
将不被激活。
/VPP(31引脚):
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,
必须接GND。
注意加密方式1时,
将内部锁定位RESET。
为了执行内部程序指令,
应该接VCC。
在Flash编程期间,
也接收12伏VPP电压。
表2-3中断号和中断向量
中断号n
中断源
中断向量
0
外部中断0
0003H
1
定时器0
000BH
2
外部中断1
0013H
3
定时器1
001BH
4
串行口中断
0023H
SHT75
SHT7x(包括SHT71和SHT75)属于Sensirion温湿度传感器家族中的插针型封装系列。
传感器将传感元件和信号处理电路集成在一块微型电路板上,输出完全标定的数字信号。
传感器采用专利的CMOSens®技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件,并在同一芯片上,与14位的A/D转换器以及串行接口电路实现无缝连接。
因此,该产品具有品质卓越、响应迅速、抗干扰能力强、性价比高等优点。
每个传感器芯片都在极为精确的湿度腔室中进行标定,校准系数以程序形式储存在OTP内存中,用于内部的信号校准。
两线制的串行接口与内部的电压调整,使外围系统集成变得快速而简单。
微小的体积、极低的功耗,使SHT1x成为各类应用的首选。
选择供电电压后将传感器通电,上电速率不能低于1V/ms。
通电后传感器需要11ms进入休眠状态,在此之前不允许对传感器发送任何命令。
用一组“启动传输”时序,来完成数据传输的初始化。
它包括:
当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变为低电平,随后是在SCK时钟高电平时DATA翻转为高电平。
图7:
"启动传输"时序后续命令包含三个地址位(目前只支持000),五个命令位。
SHT75会以下述方式表示已正确地接收到指令:
在第8个SCK时钟的下降沿之后,将DATA下拉为低电平(ACK位)。
在第9个SCK时钟的下降沿之后,释放DATA(恢复高电平)。
图2—1传感器启动时序图
发布一组测量命令(‘00000101’表示相对湿度RH,‘00000011’表示温度T)后,控制器要等待测量结束。
这个过程需要大约20/80/320ms,分别对应8/12/14bit测量。
确切的时间随内部晶振速度,最多可能有-30%的变化。
SHT7x通过下拉至低电平并进入空闲模式,表示测量的结束。
控制器在再次触发SCK时钟前,必须等待这个“数据备妥”信号来读出数据。
检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。
接着传输2个字节的测量数据和1个字节的CRC奇偶校验(可选择读取)。
uC需要通过下拉DATA为低电平,以确认每个字节。
所有的数据从MSB开始,右值有效(例如:
对于12bit数据,从第5个时钟起算作MSB;而对于8bit数据,首字节则无意义)。
在收到CRC的确认位之后,表明通讯结束。
如果不使用CRC-8校验,控制器可以在测量值LSB后,通过保在测量和通讯结束后,SHT7x自动转入休眠模式。
图2—2传感器时序图
发光二极管
发光二极管简称为LED。
由镓(Ga)与砷(AS)、磷(P)的化合物制成的二极管,当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。
在电路及仪器中作为指示灯,或者组成文字或数字显示。
磷砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光
LCD1602
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
四系统程序设计
程序流程图
是
否
程序
#include
#include
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineMeasure_TEMP0x03//温度
#defineMeasure_HUMI0x05//湿度
unsignedcharT_End;
unsignedcharH_End;
sfrWDT_CONTR=0xc1;
sfrP4=0xc0;
ucharLCD_DSY1[]="wendu";
ucharLCD_DSY2[]="shidu";
sbitTH_CLK=P1^1;
sbitTH_DAT=P1^2;
sbitBee=P2^4;
sbitHigh=P2^5;
sbitLow=P2^6;
unsignedcharTH_Array[3];
bitError;
voiddelay(uintx)
{
uchart;
while(x--)
for(t=0;t<120;t++);
}
voidStart(void)
{
EA=0;
TH_CLK=1;
TH_DAT=0;
_nop_();
TH_CLK=0;
_nop_();_nop_();_nop_();
TH_CLK=1;
TH_DAT=1;
_nop_();
TH_CLK=0;
EA=1;
}
//写一字节
voidWrite_Byte(unsignedcharValue)
{
unsignedchari;
EA=0;
for(i=0x80;i>0;i/=2)
{
if(i&Value)TH_DAT=1;
elseTH_DAT=0;
TH_CLK=1;
_nop_();_nop_();_nop_();
TH_CLK=0;
}
TH_DAT=1;
TH_CLK=1;
Error=TH_DAT;//读SHT71的应答
TH_CLK=0;//第九脉冲后上拉数据线
//returnError;//为1就错
EA=1;
}
//-------------------------------------------------------------------------
//读一字节
unsignedcharRead_Byte(bitack)
{
unsignedchari,val=0;
EA=0;
TH_DAT=1;
for(i=0x80;i>0;i/=2)
{
TH_CLK=1;
if(TH_DAT)val=(val|i);
TH_CLK=0;
}
TH_DAT=!
ack;//MCU要在每个字节后应答SHT71
TH_CLK=1;
_nop_();_nop_();_nop_();
TH_CLK=0;
TH_DAT=1;
EA=1;
returnval;
}
//-------------------------------------------------------------------------
//温度湿度测试
//0x00:
温度测试
//0x01:
湿度测试
voidMeasure(unsignedcharMode)
{
unsignedintWait_i;
Start();
switch(Mode)
{
case0x00:
Write_Byte(Measure_TEMP);break;
case0x01:
Write_Byte(Measure_HUMI);break;
default:
break;
}
for(Wait_i=0;Wait_i<65535;Wait_i++)
{
WDT_CONTR=0x35;
if(TH_DAT==0)
break;//延时等待转换完成
}
if(Wait_i==0xffff)
{
Error=1;
return;
}
TH_Array[0]=Read_Byte
(1);
TH_Array[1]=Read_Byte
(1);
TH_Array[2]=Read_Byte(0);
}
//-------------------------------------------------------------------------
//温度湿度补偿
//很明显一个float不能表示两个字节的温度湿度测试结果的
//由于湿度不可能为负所以简单一些
unsignedintCalc_SHT75(void)
{
constfloatc1=4.0;
constfloatc2=0.0405;//在程序过程中不可改变的单精度浮点数
constfloatc3=0.0000028;
constfloatt1=0.01;
constfloatt2=0.00008;
floatrh_lin;
floatth_ture;
floatt_c;
unsignedintTemp_T;
unsignedintTemp_H;
unsignedintTH_Result_Bk;
Error=0;
Measure(0x00);//温度
memcpy(&Temp_T,TH_Array,2);
Measure(0x01);//湿度
memcpy(&Temp_H,TH_Array,2);
if(Error)
return(TH_Result_Bk);//calc
t_c=Temp_T*0.01-40;
rh_lin=c2*Temp_H-c3*Temp_H*Temp_H-c1;
th_ture=(t_c-25-128)*(t1+t2*Temp_H)+rh_lin;
T_End=t_c;//保存温度
H_End=th_ture;//保存湿度
if(T_End>40)
{
TR0=1;
High=~High;
delay(200);
}
else
{
TR0=0;
High=1;
}
if(T_End<10)
{
TR0=1;
Low=~Low;
delay(200);
}
else
{
TR0=0;
Low=1;
}
}
voidmain()
{
uintm=0,p=0,q=0,n=0;
TMOD=0x02;
TH0=0x01;
TL0=0x01;
ET0=1;
EA=1;
while
(1)
{
Calc_SHT75();
m=T_End;
n=H_End;
if(T_End>50)
{
Bee=~Bee;
High=~High;
}
LCD_DSY1[6]=m/100+'0';
LCD_DSY1[7]=m/10%10+'0';
LCD_DSY1[8]=m%10+'0';
LCD_DSY2[6]=n/100+'0';
LCD_DSY2[7]=n/10%10+'0';
LCD_DSY2[8]=n%10+'0';
Initialize_LCD1602();
LCD1602_Display(0,0,LCD_DSY1);
LCD1602_Display(0,1,LCD_DSY2);
}
}
voidwarming()interrupt1
{
Bee=~Bee;
}
五仿真
图5-1正常温度
图5-2温度过高报警
图5-3温度过低报警
六心得体会
单片机在各行各业中正得到越来越广泛的应用,尤其是51、52系列单片机,在自动化领域迅速占领着重要地位,并取得了许多令人瞩目的成就,展现了广阔的应用前景。
本次课程设计:
基于单片机的温湿度测量系统的研究与设计,已经基本完成。
通过这次毕业设计,我掌握了一些实践性质的设计的基本步骤:
首先,对市场上温湿度测量系统要有初步了解,并了解其研究现状及存在的不足,本设计方案的可利用程度等等,明确设计的任务及要达到的目标。
其次,要确立设计方案,进行原器件的选型与硬件设计,并用protues软件画出设计电路图并仿真。
最后,进行系统软件设计时,要弄清楚各个模块实现的功能,对整个系统进行软件编程实现。
由于个人的能力有限,系统还存在不完善的地方,还值得改进和优化。
比如本设计中在调试过程中,有些部分程序运行的结果总是达不到预期的效果,温湿度的修正还存在着一些问题,导致检测出来的温湿度与实际的存在着误差,这些方面的问题会在以后的学习和工作中逐步加强与完善。
参考文献
[1]陆子明,徐长根. 单片机设计与应用基础教程[M]. 国防工业出版社, 2005.01
[2]朱勇. 单片机原理与应用技术, 清华大学出版社[M]. 2011
[3]杨将新,李华军,刘东骏.单片机程序设计及应用从基础到实践[M]. 电子工业出版社, 2011
[4]李法春.单片机原理及接口技术案例教程[M]. 北京,机械工业出版社,2009
[5]李朝青.单片机原理及接口技术[M].北京, 航空航天大学出版社,2010
[6]杨加国,谢维成.单片机原理与应用及C51程序设计(第2版)[M]. 清华大学出版社, 2009
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温湿度 检测 设计 概要