盐汽水霉 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日

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真