吴春生 温湿度报警器传感器
ge=date;
write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); }
/***********************dht11.h***************************/ typedef unsigned char U8; typedef unsigned int U16;
sbit P1_0 = P2^0 ;
U8 U8FLAG,k; U8 U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; U8
U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
void Delay(U16 z) { U8 x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--); }
void delay_10us() {
14
吴春生 温湿度报警器传感器
U8 i; i--; i--; i--; i--; i--; i--; }
void COM(void) //数据0 1确认 { U8 i;
for(i=0;i<8;i++) {
U8FLAG=2;
while((!P1_0)&&U8FLAG++); //1bit是否结束 delay_10us(); delay_10us(); delay_10us();
U8temp=0;// 26us~28us 表示为0
if(P1_0)U8temp=1; // 超过28us依然为高电平 表示为1 U8FLAG=2;
while((P1_0)&&U8FLAG++);
if(U8FLAG==1)break;//U8FLAG溢出超时则跳出for循环 //判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
15
吴春生 温湿度报警器传感器
U8comdata<<=1; U8comdata|=U8temp; } }
void RH(void) //-----湿温度读取子程序 ------------ {
P1_0=0;
Delay(34); //主机拉低高于18ms P1_0=1;
//总线由上拉电阻拉高 主机延时20us delay_10us(); delay_10us(); delay_10us(); delay_10us();
P1_0=1;//主机设为输入 判断从机响应信号
if(!P1_0)//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 { 否结束
U8FLAG=2;
while((P1_0)&&U8FLAG++);//判断从机是否发出 80us 的高电平, 如发出则U8FLAG=2;
while((!P1_0)&&U8FLAG++);//判断从机是否发出 80us 的低电平响应信号是
进入数据接收状态
16
吴春生 温湿度报警器传感器
COM();//数据接收状态
U8RH_data_H_temp=U8comdata; //湿度整数8位
COM();
U8RH_data_L_temp=U8comdata; //湿度小数8位 COM();
U8T_data_H_temp=U8comdata; //温度整数8位 COM();
U8T_data_L_temp=U8comdata; //温度小数8位 COM();
U8checkdata_temp=U8comdata; //校验位 P1_0=1;
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; }
} }
/***********************main.c***************************/ #include
#include
17
吴春生 温湿度报警器传感器
U16 a,b,t; U8 flag,i; void main() {
RW=1; t=0; flag=0; TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; init(); P1_0=1; P2=0xff; Delay(40); while(1) { RH();
write_dht11(0,U8T_data_H); write_dht11(3,U8T_data_L); write_dht11(9,U8RH_data_H); write_dht11(12,U8RH_data_L);
if(flag==2)//100后flag为2,进行比较 {
if(a==U8T_data_H&&b==U8RH_data_H)
18
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新幼儿教育单片机控制DHT11传感器的课程设计报告 (4)全文阅读和word下载服务。
相关推荐: