基于protues的温湿度测量系统设计.docx
《基于protues的温湿度测量系统设计.docx》由会员分享,可在线阅读,更多相关《基于protues的温湿度测量系统设计.docx(22页珍藏版)》请在冰豆网上搜索。
![基于protues的温湿度测量系统设计.docx](https://file1.bdocx.com/fileroot1/2023-1/4/6b06c86f-061a-4788-8e0e-0fcf3c394372/6b06c86f-061a-4788-8e0e-0fcf3c3943721.gif)
基于protues的温湿度测量系统设计
毕业论文
学生姓名
谢欢欢
学号
170907073
学院
物理与电子电气工程学院
专业
电子信息工程
题目
基于PROTUES的温湿度测量系统设计
指导教师
付浩副教授
2013
年
5
月
摘要:
本文采用Protues7.5仿真软件设计以低功耗STC89C51单片机为核心,配置新式的微型低功耗传感器DHT11,使用液晶显示LED1602采集到的数据,实现了温度、湿度两个参数的采集、处理和显示等功能。
文章以温室环境作为研究对象,介绍了温湿度温湿度测量电路、单片机外围电路、软件流程、汇编语言源程序的设计、数据采集系统的设计过程及仿真的实现方法。
该方法可以提高系统的开发效率、缩短周期和降低成本,为单片机系统的开发提供了手段。
结果表明,所设计环境参数温度控制精度稳定在O.1℃范围之内,湿度的误差可控制在±2.0%RH以内。
关键词:
Protues,STC89C51,DHT11,LED1602,温度,湿度
Abstract:
ByProtues7.5simulationsoftwaredesignforlowpowerSTC89C51microcontrollerasthecore,theallocationofnewlow-powermicro-sensorsDHT11,usingliquidcrystaldisplayLED1602datacollected,realizingthecollectionoftemperature,humidity,twoparameters,processinganddisplayfunctions.Basedongreenhouseenvironmentastheresearchobject,thispaperintroducesthetemperatureandhumiditytemperatureandhumiditymeasuringcircuit,microcontrollerperipheralcircuit,softwareflow,assemblylanguagesourceprogramdesign,thedesignprocessofthedataacquisitionsystemandtherealizationofthesimulationmethod.Themethodcanimprovesystemdevelopmentefficiency,shortenthecycleandreducecosts,providesameansforthedevelopmentofsingle-chipmicrocomputersystem.Resultsshowthatthedesignofenvironmentalparameters,temperaturecontrolprecisionisstableino.1℃,humidityoftheerrorcanbecontrolledwithin+/-2.0%RH.
Keywords:
Protues,STC89C51,DHT11,LED1602,temperatureandhumidity
3.1.6测量分辨率9
1前言
在单片机应用系统的传统开发方式中,对系统的硬件电路进行设计完成后,需要制作成实物的电路板,并结合单片机仿真器进行软硬件的联合调试。
如果遇到设计中需要修改,则往往需要对电路板重复制板,系统功能的验证不能够及时得到反映[1]。
Proteus7.5仿真软件是一款可以在单片机应用系统仿真研发上应用的EDA软件,是由英国的LabccnterElectronics公司推出的单片机集成开发软件,可通过此软件搭建各种复杂的电路,并通过加载软件程序实现硬件仿纠乱本软件能够仿真51系列、AVR、PIC、ARM等主流单片机,软件集成了虚拟示波器、逻辑分析仪等从而建立起了完备的电子设计开发环境,能够为产品开发节约大量的硬件成本和调试周期[2]。
结合KeilC51,对数字温湿度测量演示系统进行了设计和仿真。
本系统设计采用的Keil5l高级语言集成开发环境一KeiluVision3IDE,是由美国KeilSoftware公司推出的一款主流单片机程序开发软件,它提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
Proteus与Keil软件能够实现良好的联合调试功能,即:
通过Proteus绘制硬件原理图,Keil软件编写软件代码,在良好配置的前提下通过Keil软件调用Proteus软件进行仿真及预调试。
在工业生产中,需要对多种环境指标进行监控以确保工业生产安全、经济、有效的进行。
在检测这些环境参数时往往需要很多设备独立使用,造成资源的浪费。
温湿度测量系统就是针对这一现象而设计的、以单片机为核心的、对温度、湿度同时进行检测的装置[6]。
该装置可以通过传感器采集温度、湿度等环境参数,并进行检测和显示,能够实现对空气中温度以及湿度进行实时测量,所设计环境参数温度控制精度稳定在O.1℃范围之内,湿度的误差可控制在±2.0%RH以内[7]。
2整体方案设计
2.1湿温度测量系统的基本构成
本系统主要由STC89C51单片机、DHT11温湿度传感器、晶振电路和1602液晶等部分构成。
首先,以STC89C51单片机系统位核心,温湿度传感器为温度、湿度数据采集端,通过LCD数码管显示,并进行实时记录,最后通过Protues与Keil连调的方式进行仿真运行。
2.2温湿度测量系统原理
温湿度测量系统的设计包括以下几个主要功能模块
(1)温湿度检测模块:
系统温湿度的采集用DHT11数字温湿度传感器,它是一款含有已校准数字信号输出的温湿度复合传感器。
其应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传器器包括一个电阻式感湿元件和一个NTC测温元件。
(2)数据处理模块:
:
该模块采用微处理器来实现,微处理器模块式整个系统的核心部分,微处理器选用89C51系列单片机,该处理器具有运用灵活、迅速、低功耗的特点。
(3)显示模块:
采用常用的LCD1602显示器
(4)电源模块:
本模块为直流供电,当有电源供电时,直流5V的电源模块,或直接使用USB供电,亦可使用三到四节电池供电。
2.3系统框图
本次设计的温湿度测量系统主要核心就是单片机STC89C51,首先通过DHT11进行数据的采集,并进行放大、A\D转换,后通过接口电路将数据传送给单片机,后由单片机传送命令给LED进行数据显示。
晶振电路主要是控制单片机的工作频率,若想调节单片机的频率的话,主要就是要看晶振电路的情况。
当然电源电路,一直为整个系统提供工作电压,该电路是将220V的交流电通过变压器、桥式整流电路、稳压器变换成5V的直流电。
图1系统框图
3硬件电路设计
3.1温湿度传感器模块
3.1.1DHT11简介
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为4针单排引脚封装。
连接方便,特殊封装形式可根据用户需求而提供。
3.1.2、传感器性能说明
如下表1所示:
参数
条件
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
3.1.3接口说明
建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。
图2典型应用电路
3.1.4电源引脚
DHT11的供电电压为3-5.5V。
传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。
电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。
3.1.5串行接口(单线双向)
DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。
1.通讯过程如图3所示
图3通讯过程
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。
DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。
图4DHT11响应
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
数字0信号表示方法如图5所示
图5数字0信号表示
数字1信号表示方法.如图6所示
图6数字1信号表示
3.1.6、测量分辨率
测量分辨率分别为8bit(温度)、8bit(湿度)。
3.2LCD显示模块
3.2.1LCD1602简介
显示模块选择LCD1602液晶显示器,如图7所示,字符型显示模块是一种专门用显示字幕、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
这里选择16*2。
图7LCD1602
(1)1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VDD接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
(2)LCD1602的指令说明
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线。
N:
低电平时为单行显示,高电平时双行显示。
F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
(3)读写操作时序如图8、9所示
图8读操作时序
图9写操作时序
(4)LCD1602的RAM地址映射
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
LCD1602内部显示地址如图10所示:
图10LCD1602的RAM地址映射
3.3.2LCD1602接口电路
LCD1602与AT89C51单片机连接如图11所示:
图11LCD1602与STC89C51连接图
3.4电源模块
本模块为直流供电,当有电源供电时,直流5V的电源模块,或直接使用USB供电,亦可使用三到四节电池供电,本样机采用的是电池供电。
图12电源电路
3.4单片机STC89C51模块
STC系列单片机是美国STC公司最新推出的一种新型51内核的单片机。
片内含有Flash程序存储器、SRAM、UART、SPI、A\D、PWM等模块。
该器件的基本功能与普通的51单片机完全兼容。
图1389C51单片机的引脚功能说明
(1)VCC:
电源电压
(2)GND:
接地
(3)P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复位,在访问期间激活内部上拉电阻。
(4)P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTE逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见表2。
Flash编程和程序校验期间,P1接收低8位地址。
表2P1.0和P1.1的第二功能
引脚号
功能特性
P1.0
T2(定时/计数器2外部计数脉冲输入),时钟输出
P1.1
T2EX(定时/计数2捕获/重装载触发和方向控制)
(5)P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
(6)P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(ILL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表3所示。
(7)RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
表3P3口的第二功能
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外中断0)
P3.3
(外中断1)
P3.4
T0(定时/计数0)
P3.5
T1(定时/计数1)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
(8)
/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH)。
端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存
端状态。
如
端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VCC。
(9)XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
(10)XTAL2:
振荡器反相放大器的输出端。
(11)数据存储器:
89C51有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128。
字节的RAM和特殊功能寄存器的地址是相同的,但在物理上它们是分开的。
当一条指令访问7FH以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128字节。
RAM还是访问特殊功能寄存器。
如果指令是直接寻址方式则为访问特殊功能寄存器。
(12)中断:
89C51共有6个中断向量:
两个外中断(INT0和INT1),3个定时器中断(定时器0,1,2)和串行口中断。
(13)时钟振荡器:
89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图13(a)图所示。
外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路,对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF士10pF,而如果使用陶瓷谐振器,建议选择40pF士l0pF。
用户也可以采用外部时钟。
采用外部时钟的电路如图13(b)图所示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
(a)内部振荡电路
(b)外部振荡电路
图14振荡电路
4系统软件设计
4.1系统程序设计思想及流程图
系统初始化后,温湿度部分:
复位传感器,读取温湿度数据,进行处理,当温度处于快速变化过程中时,系统不停的进行温度信号的采集,数据输入单片机,并在显示器上进行显示。
图15程序流程图
4.2系统主要程序
主程序:
主函数:
#include
#include
#include
#include
BYTEcodedis1[]={"Humidity:
"};
BYTEcodedis2[]={"Temperature:
"};
voidDisplayInit()
{
unsignedchari;
lcd_pos(0);
i=0;
while(dis1[i]!
='\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(41);
i=0;
while(dis2[i]!
='\0')
{
lcd_wdat(dis2[i]);
i++;
}
}
voidmain()
{
unsignedinttemp=0;
unsignedcharDHT11_H,DHT11_T;
Delay_ms(1000);
lcd_init();//初始化LCD
Delay_ms(10);
DisplayInit();
while
(1)
{
temp=Read_DHT11();
DHT11_H=temp/256;
if(DHT11_H<100)
{
lcd_pos(11);
lcd_wdat(DHT11_H/10+'0');
lcd_wdat(DHT11_H%10+'0');
lcd_pos(0x0d);
lcd_wdat('%');
lcd_pos(0x0e);
lcd_wdat('R');
lcd_wdat('H');
}//if
DHT11_T=temp%256;
if(DHT11_T<100)
{
lcd_pos(0x4C);
lcd_wdat(DHT11_T/10+'0');
lcd_pos(0x4D);
lcd_wdat(DHT11_T%10+'0');
lcd_pos(0x4e);
lcd_wdat(0xdf);//显示℃
lcd_wdat('C');
}
Delay_ms(1000);
}
}
DHT11驱动程序
#include
unsignedcharRead_DHT11_Byte()
{
unsignedchartemp,flag,Data=0,DataTemp;
for(temp=0;temp<8;temp++)
{
flag=2;
while((!
DHT11)&&flag++);/
Delay_10u