温度湿度无线监测系统设计毕设.docx

上传人:b****3 文档编号:3141986 上传时间:2022-11-18 格式:DOCX 页数:17 大小:935.08KB
下载 相关 举报
温度湿度无线监测系统设计毕设.docx_第1页
第1页 / 共17页
温度湿度无线监测系统设计毕设.docx_第2页
第2页 / 共17页
温度湿度无线监测系统设计毕设.docx_第3页
第3页 / 共17页
温度湿度无线监测系统设计毕设.docx_第4页
第4页 / 共17页
温度湿度无线监测系统设计毕设.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

温度湿度无线监测系统设计毕设.docx

《温度湿度无线监测系统设计毕设.docx》由会员分享,可在线阅读,更多相关《温度湿度无线监测系统设计毕设.docx(17页珍藏版)》请在冰豆网上搜索。

温度湿度无线监测系统设计毕设.docx

温度湿度无线监测系统设计毕设

温度湿度无线监测系统

一、总述

本系统由一个监测终端和多个监测点组成,可实现远程监测,传输距离可达2000米,

支持最多225路多地同时监测。

监测点具有测量温度湿度以及发送信息的功能,监测终端能

够接收各监测点的序号温度湿度信息,并通过液晶屏显示。

无线收发使用315M天线,主

芯片为STC89C52温度湿度传感器为DHT11,使用LCD1602显示接收到的监测点序号温度值和湿度值。

、硬件电路设计

1、监测点电路设计

监测点电路方框图

 

2、监测终端电路设计

监测终端电路方框图

电源

3、仿真图

数据由引导码加24位数据码组成,0码由01表示,1码由011表示。

上图中发送的数据为0x01(固定地址位),0x00(模拟温度值),0x00(模拟湿度值)。

Leu

监测点电路原理图

K

315M

GND'llI——

\TO

DMA

GND

STC89C52RC

Hu1-.^dinJ67—o-1—rti.^_3djsJrD7irtulirt—nJroTrvaMpl.円hhpi.pi.P2.P2.K核P2P2H

tlte

汨XI

-nvnrti-.^4J4ci7—

U1CK

vss

 

监测终端电路原理图

•GND

STC89C52RC

1T1

s

•&皿

c-D—

KIV.RJ.RlvIV.mmm

I1K

HE巴

PPDIPpppp

JA\4・\・6r$・P3P3P3P3P3P3P3'P3

(N)

TICuF

 

三、软件程序设计

1、程序流程图

监测点程序流程图

监测终端程序流程图

 

2、程序源代码

(1)

DHT11读温湿度程序

#include"DHT11.h"

unsignedcharwendu,shidu;

voiddelay_us()

{

unsignedchari;

i--;

i--;

i--;

i--;

i--;

i--;

}

voiddelay_ms(unsignedcharx)

unsignedcharn;

while((x--)!

=0)

{

for(n=0;n<115;n++){;}

}

}

charreceive()

{

unsignedinti;

unsignedchartemp,respond;

unsignedcharcom_data=0;

for(i=0;i<=7;i++)

{

respond=2;

while((!

TRH)&&respond++);

delay_us();

delay_us();

delay_us();

if(TRH)

{

temp=1;respond=2;while((TRH)&&respond++);

}

else

temp=0;

com_data<<=1;

com_data|=temp;

}

return(com_data);

}

//湿度读取子程序

//温度高

8位=

=TL_data

//温度低

8位=

=TH_data

//湿度高

8位=

=RH_data

//湿度低

8位=

=RH_data

//校验8位=

CK_data

voidread()

{

unsignedintrespond;

unsignedintRH_temp,RL_temp,TH_temp,TL_temp,CK_temp,untemp,RH_data,RL_data,TH_data,TL_data,CK_data;

//主机拉低18ms

TRH=0;delay_ms(18);

TRH=1;

//DATA总线由上拉电阻拉高主机延时20usdelay_us();

delay_us();

delay_us();

delay_us();

TRH=1;

//判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行if(!

TRH)

{respond=2;

//判断DHT11发出80us的低电平响应信号是否结束while((!

TRH)&&respond++);

respond=2;

//判断从机是否发出80us的高电平,如发出则进入数据接收状态while((TRH)&&respond++);

//数据接收

RH_temp=receive();RL_temp=receive();

TH_temp=receive();

TL_temp=receive();

CK_temp=receive();

TRH=1;untemp=(RH_temp+RL_temp+TH_temp+TL_temp);

//数据校验if(CK_temp==untemp)

{

RH_data=RH_temp;RL_data=RL_temp;TH_data=TH_temp;TL_data=TL_temp;CK_data=CK_temp;

}

}

//温度值湿度值wendu=(unsignedchar)(TH_data);shidu=(unsignedchar)(RH_data);

(2)监测点发送数据程序

/*****************************************************

发送8位地址和温度湿度

地址位定为0x01******************************************************/

#include

#include

#include

sbitsend0=P1A0;

sbitsend仁PUl;//接LED用于显示P1.0,P1.1的电位

unsignedchartemp,n;

unsignedcharAdress=0x01;//定义地址

voidSend(unsignedcharx)//发送数据函数

{

unsignedchari;

temp=0x80;//temp用于取位

for(i=0;i<8;i++)

{

if(temp&x)//如果对应位为1,则发送011

{

send0=0;send1=send0;

delayms

(1);

send0=1;send1=send0;

delayms

(2);

}

else//否则发送01

{

send0=0;send1=send0;

delayms

(1);

send0=1;send1=send0;

delayms

(1);

}

temp>>=1;//将对应位右移,取下一位

}

}

voidmain()

{

while

(1)

{

read();//读取温度湿度函数n=4;

while(n)

{

//头码发送

send0=1;

send1=1;

delayms(20);//间隔

Send(Adress);//发送地址

Send(wendu);//发送数据1

Send(shidu);//发送数据2

send0=0;

send1=0;

delayms(20);

--n;//循环4次

}delay1s();

}

}

(3)接收终端数据处理程序

/*

接收1个头码8位地址码2个8位数据25位液晶分别显示地址数,数据1,数据2

*/

//#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include<1602.h>

sbitIR=P3A2;//无线接口标志

/*

全局变量声明*/unsignedcharirtime;//红外用全局变量

bitirpro_ok,irok;

unsignedcharadres1,adres2,dat1,dat2,dat3,dat4;//显示变量,地址,数据1,数据2的个位十位

unsignedcharirdata[25];//存储变量unsignedchardisplay[10]={'0','1','2','3','4','5','6','7','8','9'};//显示字符数组unsignedcharrecv_data[3];

/*

函数声明

*/

//voidIr_work(void);

voidIrcordpro(void);

/*

定时器0中断处理

*/

voidtim0_isr(void)interrupt1using1{

irtime++;//用于计数2个下降沿之间的时间

}

/*

外部中断0中断处理

*/

voidEX0_ISR(void)interrupt0//外部中断0服务函数{

staticunsignedchari;//接收无线信号处理

staticbitstartflag;//是否开始处理标志位

if(startflag)

{

if(irtime<160&&irtime>=140)//引导码TC9012的头码,2*19ms/0.256msi=0;

irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1irtime=0;

i++;

if(i==25)//接收完头码和24位数据,数据自加到25

{

irok=1;

i=0;

}

}

else

{

irtime=0;

startflag=1;

}}

/*

定时器0初始化

*/voidTIM0init(void)//定时器0初始化{

TMOD=0x02;〃定时器0工作方式2,THO是重装值,TLO是初值

TH0=0x00;//重载值

TL0=0x00;//初始化值

ET0=1;//开中断

TR0=1;

}

/*

外部中断0初始化

*/voidEX0init(void)

{

INT0(P3.2)

IT0=1;//指定外部中断0下降沿触发,

EX0=1;//使能外部中断

EA=1;//开总中断

}

/*

无线码值处理

*/

voidIrcordpro(void)//无线码值处理函数

{

unsignedchari,j,k;

unsignedcharcord,value;

if(irdata[0]>140&&irdata[0]<160)

{

k=1;

for(i=0;i<=2;i++)

{

for(j=1;j<=8;j++)//处理1个字节8位

{

cord=irdata[k];

if(cord>10)//大于某值为1,这个和晶振有绝对关系,这里使用

12M计算,此值可以有一定误差3ms-/0.256value|=0x01;

if(j<8)

{value<<=1;

}

k++;

}

recv_data[i]=value;

value=0;

}adres1=recv_data[0]/10;//地址个位十位adres2=recv_data[0]%10;

dat1=recv_data[1]/10;//数据1个位十位dat2=re

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1