找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1213|回复: 1
收起左侧

DHT11和LCD1602显示屏显示温湿度测量仪

[复制链接]
ID:1142651 发表于 2025-1-7 13:29 | 显示全部楼层 |阅读模式
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Data = P1 ^ 6;

uchar rec_dat[9];

sbit lcdrs = P2 ^ 0;
sbit lcdrw = P2 ^ 1;
sbit lcden = P2 ^ 2;

sbit addr=P2^4;
sbit reducer=P2^5;
sbit addt=P2^6;
sbit reducet=P2^7;

int ET = 0, ER = 0;

uchar R_H, R_L, T_H, T_L, RH, RL, TH, TL;

void delay(uint n)
{
  uint x, y;
  for (x = n; x > 0; x--)
    for (y = 110; y > 0; y--)
      ;
}
void write_com(uchar com)
{
  lcdrs = 0;
  P0 = com;
  delay(5);
  lcden = 1;
  delay(5);
  lcden = 0;
}
void write_dat(uchar dat)
{
  lcdrs = 1;
  P0 = dat;
  delay(5);
  lcden = 1;
  delay(5);
  lcden = 0;
}
void init_lcd()
{
  lcden = 0;
  lcdrw = 0;
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
  write_com(0x01);
}
void DHT11_delay_us(uchar n)
{
  while (--n)
    ;
}
void DHT11_delay_ms(uint z)
{
  uint i, j;
  for (i = z; i > 0; i--)
    for (j = 110; j > 0; j--)
      ;
}
void DHT11_start()
{
  Data = 1;
  DHT11_delay_us(2);
  Data = 0;
  DHT11_delay_ms(30);
  Data = 1;
  DHT11_delay_us(30);
}
uchar DHT11_rec_byte()
{
  uchar i, dat = 0;
  for (i = 0; i < 8; i++)
  {
    while (!Data)
      ;
    DHT11_delay_us(8);
    dat <<= 1;
    if (Data == 1)
      dat += 1;
    while (Data)
      ;
  }
  return dat;
}
void DHT11_receive()
{
  uchar revise;
  DHT11_start();
  if (Data == 0)
  {
    while (Data == 0)
      ;
    DHT11_delay_us(40);
    R_H = DHT11_rec_byte();
    R_L = DHT11_rec_byte();
    T_H = DHT11_rec_byte();
    T_L = DHT11_rec_byte();
    revise = DHT11_rec_byte();
    DHT11_delay_us(25);
    if ((R_H + R_L + T_H + T_L) == revise)
    {
      RH = R_H;
      RL = R_L;
      TH = T_H;
      TL = T_L;
    }
    rec_dat[0]='0'+((RH+ER)/10);
        rec_dat[1]='0'+((RH+ER)%10);
        rec_dat[2]='.';
        rec_dat[3]='0'+(RL/10);
        rec_dat[4]='%';
                                rec_dat[5]=' ';
        rec_dat[6]='0'+((TH+ET)/10);
        rec_dat[7]='0'+((TH+ET)%10);
                                rec_dat[8]='.';
                                rec_dat[9]='0'+(TL/10);
  }
}

void main()
{
  uchar i;
  init_lcd();
  while (1)
  {

    if (addr == 0)
    {
      delay(30);
      ER += 1;
    }
    if (reducer == 0)
    {
      delay(30);
      ER -= 1;
    }
    if (addt == 0)
    {
      delay(30);
      ET += 1;
    }
    if (reducet == 0)
    {
      delay(30);
      ET -= 1;
    }

    DHT11_delay_ms(100);
    DHT11_receive();
    write_com(0x80);

     for(i=0;i<=9;i++)
       write_dat(rec_dat[i]);
    write_dat(0xdf);
    write_dat('C');
  }
}


回复

使用道具 举报

ID:404454 发表于 2025-4-3 17:48 | 显示全部楼层
有坛友做过成功的吗?我看程序显示部分的都看不明白,也想做个当摆设。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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