找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1159|回復: 1
打印 上一主題 下一主題
收起左側

DHT11和LCD1602顯示屏顯示溫濕度測量儀

[復制鏈接]
跳轉到指定樓層
樓主
ID:1142651 發(fā)表于 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');
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:404454 發(fā)表于 2025-4-3 17:48 | 只看該作者
有壇友做過成功的嗎?我看程序顯示部分的都看不明白,也想做個當擺設。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表