完整版温湿度采集系统设计汇总.docx
《完整版温湿度采集系统设计汇总.docx》由会员分享,可在线阅读,更多相关《完整版温湿度采集系统设计汇总.docx(19页珍藏版)》请在冰豆网上搜索。
完整版温湿度采集系统设计汇总
第1章设计意义及要求
1.1设计意义
最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。
在实时运作和自动控制的单片机应用到系统中,单片机如今是作为一个核心部件来使用,仅掌握单片机方面知识是不够的,还应根据其具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
现代社会越来越多的场所会涉及到温度与湿度并将其显示。
由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,例如:
冬天温度为18至25℃,湿度为30%至80%;夏天温度为23至28℃,湿度为30%至60%。
在此范围内感到舒适的人占95%以上。
在装有空调的室内,室温为19至24℃,湿度为40%至50%时,人会感到最舒适。
如果考虑到温、湿度对人思维活动的影响,最适宜的室温度应是工作效率高。
18℃,湿度应是40%至60%,此时,人的精神状态好,思维最敏捷。
所以,本课程设计就是通过单片机驱动LCD1602,液晶显示温湿度,通过此设计,可以发现本设计有一定的扩展性,而且可以作为其他有关设计的基础。
如何高效、稳定地对数据(包括温度、湿度光线、压力等项目)进行实时采集对于现代的企业、工厂、研究所等对数据精度要求较高的单位具有非常重要的意义。
1.2设计要求
本系统设计采用温度和湿度作为采集对象,是以单片机为核心的温度、湿度采集、数字显示系统,用液晶显示出当前温度、湿度的信息。
以此了解AT89S52芯片为核心外接温度传感器和湿度传感器模块在液晶显示屏上显示当前的温度和湿度的过程。
第2章硬件设计
2.1AT89S52芯片介绍
图3AT89S52引脚图
AT89S52功能特性描述:
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
AT89S52的主要特性是:
与MCS-51单片机产品兼容;8K字节在系统可编程Flash存储器;1000次擦写周期;全静态操作:
0Hz~33Hz;三级加密程序存储器;32个可编程I/O口线;三个16位定时器/计数器;八个中断源;全双工UART串行通道;低功耗空闲和掉电模式;掉电后中断可唤醒;看门狗定时器;双数据指针;掉电标识符。
图2-1AT89S52功能引脚图
功能引脚说明:
VCC:
电源
GND:
接地
RST:
复位输入
P0口:
是一个8位漏极开路的双向I/O口,也被作为低8位地址/数据复用。
P1口:
是一个有内部上拉电阻的8位双向I/O口,在flash编程和校验时,P1口接收低8位地址字节。
P2口:
是一个具有内部上拉电阻的8位双向I/O口,也接收高8位地址字节和一些控制信号。
P3口:
是一个具有内部上拉电阻的8位双向I/O口,亦作为AT89S52特殊功能(第二功能)使用。
ALE/PROG:
地址锁存控制信号。
PSEN:
外部程序存储器选通信号。
EA/VPP:
访问外部程序存储器控制信号。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
2.2液晶显示器LCD1602
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:
发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
(1)显示质量高
(2)数字式接口
(3)体积小、重量轻
(4)功耗低
2.2.1液晶显示原理
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
2.2.2液晶显示器分类
液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。
2.2.3显示原理
首先是液晶的线段的显示。
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,......(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理。
其次是液晶字符的显示。
用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
图2-2液晶显示原理图
2.2.4LCD1602的基本参数及引脚功能
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如图2-1所示:
图2-3LCD1602尺寸图
LCD1602的主要技术参数:
(1)显示容量:
16×2个字符
(2)芯片工作电压:
4.5—5.5V
(3)工作电流:
2.0mA(5.0V)
(4)模块最佳工作电压:
5.0V
(5)字符尺寸:
2.95×4.35(W×H)mm
引脚功能说明:
LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示:
表1引脚接口说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
2.3温湿度模块DHT11介绍
2.3.1DHT11概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为4针单排引脚封装。
连接方便,特殊封装形式可根据用户需求而提供。
它具备以下特点:
(1)相对湿度和温度测量
(2)全部校准,数字输出
(3)卓越的长期稳定性
(4)无需额外部件
(5)超长的信号传输距离
(6)超低能耗
(7)4引脚安装
(8)完全互换
应用领域有:
暖通空调、测试及检测设备汽车、数据记录器、消费品、自动控制、气象站、家电、湿度调节器、医疗、除湿器等。
温湿度传感器模块DHT11实物图为图2-4:
图2-4DHT11模块实物图
DHT11的供电电压为3-5.5V。
传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。
电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。
图2-5为DHT11接口说明:
图2-5DHT11接口说明图
表2为DHT11测量信息:
表2DHT11测量信息
型号
测量范围
测湿精度
测温精度
分辨力
封装
DHT11
20-90%RH0-50℃
±5%RH
±2℃
1
4针单排直插
测量分辨率分别为8bit(温度)、8bit(湿度)。
2.3.2DHT11传感特性说明
DHT11传感特性以表3所示:
表3DHT11传感特性说明
参数
条件
Min
Typ
Max
单位
湿度
分辨率
1
1
1
%RH
8
Bit
重复性
±1
%RH
精度
25℃
±4
%RH
0-50℃
±5
%RH
互换性
可完全互换
量程范围
0℃
30
90
%RH
25℃
20
90
%RH
50℃
20
80
%RH
响应时间
1/e(63%)25℃,1m/s空气
6
10
15
S
迟滞
±1
%RH
长期稳定性
典型值
±1
%RH/yr
温度
分辨率
1
1
1
℃
8
8
8
Bit
重复性
±1
℃
精度
±1
±2
℃
量程范围
0
50
℃
响应时间
1/e(63%)
6
30
S
2.3.3DHT11封装信息
DHT11封装信息以图2-6所示:
图2-6DHT11封装信息图
下表为DHT11引脚说明:
表4DHT11引脚说明
Pin
名称
注释
1
VDD
供电3-5.5VDC
2
DATA
串行数据,单总线
3
NC
空脚,请悬空
4
GND
接地,电源负极
2.3.4串行接口(单线双向)
DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零;操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
+8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集;采集数据后转换到低速模式。
通讯过程如图2-7所示:
图2-7DHT11通讯过程图
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。
DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。
主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
数字0信号表示方法如图2-8所示:
图2-8数字0信号表示图
数字1信号表示方法如图2-9所示:
图2-9数字1信号表示图
第3章设计实现
3.1设计框图及流程
系统总体结构设计框图如3-1所示。
主要包含了电源模块、温度传感器模块、湿度传感器模块、单片机最小系统和液晶显示模块。
图3-1系统总体设计
图3-2为LCD初始化显示流程图:
图3-2LCD初始化流程图
3.2设计结果及分析
通过程序的编译、烧写,最后在1602液晶显示屏上显示出了实时的温度和湿度,如图3-3所示:
图3-3温湿度显示结果图
从整个实现过程来看,首先是温湿度模块通过对环境的温湿度感应,将相应数据通过DATA端口传输到单片机;其次,加入电源后,由52芯片将接受的数据进行处理;最后,通过下载程序使1602上显示出实时的温湿度。
另外,只要将单片机通电后,随时改变温湿度模块周围的温度和湿度情况,在1602液晶显示屏上便会出现相应的改变;例如,向温湿度模块呵一口气,液晶显示屏上的数据便会向上有着一定的波动。
这便是整个设计过程的相应情况。
第4章设计总结
课程设计是培养学生综合运用所学知识发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我仍感慨颇多。
在接近一个月的日子里,可以说是苦多于甜,虽然如此,却学到很多很多的的东西,同时还巩固了以前所学过的知识,并学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正让自己有所了解,有所体会,从而提高自己的实际动手能力和独立思考的能力。
当然,在设计的过程中遇到了很多问题,但是通过这些问题,我又能发现自己的不足之处。
虽然问题重重,但在老师和同学的帮助下,问题都得以解决,所以,非常感谢帮助过我的老师和同学。
总之,通过这次课程设计,我知道了很多,了解了很多,学到了很多。
参考文献
[1]肖婧.单片机系统设计与仿真-基于Proteus.北京航空航天大学出版社,2010:
104-107
[2]薛小玲,刘志群等.单片机接口模块应用与开发实例详解.北京航空航天大学出版社,2010:
343-363
[3]张萌,和湘等.单片机应用系统开发综合实力.清华大学出版社.2007:
120-129
[4]何立民.单片机应用系统设计.北京航空航天出版社,1990:
89-97
[5]史军勇,冀炯灶.基于AT89C51的温湿度控制仪.哈尔滨工业大学出版社,2004:
27-52
附录
源程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
charread_data();
voidclock(void);
voidinit_lcd(void);
voidwr_lcd(uchardat_cmd,ucharcontent);
voidlcd_play(ucharx,uchary,uchark,uchar*ch);
sbitwr=P3^6;
sbitrd=P3^7;
sbitrs=P2^0;
sbitrw=P2^1;
sbiten=P2^7;
sbitDHT=P3^5;
ucharshiZ,shiX,wenZ,wenX,check;
uchartr_shiZ,tr_shiX,tr_wenZ,tr_wenX;
ucharflag;
uchara[]="wendu:
";
ucharb[]="shidu:
";
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=800;y>0;y--);
}
voiddelay1(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=8;y>0;y--);
}
voidwr_cmd(ucharcmd)
{
wr=0;
rd=0;
rs=0;
rw=0;
P0=cmd;
delay(5);
en=1;
delay(5);
en=0;
}
voidwr_dat(uchardat)
{
wr=0;
rd=0;
rs=1;
rw=0;
P0=dat;
delay(5);
en=1;
delay(5);
en=0;
}
voidlcd_init()
{
wr_cmd(0x38);
wr_cmd(0x0c);
wr_cmd(0x06);
wr_cmd(0x01);
}
charread_data()
{
uchari,num,temp;
num=0;
for(i=0;i<8;i++)
{
flag=2;
while((!
DHT)&&flag++);//等待50毫秒低电平
delay1(4);//延时判断0还是1
if(DHT==1)
{
temp=1;
flag=2;
while(DHT&&flag++);
}
else
temp=0;
num<<=1;
num|=temp;
}
return(num);
}
voidread_init()
{
DHT=0;//主机使DHT11低电平并延时至少18ms
delay(20);
DHT=1;//主机置DHT11高电平20~40us,并等待从机相应
delay1(4);
DHT=1;
if(!
DHT)//从机发出响应信号
{
flag=2;
while((!
DHT)&&flag++);//等待从机发高电平结束
flag=2;
while(DHT&&flag++);//开始采集数据
tr_shiZ=read_data();//采集湿度
tr_shiX=read_data();//采集湿度
tr_wenZ=read_data();//采集温度
tr_wenX=read_data();//采集温度
check=read_data();//采集校验位
}
DHT=0;
delay
(1);//采集完数据后
}
voidwrited(ucharadd,uchardate)//在固定位置写数字
{
ucharshi,ge;
shi=date/10;
ge=date%10;
wr_cmd(add-1);
wr_dat('0'+shi);//'0'和0x30都是转换数据格式的
wr_cmd(add);
wr_dat(0x30+ge);
}
voiddisplay()
{
uchari;
wr_cmd(0x80);//第1行地址
for(i=0;i<6;i++)
{
wr_dat(a[i]);
}
wr_cmd(0xc0);//第2行地址
for(i=0;i<6;i++)
{
wr_dat(b[i]);
}
}
voidmain()
{
uchartemp;
lcd_init();
while
(1)
{
read_init();
display();
temp=tr_shiZ+tr_shiX+tr_wenZ+tr_wenX;
if(check==temp)
{
shiZ=tr_shiZ;
wenZ=tr_wenZ;
writed(0x87,wenZ);
wr_cmd(0x88);
wr_dat(0xdf);
wr_dat(0x43);
writed(0xc7,shiZ);
P1=tr_shiZ;
}
}
}