OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4954|回复: 1

DHT11显示问题,一直显示不出来数字

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2020-11-30
在线时间
7 小时
发表于 2021-9-6 18:37:19 | 显示全部楼层 |阅读模式
我用原子的源码烧写可以正常显示温湿度,但我自己根据原子源码仿写的最后只输出温度0,湿度41%,而且读数据的返回值为0#include "dht11.h"
#include "delay.h"
#include "lcd.h"

/*复位函数*/
void DHT11_Reset(void)
{
        DHT11_IO_OUT;
        DHT11_DQ_Write(0);
        delay_ms(20);
        DHT11_DQ_Write(1);
        delay_us(30);
}

//检查dht11的相应信号函数
//复位信号后,dht11会发送响应信号:拉低总线40~50us;然后再拉高40~50us
u8 DHT11_Check(void)
{
        u8 wait_time=0;
        DHT11_IO_IN;                                    //设置PB12为输入模式
        while(DHT11_DQ_Read&&wait_time<100)                //等待dht11的低电平到来,超过100us后认为dht11不存在
        {
                wait_time++;
                delay_us(1);
        }
        if(wait_time>=100) return 1;
        else wait_time=0;
        while(!DHT11_DQ_Read&&wait_time<100)        //等待高电平到来
        {
                wait_time++;
                delay_us(1);
        }
        if(wait_time>=100)return 1;
        return 0;
       
}
/*初始化函数*/
u8 dht11_Init(void)
{
        GPIO_InitTypeDef DHT11_InitStruct;                                //IO口初始化
       
        __HAL_RCC_GPIOB_CLK_ENABLE();                                        //开启IO口时钟
       
        DHT11_InitStruct.Mode =GPIO_MODE_OUTPUT_PP;
        DHT11_InitStruct.Pin =GPIO_PIN_12;
        DHT11_InitStruct.Pull =GPIO_PULLUP;
        DHT11_InitStruct.Speed =GPIO_SPEED_HIGH;
       
        HAL_GPIO_Init(GPIOB,&DHT11_InitStruct);
       
        DHT11_Reset();
        return DHT11_Check();
}


//从dht11读取一个bit
//0:12-14us低电平+26-28us高电平
//1:12-14us低电平+116-118us高电平
u8 DHT11_Read_bit(void)
{
        u8 time_wait=0;
        //DHT11_IO_IN;
        while(DHT11_DQ_Read&&time_wait<100)                //等待dht11的低电平到来
        {
                time_wait++;
                delay_us(1);
        }
        time_wait=0;
        while(!DHT11_DQ_Read&&time_wait<100)        //等待高电平到来
        {
                time_wait++;
                delay_us(1);
        }
        delay_us (50);                                                        //延时40us(0所持续的最长时间)
        if(DHT11_DQ_Read)return 1;
        else return 0;
       
}

//从dht11读取一个byte,DHT11从高位向MCU发送数据
u8 DHT11_Read_byte(void)
{
        u8 i,dat=0;
        for(i=0;i<8;i++)
        {
                dat<<=1;
                dat|=DHT11_Read_bit();
        }
        return dat;
}

//从DHT11读取湿度和温度值
//DHT11发送的数据包为5个字节:湿度整数+湿度小数+温度整数+温度小数+校验和(前四个字节相加)
u8 DHT11_Get_data(u8 *hemi, u8 *tem)
{
        u8 i,buf[5];
        DHT11_Reset();
        if(DHT11_Check()==0)
        {        printf("ok\n");          
                //LCD_ShowNum(30+40,210,DHT11_Check(),2,16);                //显示湿度       
                for(i=0;i<5;i++)                                                        //读取5个字节的数据包
                {
                        buf[i]=DHT11_Read_byte();
                }
                if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])                //校验和
                {
                        *hemi=buf[0];
                        *tem=buf[2];
                        //printf("hemi=%d tem=%d",*hemi,*tem);
                }
        }
        else
                {
                        printf("no\n");
                        return 1;
                }
        return 0;
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-9-7 10:18:45 | 显示全部楼层
建议仔细对比下两个工程的差距自己debug
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 03:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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