温湿度传感器驱动模块

/**********************************************************
*                   									  *
*		     温湿度传感器驱动程序	     				  *
*														  *
**********************************************************/


#include 
#include 
#include 
#include "delay.h"
#include  "wenshi.h"
#include "main.h"

 unsigned char idata TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
 char  idata com_data,untemp,temp;
 char  idata respond;




/****************************************************************************/
//收发信号检测,数据读取
/****************************************************************************/
char receive()
{    
          int i;
        //  ST=0;
          com_data=0;
          for(i=0;i<=7;i++)    
         {
                    respond=2;
                    while((!TRH)&&respond++);
                    delay_us();
                    delay_us();
                    delay_us();
                    if(TRH)
                    {
                              temp=1;
                              respond=2;
                              while((TRH)&&respond++); 
                    } 
                    else
                              temp=0;
                    com_data<<=1;
                    com_data|=temp;    
          }
          return(com_data);  
}
/****************************************************************************/


/****************************************************************************/
//湿度读取子程序 
//温度高8位== TL_data
//温度低8位== TH_data
//湿度高8位== RH_data
//湿度低8位== RH_data
//校验 8位 == CK_data
//调用的程序有 delay();, Delay_5us();,RECEIVE(); 
/***************************************************************************/

void read_TRH()
{
          //主机拉低18ms 
         TRH=0;
         delay_ms(18);
         TRH=1;
          //DATA总线由上拉电阻拉高 主机延时20us
         delay_us();
         delay_us();
         delay_us();
         delay_us();
          //delay_us();
          //delay_us();delay_us();delay_us();delay_us();
          //主机设为输入 判断从机响应信号 
             TRH=1;
          //判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行   
         if(!TRH)   
         {
                  respond=2;
                  //判断DHT11发出 80us 的低电平响应信号是否结束 
                  while((!TRH)&& respond++);
                 respond=2;
                 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
                while(TRH && respond++);
               //数据接收状态   
                RH_temp = receive(); 
                RL_temp = receive(); 
                TH_temp = receive(); 
                TL_temp = receive(); 
                CK_temp = receive();
                TRH=1;
				//ST=1;     
                 //数据校验 
                 untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
                 if(untemp==CK_temp)
                 {
                          RH_data = RH_temp;
                          RL_data = RL_temp;
                          TH_data = TH_temp; 
                          TL_data = TL_temp;
                          CK_data = CK_temp;
                }
        }
         //湿度整数部分
         shi[0] = (char)(0X30+RH_data/10); 
         shi[1] = (char)(0X30+RH_data%10);
         shi[2] =  0x2e; //小数点
          //湿度小数部分
         shi[3] = (char)(0X30+RL_data/10); 
         shi[4] = 0X25; //"%"
         shi[5] = 0X52; //"R"
         shi[6] = 0X48; //"H"
         //温度整数部分
         wen[0] = (char)(0X30+TH_data/10); 
         wen[1] = (char)(0X30+TH_data%10);
         wen[2] =  0x2e; //小数点
         //温度小数部分
         wen[3] = (char)(0X30+TL_data/10); 
         wen[4] = 0X27;  //"'"
         wen[5] = 0X43;  //"C"
}

你可能感兴趣的:(嵌入式)