温度湿度无线监测系统设计毕设Word下载.docx
《温度湿度无线监测系统设计毕设Word下载.docx》由会员分享,可在线阅读,更多相关《温度湿度无线监测系统设计毕设Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
Hu1-.^dinJ67—o-1—rti.^_3djsJrD7irtulirt—nJroTrvaMpl.円hhpi.pi.P2.P2.K核P2P2H
tlte
汨XI
-nvnrti-.^4J4ci7—
U1CK
vss
监测终端电路原理图
•GND
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--;
}
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();
if(TRH)
temp=1;
respond=2;
while((TRH)&
else
temp=0;
com_data<
<
=1;
com_data|=temp;
return(com_data);
//湿度读取子程序
//温度高
8位=
=TL_data
//温度低
=TH_data
//湿度高
=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();
//判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行if(!
TRH)
{respond=2;
//判断DHT11发出80us的低电平响应信号是否结束while((!
//判断从机是否发出80us的高电平,如发出则进入数据接收状态while((TRH)&
//数据接收
RH_temp=receive();
RL_temp=receive();
TH_temp=receive();
TL_temp=receive();
CK_temp=receive();
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<
reg52.h>
delay.h>
DHT11.h>
sbitsend0=P1A0;
sbitsend仁PUl;
//接LED用于显示P1.0,P1.1的电位
unsignedchartemp,n;
unsignedcharAdress=0x01;
//定义地址
voidSend(unsignedcharx)//发送数据函数
unsignedchari;
temp=0x80;
//temp用于取位
for(i=0;
8;
if(temp&
x)//如果对应位为1,则发送011
send0=0;
send1=send0;
delayms
(1);
send0=1;
delayms
(2);
else//否则发送01
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;
--n;
//循环4次
}delay1s();
(3)接收终端数据处理程序
/*
接收1个头码8位地址码2个8位数据25位液晶分别显示地址数,数据1,数据2
*/
//#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;
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;
=2;
for(j=1;
j<
=8;
j++)//处理1个字节8位
cord=irdata[k];
if(cord>
10)//大于某值为1,这个和晶振有绝对关系,这里使用
12M计算,此值可以有一定误差3ms-/0.256value|=0x01;
if(j<
8)
{value<
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