单片机/MCU论坛
直播中

宏沉一笑

10年用户 67经验值
擅长:测量仪表 模拟技术 RF/无线
私信 关注
[资料]

基于STC12C5160S2的DHT11的驱动

先写C语言的部分
/*******************************************************************************
版    本:
生成日期:2016-8-23 17:15:18
作    者:WHG
模块目的:
功    能:
主要函数:毫秒级延时 微秒级延时 读取一字节函数 读取温湿度值
功    能:读取温湿度值
修改记录:
*******************************************************************************/

#include
/* 温度  湿度 */
unsigned char temp=0,humi=0;
/* 毫秒级延时函数 */
void Delay_1ms(unsigned int ms)
{
        unsigned int x,y;
        for(x=ms;x>0;x--)
        {
                for(y=9215;y>0;y--);
        }
}
/* 微秒级延时函数 */
void DHT11_Delay_us(unsigned char i)
{                 
        for(i;i>0;i--);
}
/* 获得一字节的数据 */
unsigned char GetDate(void)
{
           unsigned char i,value=0;
        unsigned char flag,count;
        for(i=0;i<8;i++)
        {
                count=2;
                while(dht11==0&&count++);  //dht数据低电平结束
                DHT11_Delay_us(26);//延时  后检测高电平
                flag=0;
                if(dht11==1) flag=1;
                count=2;
                while(dht11==1&&count++);  //dht数据高电平结束
                value=(value<<1)+flag;
        }
        return value;
}
/* DHT11读取温湿度函数 */
unsigned char DHT11_Init(void)
{
        unsigned char count,i;
        unsigned char dht11_value[5]={0};
        dht11=0;         /* 拉低数据线大于18ms发送开始信号 */
        Delay_1ms(8);        /* 需大于18毫秒 */
        dht11=1;         /* 释放数据线,用于检测低电平的应答信号 */
        DHT11_Delay_us(12);
        //检测DHT响应信号
        if(dht11==0);
        {
                //dht信号低电平结束
                count=2;
                while(dht11==0&&count++);  
                //dht信号高电平结束
                count=2;
                while(dht11==1&&count++);  
                for(i=0;i<5;i++)
                {
                        dht11_value[i]=GetDate();
                }
        }
        //数据检验
        if(dht11_value[0]+dht11_value[1]+dht11_value[2]+dht11_value[3]==dht11_value[4])
        {
                temp=dht11_value[2];
                humi=dht11_value[0];
                return 0;
        }
        else
        {
                temp=0;
                humi=0;
                return 1;
        }
}


回帖(4)

宏沉一笑

2016-8-23 18:03:52
再写头文件的部分
/*******************************************************************************
版    本:
生成时间:2016-8-23 17:14:54
文 件 名:dht11.h
功    能:读取温湿度值
模    块:DHT11
作    者:WHG
IO    口:P2.0
芯片版本:STC12C5A60S2
与其他文件的关系:
函 数 功 能 说明:
修改记录:     
*******************************************************************************/
#ifndef __DHT11_H__
#define __DHT11_H__
/* 引用头文件 */
#include                 //单片机
/* DHT11数据引脚 */
***it dht11 = P2^0;
/* DHT11读出来的值   温度 湿度*/
extern unsigned char temp,humi;
/* DHT11读取温湿度函数 */
unsigned char DHT11_Init(void);
#endif
举报

chenwei6991627

2016-8-24 09:28:52
嗯,之前我用是SHT的
举报

宏沉一笑

2016-9-4 11:18:32
顶一个                                    
举报

郝慎才

2018-1-16 21:23:27
正好使用中,过来看看
举报

更多回帖

发帖
×
20
完善资料,
赚取积分