CC2530学习笔记之HT11温湿度检测程序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43993734/article/details/100029959

描述

DHT11是通过单总线与微处理器通讯,只需要一根线,一次传送40位数据,高位先出;本次主要通过模拟单总线时序,实现温湿度读取。

数据格式

40bit数据:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和;
  = 湿 + 湿 + + 校验和 \ =湿度整数+湿度小数+温度整数+温度小数

通讯过程

在这里插入图片描述

具体时序

在这里插入图片描述

实现代码

  P0DIR |=0X01;//设置为输出口
  DATA_PIN=0;//拉低
  Delay_us(20000);//延时20ms
  DATA_PIN=1;//拉高
  P0DIR &=~0X01; //输入口
  Delay_us(40);
  while(DATA_PIN);//等待DHT响应信号
  while(!DATA_PIN);//过渡80uS低信号
  while(DATA_PIN);// 过渡80uS高信号

数据0时序

在这里插入图片描述

数据1时序

在这里插入图片描述

具体代码

#include <iocc2530.h>
#define DATA_PIN  P0_0 //DHT11 接口`
u8 RH_data,RL_data,WH_data,WL_data,Checkdata;//温湿度高低,总和
/*
数据格式:8bit湿度整数数据+8bit湿度小数数据
+8bit温度整数数据+8bit温度小数数据
+8bit校验和
*/
u8 com()
{
  u8 i=0;
  u8 temp=0;
  for(i=0;i<8;i++)//读取8bit数据
  {
    while(!DATA_PIN);//过渡50us低电平的开始型号
    Delay_us(40);//数据表示为0时间26-28us,1时间70us 延时40us过渡低电平,判断
    if(DATA_PIN)
    {
      temp=temp|0x01;
      while(DATA_PIN);//过渡70-40的高电平时间
    } else{
        temp=temp | 0x00;
    }
   if(i<7)temp=temp<<1;//
  }
  return temp;
}
void DHT11()
{ 
  P0DIR |=0X01;//设置为输出口
  DATA_PIN=0;//拉低
  Delay_us(20000);//延时20ms
  DATA_PIN=1;//拉高
  P0DIR &=~0X01; //输入口
  Delay_us(40);//
  while(DATA_PIN);//等待DHT响应信号
  while(!DATA_PIN);//过渡80uS低信号
  while(DATA_PIN);// 过渡80uS高信号
  //开始传输数据
  RH_data=com();//读取湿度整数
  RL_data=com();//读取湿度小数
  WH_data=com();//读取温度整数
  WL_data=com();//读取温度小数
  Checkdata=com();//读取校验和
  //进行校验
  if(WH_data+WL_data+RH_data+RL_data==Checkdata)
     //校验对,就可以显示出数据了,不具体写,根据自己实际情况选择显示器模块。
}

DHT11数据手册

猜你喜欢

转载自blog.csdn.net/weixin_43993734/article/details/100029959