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

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

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

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

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

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

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

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

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

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