数字温度湿度测量仪设计(添加矫正按键)

本文介绍了对一款测温仪的代码进行优化,提高了温度读数的精度到小数点后一位,并添加了矫正功能。代码展示了如何使用DHT11传感器、LCD显示以及中断处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一开始的测温仪只精确到个位数,现在修改代码使得温度精确到小数点后一位,并且增加矫正按钮。代码如下:

#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');
  }
}

运行结果如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值