棚室温湿度的论文文档格式.docx
- 文档编号:17903790
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:24
- 大小:463.20KB
棚室温湿度的论文文档格式.docx
《棚室温湿度的论文文档格式.docx》由会员分享,可在线阅读,更多相关《棚室温湿度的论文文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
,器件采用ATMEL公司的高密度、非易失性存储
技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
STC89C52单片机主要引脚功能介绍,其引脚图如下图所示:
2.LCD1602液晶显示器简介
1602液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在各类仪表和低功耗系统中得到广泛的应用。
1602液晶为
16字X2行的字符型液晶。
该液晶与数码管相比有如下优点:
1).位数多,可显示32位,32个数码管体积相当庞大了。
2).显示内容丰富,可显示所有数字和大、小写字母。
3).程序简单,如果用数码管动态显示,会占用很多时间来刷新显示,而1602自动完成此功能。
3.传感器DHT11简介
传感器DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的温湿度传感和数字模块采集术具有很高的稳定性和可靠性,DHT11传感器内含一个NTC测温和一个电阻式感湿元件,并与一个8位的高性能单片机相连接,在精确的测试中DHT11传感器进行过校准,以程序的形式校准系数储存在0TP内存中,检测信号的时候,在处理过程中传感器内部要调用这些校准系数,采用单线制的串行接口,使系统集成可以有较低的功耗,而且更加简单快速,信号传输距离超过20米,作为一个数字温湿度传感器DHT11具有响应快速、抗干扰强、性价比高等优点,它的性能指标如下:
湿度测量范围为20%~90%
RH;
湿度测量精度为±
5%RH;
温度测量范围为0~50℃,温度测量精度为±
2℃,
工作电压3.0~5.5V,
相应时间<
5S,DHT1l采用4针单排引脚封装,传感器通电后,需要等待1s,
这是因为要越过不稳定的状态,在此期间不需发送指令,
电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波
[7]。
典型的应用电路如下图:
(三)程序功能
1.主程序模块框图
主程序主要完成硬件初始化,子程序调用等功能。
在主程序中,对温湿度传感器、LCD1602液晶显示器的初始化,同时调用传感器数据,进行显示。
其框图如下图所示。
2.DHT11初始化模块
该流程主要对传感器的初始化进行设计,如下图所示。
3.LCD1602初始模块
LCD上电时,都必须按照一定的时序对LCD进行初始化操作,主要任务是设置LCD的工作方式,显示状态,清屏,输入方式,光标位置等。
LCD1602液晶显示器初始化框图如图4-3所示:
小结
设计中,主要以STC89C52单片机为核心,对温度和湿度的智能化检测进行了简单的设计与阐述。
对MCS-51单片机系统的温湿度检测原理与结构进行了论述。
本次设计电路采用模块化、层次化设计,以硬件为主,软件程序为辅。
用新型的智能集成温湿度传感器DHT11实现对温度、湿度的检测,将温度湿度信号通过传感器进行采集并转换成数字信号,再运用单片机STC89C52进行数据分析和处理,为显示电路提供信号。
显示部分采用字符型LCD1602液晶显示器。
系统电路简单、集成度高、工作稳定、调试方便、检测精度高。
实验证明该设计系统实现了对环境温湿度精确检测,达到了相应的效果,具有一定的实用价值。
三、附录
1.总电路图如下
2.部分电路图如下:
1)复位电路如下图所示
2)时钟电路如下图所示
3)典型的应用电路如下
4)本设计的LCD1602液晶显示器连接线路图如下图所示
5)DHT11传感器引脚连接图如下图所示。
3.相关程序设计的代码
1)主程序
#include<
reg52.h>
//单片机头文件
dht11.h>
//温湿度传感器头文件
lcd_1602.h>
//液晶屏显示器头文件
uchari,key_flag;
ucharset_temp_H,set_temp_H_shi,set_temp_H_ge;
//设定温度的变量
ucharset_temp_L,set_temp_L_shi,set_temp_L_ge;
ucharset_humi_H,set_humi_H_ge,set_humi_H_shi;
//设定湿度的变量
ucharset_humi_L,set_humi_L_ge,set_humi_L_shi;
//设定湿度的变量
sbitk1=P3^2;
//定义按键K1
sbitk2=P3^3;
//定义按键K2
sbitk3=P3^4;
//定义按键K3
sbitk4=P3^5;
//定义按键K4
/////////////////////////延时函数/////////////////////////////
voiddelay(ucharx)
{
uchara,b;
for(a=0;
a<
20;
a++)
{for(b=x;
b>
0;
b--);
}
}
/////////////////////////显示温度和湿度//////////////////////////
voiddisp_t_h()
write_cmd(0x8c);
write_dat(tab_lcd_num[ds3]);
//显示温度十位
write_cmd(0x8d);
write_dat(tab_lcd_num[ds4]);
//显示温度个位
write_cmd(0xcc);
write_dat(tab_lcd_num[ds1]);
//显示湿度十位
write_cmd(0xcd);
write_dat(tab_lcd_num[ds2]);
//显示湿度个位
///////////////////////开机显示////////////////////////////////////
voiddisp_start()
{for(i=0;
i<
16;
i++)
{write_cmd(0x80+i);
write_dat(tab_t[i]);
//温度
for(i=0;
{write_cmd(0xc0+i);
write_dat(tab_h[i]);
//湿度
///////////////////////扫描按键////////////////////////////////
voidkey_scan()
if(k1==0)//按下K1
{
//设置温度上限///////////////////////////////
if(key_flag==0)//按键标志0
write_cmd(0x01);
//清屏
write_cmd(0x80);
//显示位置第一行第一列
13;
write_dat(tab_set_temp_H[i]);
//显示SETTEMPERATURE字符
while(k4==1)//按下K4
if(k2==0)//按下K2
{while(k2==0);
set_temp_H++;
//设置温度数值加
if(set_temp_H==100)//到100,清0
set_temp_H=0;
if(k3==0)//按下K3
{while(k3==0);
//松手检测
set_temp_H--;
//设置温度数值减
if(set_temp_H==0)//到0,加为100
set_temp_H=100;
set_temp_H_ge=set_temp_H%10;
//计算设置温度个位
set_temp_H_shi=set_temp_H/10;
//计算设置温度十位
write_cmd(0xc6);
write_dat(tab_lcd_num[set_temp_H_shi]);
//显示设置温度个位
write_cmd(0xc7);
write_dat(tab_lcd_num[set_temp_H_ge]);
/显示设置温度十位
}
delay(200);
//设置温度下限///////////////////////////////
if(key_flag==1)//按键标志1
//显示位置第一行第一列
write_dat(tab_set_temp_L[i]);
set_temp_L++;
if(set_temp_L==100)//到100,清0
set_temp_L=0;
set_temp_L--;
if(set_temp_L==0)//到0,加为100
set_temp_L=100;
set_temp_L_ge=set_temp_L%10;
set_temp_L_shi=set_temp_L/10;
write_dat(tab_lcd_num[set_temp_L_shi]);
write_dat(tab_lcd_num[set_temp_L_ge]);
//显示设置温度十位
////设置湿度上限//////////////////////////////////////////////////
if(key_flag==2)//按键标志2
write_dat(tab_set_humi_H[i]);
//显示SETHUMIDITY字符
while(k4==1)
if(k2==0)
set_humi_H++;
//设置湿度数值加
if(set_humi_H==100)
set_humi_H=0;
if(k3==0)
set_humi_H--;
//设置湿度数值减
if(set_humi_H==0)
set_humi_H=100;
set_humi_H_ge=set_humi_H%10;
//计算设置湿度个位
set_humi_H_shi=set_humi_H/10;
//计算设置湿度十位
write_dat(tab_lcd_num[set_humi_H_shi]);
//显示设置湿度十位
write_dat(tab_lcd_num[set_humi_H_ge]);
//显示设置湿度个位
////设置湿度下限//////////////////////////////////////////////////
if(key_flag==3)//按键标志3
write_dat(tab_set_humi_L[i]);
set_humi_L++;
if(set_humi_L==100)
set_humi_L=0;
set_humi_L--;
if(set_humi_L==0)
set_humi_L=100;
set_humi_L_ge=set_humi_L%10;
set_humi_L_shi=set_humi_L/10;
write_dat(tab_lcd_num[set_humi_L_shi]);
write_dat(tab_lcd_num[set_humi_L_ge]);
//按键功能结束////////////////////////////////////////////
key_flag++;
if(key_flag==4)//按键标志5
key_flag=0;
disp_start();
//显示字符
////////////比较数据,开启或关闭继电器////////////////////////////////////
voidbijiao()
if(U8T_data_H>
set_temp_H)//如果温度大于设置温度上限,打开超出温度上限温度继电器和温度LED
temp_out=0;
//P1.1
elsetemp_out=1;
//否则关闭超出温度上限温度继电器和温度LED
if(U8T_data_H<
set_temp_L)//如果温度低于设置温度下限,打开低于温度下限温度继电器和温度LED
temp_led=0;
//P1.3
elsetemp_led=1;
//否则关闭低于温度下限温度继电器和温度LED
if(U8RH_data_H>
set_humi_H)//如果湿度大于设置湿度上限,打开超出湿度上限继电器和湿度LED
humi_out=0;
//P1.2
elsehumi_out=1;
//否则关闭超出湿度上限继电器和湿度LED
if(U8RH_data_H<
set_humi_L)//如果湿度低于设置湿度下限,打开低于湿度下限继电器和湿度LED
humi_led=0;
//P1.4
elsehumi_led=1;
//否则关闭低于湿度下限继电器和湿度LED
/////////主函数/////////////////////////////////////////////////
voidmain()
{
init_lcd();
//初始化液晶1602
RH();
//读取DHT11温湿度数值
convdat();
//转换DHT11温湿度数值
disp_t_h();
//显示温度和湿度
while
(1)
{
key_scan();
//扫描按键
count++;
//计数器加
if(count==100)//到100,转换温湿度数据
{count=0;
}
bijiao();
//比较数据控制继电器动作
2)DHT11初始化模块
intrins.h>
//_nop_();
延时函数
#defineucharunsignedchar
#defineuintunsignedint
sbittemp_out=P1^1;
sbithumi_out=P1^2;
sbittemp_led=P1^3;
sbithumi_led=P1^4;
uintcount;
uchards1,ds2,ds3,ds4;
ucharU8FLAG,k;
ucharU8count,U8temp;
ucharU8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
ucharU8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
ucharU8comdata;
uintU16temp1,U16temp2;
sbitIO=P1^0;
//
voidDelay1(uintj)
uchari;
for(;
j>
j--)
for(i=0;
27;
i++);
voidDelay_10us(void)
uchari=5;
i>
i--);
voidCOM(void)
8;
U8FLAG=2;
//---------------------
while((!
IO)&
&
U8FLAG++);
Delay_10us();
//Delay_10us();
U8temp=0;
if(IO)U8temp=1;
while((IO)&
//----------------------
//P2_1=0;
//P2_1=1;
if(U8FLAG==1)break;
U8comdata<
<
=1;
U8comdata|=U8temp;
//--------------------------------
voidRH(void)
IO=0;
Delay1(180);
IO=1;
if(!
IO)
COM();
U8RH_data_H_temp=U8comdata;
U8RH_data_L_temp=U8comdata;
U8T_data_H_temp=U8comdata;
U8T_data_L_temp=U8comdata;
U8checkdata_temp=U8comdata;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
//数据采集读取
voidconvdat()
ds1=U8RH_data_H/10;
//湿度个位
ds2=U8RH_data_H%10;
ds3=U8T_data_H/10;
ds4=U8T_data_H%10;
3)LCD1602初始模块
sbitRS=P2^5;
sbitRW=P2^6;
sbitE=P2^7;
uchard;
ucharcodetab_t[]={"
TEMPERATURE:
C"
};
ucharcodetab_h[]={"
HUMIDITY:
%"
ucharcodetab_time[]={"
TIME:
"
ucharcodetab_set_temp_H[]={"
SET_TEMP_HIGH"
ucharcodetab_set_temp_L[]={"
SET_TEMP_LOW"
ucharcodetab_set_humi_H[]={"
SET_HUMI_HIGH"
ucharcodetab_set_humi_L[]={"
SET_HUMI_LOW"
ucharcodetab_set_hour[]={"
SET_HOUR"
ucharcodetab_lcd_num[]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
voiddelay_1602(ucharx)
10;
voidwrite_cmd(ucharx)
E=0;
RS=0;
RW=0;
E=1;
P0=x;
delay_1602(50);
/*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 室温 湿度 论文