找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2032|回复: 0
打印 上一主题 下一主题
收起左侧

DHT11驱动程序

[复制链接]
跳转到指定楼层
楼主
ID:374873 发表于 2018-7-19 15:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define uint unsigned int
#define uchar unsigned char

sbit  DQ2=P1^2;
uchar RH,RL,TH,TL;
uchar DHT11Flag;

void Delay_us(uchar n)

{

        while (n--)

        {                                                         

                _nop_();               
                _nop_();               
                _nop_();               
                _nop_();


        }

}

void Delay18ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 1;
        j = 194;
        k = 159;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void DHT11_Init()
{
        uchar R_H,R_L,T_H,T_L,revise;
        DHT11_start();
        if(!DQ2)
        {
                DHT11Flag=180;
                while((!DQ2)&&DHT11Flag++);
                DHT11Flag=180;
                while((DQ2)&&DHT11Flag++);
                R_H=DHT11_read();
                R_L=DHT11_read();
                T_H=DHT11_read();
                T_L=DHT11_read();
                revise=DHT11_read();
                if((R_H+R_L+T_H+T_L)==revise)
                {
                                   RH=R_H;
                                   RL=R_L;
                                   TH=T_H;
                                   TL=T_L;
                    }
        }        
}

void DHT11_start()
{
        DQ2=1;
        Delay_us(1);
        DQ2=0;
        Delay18ms();
        DQ2=1;
        Delay_us(40);
}

uchar DHT11_read()
{
        uint i;
        uchar data2,temp;
        for(i=0;i<8;i++)
        {
                DHT11Flag=200;
                while((!DQ2)&&DHT11Flag++);
                Delay_us(30);
                temp=0;
                if(DQ2)
                temp=1;
                DHT11Flag=100;
                while((DQ2)&&DHT11Flag++);
                if(DHT11Flag==1)
                break;
                data2<<=1;
                data2|=temp;
                               
        }
        return data2;
}

void conversion2()
{
        uchar da2 [10];
        da2[0]='0'+(RH/10);
        da2[1]='0'+(RH%10);
            da2[2]='R';
            da2[3]='H';
            da2[4]=' ';
            da2[5]='0'+(TH/10);
            da2[6]='0'+(TH%10);
        da2[7]='C';
        da2[8]='\n';
        SendString(& da2);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表