电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1595|回复: 1
收起左侧

大佬们这个函数能获取到温湿度吗?为什么接收端一直显示00?

[复制链接]

604

主题

947

帖子

5151

积分

四级会员

Rank: 4

积分
5151
发表于 2022-6-17 14:44:15 | 显示全部楼层 |阅读模式
uchar dht11ReadDat()
{
    uchar i, tmp = 0, WAIT_FLAG = 0, checkOut = 0;


    P0DIR |= 0x01;  // 设置为输出模式
    DHT11_SDA = 0;
    halMcuWaitMs(19);   // 总线拉低时间大于18ms为起始信号
    DHT11_SDA = 1;
    P0DIR &= ~0x01;   // 设置为输入模式
     halMcuWaitUs(40);  // 延时等待20~40us,等待从机响应信号


    if (!DHT11_SDA) {
        WAIT_FLAG = 2;
        while ((!DHT11_SDA) && WAIT_FLAG++);  // 等待高电平信号结束,开始接收数据
        if (WAIT_FLAG == 1)  return 0;  // 等待超时,退出本次操作
        WAIT_FLAG = 2;
        while (DHT11_SDA && WAIT_FLAG++);  


       for (i=0; i<40; i++) {
            WAIT_FLAG = 2;
            while ((!DHT11_SDA) && WAIT_FLAG++);   // 等待下一位数据开始发送
            halMcuWaitUs(30);
            tmp = 0;
            if(DHT11_SDA) tmp = 1;  // 延时30us后仍为高电平,则为数据1
            WAIT_FLAG = 2;
            while (DHT11_SDA && WAIT_FLAG++);  // 等待高电平结束
            if(WAIT_FLAG == 1)  break;  // 等待超时,退出本次操作
            datBuf[i/8] <<= 1;
            datBuf[i/8] |= tmp;
        }


        P0DIR |= 0x01;  // 设置为输出模式
        DHT11_SDA = 1;


        for (i=0; i<4; i++) {
            checkOut += datBuf;
        }   
        if (checkOut == datBuf[4]) {
            return 1;  // 数据校验正确
        }
        else
          return 0;
    }
    else
        return 0;
}
参考别人的代码,想先改改试试的
回复

使用道具 举报

594

主题

958

帖子

5093

积分

四级会员

Rank: 4

积分
5093
发表于 2022-6-17 14:45:19 | 显示全部楼层
用的DHT11温湿度传感器,收集后发到接收端
回复 支持 反对

使用道具 举报

发表回复

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

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表