找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

lcd1602温湿度检测一直为0

查看数: 2501 | 评论数: 6 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-5-3 18:59

正文摘要:

#include "reg52.h" #include <intrins.h> #include <string.h> #define dataBuf P0 sfr AUXR = 0x8e; sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^2; sbit dht11 = P1^3; char dht11Dat ...

回复

ID:1119185 发表于 2024-5-7 16:24
cocolala 发表于 2024-5-6 20:11
DHT11温湿度传感器信号线上需要加上拉电阻的,不知道你硬件上有没有加呢。

我连接的是P2口,内部有上拉电阻
ID:226055 发表于 2024-5-6 20:11
    DHT11温湿度传感器信号线上需要加上拉电阻的,不知道你硬件上有没有加呢。
ID:1119185 发表于 2024-5-6 15:26
li_z 发表于 2024-5-4 13:58
谢谢,我看一下

你好,您能否具体一些,我试过了,目前还未解决,如果可以,,交流一下
ID:619259 发表于 2024-5-4 15:28
纠正一下:lcd1602不能检测温湿度,这个功能是由温湿度传感器DHT11完成的。
ID:1119185 发表于 2024-5-4 13:58
angmall 发表于 2024-5-4 11:12
延时时间不对
时序不对

谢谢,我看一下
ID:155507 发表于 2024-5-4 11:12
延时时间不对
序不对


给一个你参考。
  1. void DHT11_Start()
  2. {
  3.         DATA=1;                        //空闲状态为高电平
  4.         delay_us(2);
  5.         DATA=0;                        //主机发出开始信号,将总线拉低至少18ms
  6.         delay_ms(20);
  7.         DATA=1;                        //拉高总线并延时等待20--40us
  8.         delay_us(30);
  9. }

  10. uchar Receive_Byte()        //读取一个字节数据
  11. {
  12.         uchar i,dat;
  13.         for(i=0;i<8;i++)
  14.         {
  15.                 while(DATA==0);        //等待数据低电平部分过去
  16.                 delay_us(8);        //延时50us,若DATA还为高电平则为数据1,否则为数据0
  17.                 dat<<=1;
  18.                 if(DATA==1)
  19.                 {
  20.                         dat|=0x01;
  21.                 }
  22.                 while(DATA==1);        //等待此帧数据高电平完全过去
  23.         }
  24.         return dat;
  25. }

  26. void DHT11_ReadData()
  27. {
  28.         uchar H1,H2,T1,T2,check,Humanity_H,Humanity_L,Temperature_H,Temperature_L;
  29.         DHT11_Start();                //主机发出开始信号
  30.         if(DATA==0)                        //DHT11响应信号
  31.         {
  32.                 while(DATA==0);        //DHT11响应信号,80us
  33.                 delay_us(40);        //DHT11响应信号,拉高延时80us,准备输出
  34.                 H1=Receive_Byte();
  35.                 H2=Receive_Byte();
  36.                 T1=Receive_Byte();
  37.                 T2=Receive_Byte();
  38.                 check=Receive_Byte();
  39.                 delay_us(25);        //当一次数据传输完成后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
  40.                 if((H1+H2+T1+T2)==check)        //数据检验
  41.                 {
  42.                         Humanity_H=H1;
  43.                         Humanity_L=H2;
  44.                         Temperature_H=T1;
  45.                         Temperature_L=T2;
  46.                 }
  47.                 DHT11_Data[0]=Humanity_H/10;
  48.                 DHT11_Data[1]=Humanity_H%10;
  49.                 DHT11_Data[2]=Humanity_L/10;
  50.                 DHT11_Data[3]=Humanity_L%10;
  51.                 DHT11_Data[4]=Temperature_H/10;
  52.                 DHT11_Data[5]=Temperature_H%10;
  53.                 DHT11_Data[6]=Temperature_L/10;
  54.                 DHT11_Data[7]=Temperature_L%10;
  55.         }
  56. }

复制代码













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

Powered by 单片机教程网

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