找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1016|回复: 4
收起左侧

单片机+DHT11温湿度读取数据为0?

[复制链接]
ID:190152 发表于 2023-8-23 23:41 | 显示全部楼层 |阅读模式
源代码是18b20程序可以在液晶上正常显示,换成DHT11温湿度计读取不到数据
#include "STC15Fxxx.H"//调用stc15f系列头文
#include "oled.h"
#include "bmp.h"
#include "intrins.h"
#include "dht11.h"

#define ds18b20_io P20   //P2.0口作为数据读取接口
void  Delay3us();                                   //22.1184M晶振精确延时30微秒
void  Delay6us();                                   //22.1184M晶振精确延时30微秒
void  Delay24us();                              //22.1184M晶振精确延时40微秒
void  Delay30us();                              //22.1184M晶振精确延时40微秒
void  Delay300us();                             //22.1184M晶振精确延时40微秒
void  Delay600us();                             //22.1184M晶振精确延时30毫秒
void    Delay1000ms();                          //22.1184M晶振精确延时1000毫秒

sfr ADC_LOW2    =   0xBE;           //ADC低2位结果

#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540个时钟
#define ADC_SPEEDL  0x20            //360个时钟
#define ADC_SPEEDH  0x40            //180个时钟
#define ADC_SPEEDHH 0x60            //90个时钟

typedef unsigned char BYTE;
typedef unsigned int WORD;
bit  ds18b20_init();                                //初始化ds18b20
u8   ds18b20_read_one_char();               //从ds18b20读取一个字节
void ds18b20_write_one_char(u8 dat);//向ds18b20写入一个字节
void ds18b20_ready_read_temp();         //准备读取数据
u16  ds18b20_read_temp_val();               //读取数据,返回温度值,返回实际值的100倍,且万位为符号位,例:12556为-25.56度,2556为25.56度
//变量定义

u16 datas=0;//测试用
u16 d3,d2,d1,d0,temp;//测试
u16 DL;//电量显示百分比
u16        Battery_data;//255电池数据缓存
u16 DL1,DL2,DL3;//电量按位显示在液晶屏上

void InitADC();
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void ShowResult(BYTE ch);
uchar RH(void);//温湿度函数声明
void DLXS();//电量查表百分比显示函数
void DCTB();//电池图标查表显示函数
u8 battery;        //



int main(void)
         {
                        OLED_Init();                        //初始化OLED  
                        OLED_Clear();//清屏
                        ds18b20_io = 1;//18b20先高电平
                        OLED_DrawBMP(0,0,128,8,BMP1);
                        delay_ms(1000);
                        OLED_Clear();

                        P1M0 = 0x00;
                    P1M1 = 0x40;
                        while(1)
                        {
                        RH();
                        temperature=datas;//温度数据对接
                        d3=datas/1000;  //显示数据:百位
                        d2=datas/100;  //显示数据:十位
                        d1=datas%100/10;  //显示数据:个位
                        d0=datas%10;  //显示数据:十分位
                        Battery_data=GetADCResult(6);//读取通道6电压转换数据
                        Battery_data=5*(long)ADC_RES*50/256*1;//数据转换电压
                        DLXS();
                        DCTB();
                        DL1=battery/100;  //显示数据:十位
                        DL2=battery%100/10;  //显示数据:十位
                        DL3=battery%10;
                          //显示数据:十位

                      Delay1000ms();
                        OLED_ShowCHinese(0,4,8);//温
                        OLED_ShowCHinese(16,4,9);//度
                        OLED_ShowCHinese(96,4,10);//摄氏度
                        OLED_ShowNum(48,4,d3,1,16); //温度显示十位
                        OLED_ShowNum(56,4,d2,1,16);//温度显示个位
                        OLED_ShowString(64,4,".",16);//温度显示小数点
                        OLED_ShowNum(72,4,d1,1,16);        //温度显示小数点后一位
                        OLED_ShowNum(80,4,d0,1,16);        //温度显示小数点后两位
                        OLED_ShowNum(104,1,DL3,1,8);//电量显示个位
                        OLED_ShowNum(96,1,DL2,1,8);//电量显示十位
            OLED_ShowNum(88,1,DL1,1,8);//电量显示百位
                        OLED_ShowNum(16,1,U8RH_data_H,2,8);//电压值单独显示测试
                        }
        }
        
        //ds18b20初始化
bit ds18b20_init()



DHT11温湿度计2023.zip (159.55 KB, 下载次数: 4)
回复

使用道具 举报

ID:320306 发表于 2023-8-25 16:34 | 显示全部楼层
DHT11和DS18B20不一样,群里就有DHT11的程序,直接用吧,为啥非要用DS18B20来驱动DHT11呢,时序不一样的!
回复

使用道具 举报

ID:584814 发表于 2023-8-25 17:40 | 显示全部楼层
一般来说,除了硬件坏就是程序错,或都是。
回复

使用道具 举报

ID:190152 发表于 2023-8-26 12:16 来自手机 | 显示全部楼层
zsyzdx 发表于 2023-8-25 16:34
DHT11和DS18B20不一样,群里就有DHT11的程序,直接用吧,为啥非要用DS18B20来驱动DHT11呢,时序不一样的!

群里有个精简的程序,可以显示温湿度。但是液晶无法显示中文和图片。代码东拼西凑有点乱
回复

使用道具 举报

ID:190152 发表于 2023-8-26 12:18 来自手机 | 显示全部楼层
man1234567 发表于 2023-8-25 17:40
一般来说,除了硬件坏就是程序错,或都是。

硬件没坏,先烧录一个英文的DHT11能正常显示。我想显示自定义汉子东改西改搞不好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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