zigbee 源码 01-温湿度DHT11

所有课程见此链接:

zigbee CC2530 系列教程 0 课程介绍

dht11.h 文件:

#ifndef _DHT11_H_
#define _DHT11_H_


#define DHT_PIN P0_6

extern uint8 dht11Temp,dht11Humidity;
extern uint8 dht11TempDec,dht11HumidityDec;
extern void readDHT11(void);   //温湿传感启动


#endif 

dht11.c

#include "hal_mcu.h"
#include "dht11.h"
#include "OnBoard.h"


//温湿度定义
uint8 uint8FLAG,uint8temp;
uint8 uint8T_data_H,uint8T_data_L,uint8RH_data_H,uint8RH_data_L,uint8checkdata;
uint8 uint8T_data_H_temp,uint8T_data_L_temp,uint8RH_data_H_temp,uint8RH_data_L_temp,uint8checkdata_temp;
uint8 uint8comdata;

uint8 dht11Temp,dht11Humidity;
uint8 dht11TempDec,dht11HumidityDec;

void Delay_us(void);
void Delay_10us(void);
void Delay_ms(uint16 Time);
void COM(void);
void readDHT11(void);

/****************************
        延时函数
*****************************/
void Delay_us(void) //1 us延时
{
    MicroWait(1);   
}

void Delay_10us(void) //10 us延时
{
  MicroWait(10);   
}

void Delay_ms(uint16 Time)//n ms延时
{
  unsigned char i;
  while(Time--)
  {
    for(i=0;i<100;i++)
     Delay_10us();
  }
}


/***********************
   温湿度传感
***********************/
void COM(void)	// 温湿写入
{     
  uint8 i;         
  for(i=0;i<8;i++)    
  {
    uint8FLAG=2; 
    while((!DHT_PIN)&&uint8FLAG++);
    Delay_10us();
    Delay_10us();
    Delay_10us();
    uint8temp=0;
    if(DHT_PIN)uint8temp=1;
    uint8FLAG=2;
    while((DHT_PIN)&&uint8FLAG++);   
    if(uint8FLAG==1)break;    
    uint8comdata<<=1;
    uint8comdata|=uint8temp; 
  }    
}

void readDHT11(void)   //温湿传感启动
{
  P0DIR |= 0x40; //IO口需要重新配置 
  DHT_PIN=0;
  Delay_ms(19);  //>18MS
  DHT_PIN=1; 
  P0DIR &= ~0x40; //重新配置IO口方向
  Delay_10us();
  Delay_10us();						
  Delay_10us();
  Delay_10us();  
  
  if(!DHT_PIN) 
  {
    uint8FLAG=2; 
    while((!DHT_PIN)&&uint8FLAG++);
    uint8FLAG=2;
    while((DHT_PIN)&&uint8FLAG++); 
    COM();
    uint8RH_data_H_temp=uint8comdata;
    COM();
    uint8RH_data_L_temp=uint8comdata;
    COM();
    uint8T_data_H_temp=uint8comdata;
    COM();
    uint8T_data_L_temp=uint8comdata;
    COM();
    uint8checkdata_temp=uint8comdata;
    DHT_PIN=1; 
    uint8temp=(uint8T_data_H_temp+uint8T_data_L_temp+uint8RH_data_H_temp+uint8RH_data_L_temp);
    if(uint8temp==uint8checkdata_temp)
    {
      uint8RH_data_H=uint8RH_data_H_temp;
      uint8RH_data_L=uint8RH_data_L_temp;
      uint8T_data_H=uint8T_data_H_temp;
      uint8T_data_L=uint8T_data_L_temp;
      uint8checkdata=uint8checkdata_temp;
    }
    dht11Temp = uint8T_data_H; 
    dht11TempDec = uint8T_data_L;
    dht11Humidity = uint8RH_data_H;     
    dht11HumidityDec = uint8RH_data_L; 
  } 
  else //没有成功读取,返回0
  {
    dht11Temp = 0; 
    dht11TempDec = 0;
    dht11Humidity = 0;
    dht11HumidityDec = 0;
  } 
}
发布了133 篇原创文章 · 获赞 51 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/aa120515692/article/details/104007703