找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3156|回复: 2
收起左侧

DHT11温湿度传感器检测程序(可运行)

[复制链接]
ID:308426 发表于 2018-5-14 22:26 | 显示全部楼层 |阅读模式
#ifndef _DHT11_H_
#define _DHT11_H_
#include"DALAY.H"
#define uchar unsigned char
#define uint unsigned int
uchar RH,RL,TH,TL;          //设置存储温湿度的变量
uchar data_byte;
sbit IO=P1^0;         //数据口

//初始化
void start()//开始信号
{
  IO=1;
  delay_10us();
  IO=0;
  delay_1ms(20);  //拉低至少 18ms  保证能检测到起始信号
  IO=1;          //检测到开始信号后,将电平拉高20-40us
  delay_10us();        //延时20-40us
  delay_10us();       
  delay_10us();
  delay_10us();
}
uchar receive_byte()//接收一个字节
{
uchar i,temp;
for(i=0;i<8;i++)
{
   while(!IO);//等待50us的低电平开始信号结束   
   delay_10us();    //开始信号结束后,延时26us-28us
   delay_10us();
   delay_10us();
   temp=0;   //如果时间为26us-28us 则表示接收的数据为'0'
   if(IO==1)
    temp=1;//如果时间超过26us-28us 则表示收到的数据为'1'
        while(IO);//等待数据信号高电平, '0'为26us-28us;'1'为70us
        data_byte<<=1;//将接收到的数据向高位左移
        data_byte|=temp;       
}
return data_byte;
}
         
void receive() //接收数据
{
start();//开始信号初始化
IO=1;   //主机设为输入  判断从机DHT11的响应信号
if(!IO) //判断是否有响应信号
{
  while(!IO);//判断从机发出80us低电平信号是否结束
  while(IO);
  RH= receive_byte();//湿度整数
  RL= receive_byte();//湿度小数
  TH= receive_byte();//温度整数
  TL= receive_byte();//温度小数
  IO=0;//当所有的数据接收完成后,将从机电平拉低50us
  delay_10us();        //拉低50us
  delay_10us();
  delay_10us();
  delay_10us();
  delay_10us();
  IO=1;//将从机电平拉高,进入空闲状态
/*  num_check=R_H+R_L+T_H+T_L;
  if(num_check=check)//判断读取的数据与校验位是否相同
  {
        RH=R_H;
        RL=R_L;
        TH=T_H;
        TL=T_L;
        check=num_check;
  }*/
}
}
#endif


回复

使用道具 举报

ID:325981 发表于 2018-5-25 17:22 | 显示全部楼层
好东西
回复

使用道具 举报

ID:209954 发表于 2019-4-13 19:54 | 显示全部楼层
感谢楼主分享!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表