solomonzw 2023-09-12 19:53 采纳率: 0%
浏览 8

关于#stm32#的问题:为什么我的OLED都显示0000

#include "stm32f10x.h"                  // Device header
#include "delay.h"   
#include "DHT11.h" 
#include "OLED.h" 
uint8_t temp;
uint8_t humi;
int main(void)
{ 
    OLED_Init();
    DHT11_IO_OUT();
    DHT11_IO_IN();
     DHT11_Init();
 
    while(1)
    {
        
 DHT11_Read_Data(&temp,&humi);
    OLED_ShowNum(1,1,temp,4);
        OLED_ShowNum(2,1,humi,4);
}
    }


#include "stm32f10x.h"   // Device header
#include "DHT11.h" 
#include "delay.h" 
#define  DHT11_PORT    GPIOA
#define  DHT11_IO   GPIO_Pin_7
#define     DHT11_RCC  RCC_APB2Periph_GPIOA
void DHT11_IO_OUT(void)//输出
{
    GPIO_InitTypeDef   GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(DHT11_RCC ,ENABLE);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin=DHT11_IO;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(DHT11_PORT,&GPIO_InitStructure);
}


void DHT11_IO_IN(void)//输入
{
    GPIO_InitTypeDef   GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(DHT11_RCC ,ENABLE);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Pin=DHT11_IO;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(DHT11_PORT,&GPIO_InitStructure);
}


void DHT11_RST(void){
    DHT11_IO_OUT();
    GPIO_ResetBits(DHT11_PORT,DHT11_IO);//主机控制总线,拉低电平,大于18us给从机开始信号
    Delay_us(20);
    GPIO_SetBits(DHT11_PORT,DHT11_IO);//再拉高总线,等待从机信号
    Delay_us(30);
    GPIO_ResetBits(DHT11_PORT,DHT11_IO);
}


uint8_t DHT11_Check(void){//检查从机
    uint8_t retry;
    DHT11_IO_IN();//输入
    while((GPIO_ReadInputDataBit(DHT11_PORT,DHT11_IO) == 0) && retry <100)//如果主机读取高电平或是retry小于100循环,这里是在等待从机应答,等待低电平
    {
    
        retry++;
        Delay_us(1);
    }
    if(retry>=100)return 0;    
    else retry=0;
    while ((GPIO_ReadInputDataBit(DHT11_PORT,DHT11_IO)==1) && retry<100)//这时候从机应答,但是要持续大于80us,之后要拉高DHT80us再开始传输数据
    {
    
        retry++;
        Delay_us(1);
    }
    if(retry>=100)return 0;
    return 1;
}
uint8_t DHT11_Init(void){
  GPIO_InitTypeDef   GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(DHT11_RCC,ENABLE);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin=DHT11_IO;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(DHT11_PORT,&GPIO_InitStructure);
    DHT11_RST();
    return DHT11_Check();
}


static uint8_t DHT_Read_Bit(void)
{

    uint8_t retry = 0;
    while((GPIO_ReadInputDataBit(DHT11_PORT,DHT11_IO) == 1) && retry <100)//等待变为低电平
    {
    
        retry++;
        Delay_us(1);
    }
    retry = 0;
    while((GPIO_ReadInputDataBit(DHT11_PORT,DHT11_IO) == 0) && retry <100)//等待变为高电平
    {
    
        retry++;
        Delay_us(1);
    }
    Delay_us(40);//等待40us
    if(GPIO_ReadInputDataBit(DHT11_PORT,DHT11_IO) == 1)
            return 1;
    else
            return 0;
    }

    
uint8_t DHT_Read_Byte(void)
{

    uint8_t i,dat;
    dat = 0;
    for(i = 0;i < 8; i++)
    {
    dat <<= 1;
    dat |= DHT_Read_Bit();
}
    return dat;
    }

    
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
    //humi:湿度值为(范围:20%~90%)
    //返回值:0,正常;1,读取失败
    uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
    {
        uint8_t i;
        uint8_t buf[5];
        DHT11_RST();
        if(DHT11_Check() == 1)
        {
            for(i= 0;i < 5;i++)
            {
            
                buf[i] = DHT_Read_Byte();
            }
            if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
            {
            
                *humi = buf[0];
                *temp = buf[2];
            }
        }
        
        else return 1;
        return 0;
    }



为什么我的OLED都显示0000

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-12 22:08
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月12日

悬赏问题

  • ¥15 有没有下面符合以下条件的电子时钟的代码
  • ¥15 主成分分析中的原始数据矩阵行列分别代表什么
  • ¥20 PVE虚拟机运行不流畅,出现卡顿
  • ¥15 使用stata进行网状meta分析时遇到的问题
  • ¥15 ffmpeg音视频同步
  • ¥20 Ubuntu18.04卸载Python2后无可视化界面问题
  • ¥15 php同一个单元格里多选提交,更新表格
  • ¥15 Vue 前端调用本地jar包有什么方法?
  • ¥15 基础的图像处理问题求解答
  • ¥50 全国两定智慧医保接口开发相关业务文档,以及技术实现流程文档