这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 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 跳转至

回复

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