找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1070|回复: 7
收起左侧

为什么我的DHT11不能对单片机的信号做出回应?

[复制链接]
ID:1078664 发表于 2023-6-7 22:56 | 显示全部楼层 |阅读模式
这是我想用来验证DHT11的反应的,理论上来说只要while(LCD_T);能出来就会熄灭led灯,但是实际情况是一直卡在while里面不出来

单片机源程序如下:
#include<reg52.h>
#include<intrins.h>


#define u8 unsigned char
#define u16 unsigned int
sbit GREEN  =P2^3;
sbit YELLOW  =P2^4;
sbit RED =P2^5;
sbit LCD_T    =P2^6;


void delay_us(u8 us) {
    while (us--);
}


void delayms(u8 t)//延时
{
                        u8 i;
                        u8 j;
                          for(i=0;i<t;i++)
                            for(j=0;j<124;j++);
}


// 发送起始信号
void DHT_Start()
        {
                LCD_T=1;
    LCD_T = 0;     // 拉低引脚电平18ms以上
                delayms(30);
    LCD_T = 1;     // 拉高电平20~40us
    delay_us(30);
                while(LCD_T);
                        GREEN=0;
                  RED=0;
}


void main()
{
        delayms(200);
        while(1)
        {
                DHT_Start();
        }
}

回复

使用道具 举报

ID:123289 发表于 2023-6-8 08:25 | 显示全部楼层
这么简单,走单步调式一下,一看就明白了。
回复

使用道具 举报

ID:752974 发表于 2023-6-8 15:38 | 显示全部楼层
DHT11是单总线,仔细看看单总线协议,再写代码。
回复

使用道具 举报

ID:17647 发表于 2023-6-8 17:06 | 显示全部楼层
前面LCD_T = 1; 后面while(LCD_T);咋还能出来
回复

使用道具 举报

ID:1082926 发表于 2023-6-9 00:01 | 显示全部楼层
请问楼主后来解决了吗,我也遇到一样的问题
回复

使用道具 举报

ID:747496 发表于 2023-6-9 00:43 | 显示全部楼层
检查数据线上的上拉电阻
回复

使用道具 举报

ID:1078664 发表于 2023-6-14 19:44 | 显示全部楼层
RianYu 发表于 2023-6-9 00:01
请问楼主后来解决了吗,我也遇到一样的问题

算解决了,延时的问题,那个延时和单片机的hz不统一,改成11.0592MHz后就行了
回复

使用道具 举报

ID:1078664 发表于 2023-6-14 19:45 | 显示全部楼层
找到了,单片机内设改成了11.0592MHz就可以接收了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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