这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机读不出温湿度传感器DHT11的数据,why?

共7条 1/1 1 跳转至

单片机读不出温湿度传感器DHT11的数据,why?

工程师
2021-02-20 23:08:33     打赏

写了一个DHT11温度计,用lcd1602显示,lcd1602的程序肯定是没错的,用了许多次。DHT11的函数里面用了while语句,所以现在就好像是卡在读取程序的函数里面了,这个模块我之前用别人的程序测试过也是好用的,延时函数由STC-isp提供,应该也没错。

下面是我的单片机源码:

void DHT11Start()     //发送开始信号

{

    DHT11data = 1;

    DHT11data = 0;

    Delay20ms();

    DHT11data = 1;

    Delay30us();

}


uchar DHT11GetByte()  //获得一组8bit数据

{

    uchar byte = 0;

    uint i;

    for(i=0;i<8;i++)

    {

        while(!DHT11data);

        Delay30us();

        Delay30us();

        byte <<= 1;

        if(DHT11data == 1)

        { byte += 1; }

        while(DHT11data);

    }

    return byte;

}



void DHT11GetData(uchar *dat)                         //获得所有数据

{

    uchar check,datbuffer[4]={0,0,0,0};

  uchar datcheck[4]={0,0,0,0};    //湿度十位,湿度个位,温度十位,温度个位

    uint i,num;

    

    DHT11Start();

    if(DHT11data == 0)

    {

        while(DHT11data == 0);

        Delay80us();

    

        datbuffer[0] = DHT11GetByte();

        datbuffer[1] = DHT11GetByte();

        datbuffer[2] = DHT11GetByte();

        datbuffer[3] = DHT11GetByte();

        

        check = DHT11GetByte();

        Delay30us();

        num = datbuffer[0]+datbuffer[1]+datbuffer[2]+datbuffer[3];

        if(check == num)

            {

                for(i=0;i<4;i++)

                {

                    datcheck[i] = datbuffer[i];

                }

            }

            dat[0] = (datcheck[0]/10)+'0';

            dat[1] = (datcheck[1]%10)+'0';

            dat[2] = (datcheck[2]/10)+'0';

            dat[3] = (datcheck[3]%10)+'0';

            

//            dat[0] = (datbuffer[0]/10)+'0';

//            dat[1] = (datbuffer[1]%10)+'0';

//            dat[2] = (datbuffer[2]/10)+'0';

//            dat[3] = (datbuffer[3]%10)+'0';


    }

}






关键词: DHT11     温湿度     传感器    

工程师
2021-02-20 23:12:43     打赏
2楼

原来是这个原因熬


工程师
2021-02-20 23:23:31     打赏
3楼

代码写的有点问题吧


工程师
2021-02-20 23:25:14     打赏
4楼

DHT11 data是全局变量吗 在哪更新 不更新就会死在while里


工程师
2021-02-20 23:29:50     打赏
5楼

它不是IIC设备,你delay时间安排的不大对啊,比如while(DHT11data == 0);         Delay80us();前一句已经等待掉这80


工程师
2021-02-20 23:30:53     打赏
6楼

代码写的非常不错哦


工程师
2021-02-20 23:33:06     打赏
7楼

检查一下有ACK应答?


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]