温湿度传感器驱动模块

来源:互联网 发布:主食 知乎 编辑:程序博客网 时间:2024/06/02 13:52
/***********************************************************                     **     温湿度传感器驱动程序       **  ***********************************************************/#include <reg52.h>#include <intrins.h>#include <stdio.h>#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"}

0 0
原创粉丝点击