盐汽水霉 2023-03-02 18:41 采纳率: 100%
浏览 66
已结题

温度显示255,湿度0,temp = temp16>>8;humi = temp16&0xFF;

oled屏 温度:255 湿度:0 DHT11.c文件在后面
想问一下是什么原因

img

/**====================================================================*
*                            DHT11驱动函数
*----------------------------------------------------------------------*
*文 件 名:    DHT11.c
*文件描述:    读取DHT11温湿度传感器的数据
*软件版本:    V1.1
*硬件环境:    
*创 建 人:    方规  526293582@qq.com(邮箱) 13477037750(手机)
*最后修改:    2017/06/09 16:33
*功能说明:    
-----------------------------------------------------------------------*
*DHT11使用方法:
1.    起始信号:单片机拉低数据线19ms,然后拉高数据线,含义"告诉DHT11我需要数据了"
2.    应答信号:DHT11收到起始信号后,将总线拉低80us,然后再拉高80us,含义"我准备好
    发送数据了",接下来就是数据信号了
3.    数据信号:每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0(26us至28us)
    还是1(70us),当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高
    进入空闲状态
=======================================================================*/

#include "DHT11.h"
#include "Uart1.h"


//
//温湿度定义
uchar ucharFLAG=0,uchartemp=0;
uchar ucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L,ucharcheckdata;
uchar ucharT_data_H_temp,ucharT_data_L_temp,ucharRH_data_H_temp,ucharRH_data_L_temp,ucharcheckdata_temp;
uchar ucharcomdata;


//温湿度传感
void COM(void)    // 温湿写入
{     
    uchar i;         
    for(i=0;i<8;i++)    
    {
        ucharFLAG=2; 
        while((!DATA_PIN)&&ucharFLAG++);    //50us低电平,表示信号的开始,随后跳过信号0(至少28us)的延时,然后检测数据线的高低
        DelayUs(30);                        //***逻辑分析仪测试,大约延时53us,此函数延时不精确,开发是需要用工具测试!!
        uchartemp=0;
        if(DATA_PIN){
            uchartemp=1;    
        }else{
        }
        
        ucharFLAG=2;
        while((DATA_PIN)&&ucharFLAG++);        //最后,如果数据线持续高电平很长时间后,数据线仍然为高,那么说明数据传输结束了(由上拉电阻拉高的)

        if(ucharFLAG==1){
            break;    
        }
        
        ucharcomdata<<=1;
        ucharcomdata|=uchartemp; 
    }    
}

unsigned int DHT11(void)       //温湿传感启动
{
//    SetPinMode(P1M0,P1M1,POMOD,1);            //设置P1.1为输出
    
    SetBit(P1M0,1);
    ClrBit(P1M1,1);
    
    
    DATA_PIN=0;
    DelayMs(19);              //>18MS
    DATA_PIN=1; 

//    SetPinMode(P1M0,P1M1,INMOD,1);            //设置P1.1为输入

    SetBit(P1M1,1);
    ClrBit(P1M0,1);
    
    DelayUs(10);
    DelayUs(10);                        
    DelayUs(10);
    DelayUs(10);  
    
    if(!DATA_PIN) 
    {        
        ucharFLAG=2; 
        while((!DATA_PIN)&&ucharFLAG++);        //DHT11拉低80us响应主机信号
        ucharFLAG=2;
        while((DATA_PIN)&&ucharFLAG++);         //DHT11拉高80us响应主机信号,后面的就是数据信号了
        COM();
        ucharRH_data_H_temp=ucharcomdata;        //湿度高八位
        COM();
        ucharRH_data_L_temp=ucharcomdata;        //湿度低八位
        COM();
        ucharT_data_H_temp=ucharcomdata;        //温度高八位
        COM();
        ucharT_data_L_temp=ucharcomdata;        //温度低八位
        COM();
        ucharcheckdata_temp=ucharcomdata;        //校验位
        DATA_PIN=1; 
        
        uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp);
        
        if(uchartemp==ucharcheckdata_temp)
        {
            ucharRH_data_H=ucharRH_data_H_temp;
            ucharRH_data_L=ucharRH_data_L_temp;
            ucharT_data_H=ucharT_data_H_temp;
            ucharT_data_L=ucharT_data_L_temp;
            ucharcheckdata=ucharcheckdata_temp;
        }    
    }    
//    Send0Data(ucharT_data_H<<8);Send0Data(ucharRH_data_H<<0);
    return (ucharT_data_H<<8)|(ucharRH_data_H<<0);
}
  • 写回答

1条回答 默认 最新

  • 小黄人软件 博客专家认证 2023-03-03 09:20
    关注
    
    #include <dht11.h>
    #include <stdio.h>
    #include <wiringPi.h>
    
    int main()
    {
        if(wiringPiSetup() == -1)
            exit(1);
        dht11_t dht11;
        while(1)
        {
            int ret = read_dht11_dat(&dht11);
            printf("Humidity = %d.%d %% Temperature = %d.%d *C\n",
                dht11.humidity/10, dht11.humidity%10, dht11.temperature/10, dht11.temperature%10);
            delay(1000);
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 修改了问题 3月6日
  • 创建了问题 3月2日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备