项目七 51项目湿温度显示

项目 51项目湿温度显示

【实验内容】

1.熟悉软件流程(Proteus 8 Professional,Keil uVision5),熟悉烧录流程,熟悉51芯片的引脚。

2.编写程序代码

3.用软件搭建实验电路,实现湿温度显示的功能。

【实验原理】

本项目是通过DHT11传感器获取温湿度数据,并将数据显示在LCD1602液晶屏上的嵌入式系统程序。

具体实验原理如下:

1.硬件连接:DHT11传感器的数据引脚通过P3^6连接到单片机,LCD1602液晶屏通过相应引脚连接到单片机。

2.DHT11_start函数用来发送开始信号给DHT11传感器,启动数据采集。

3.DHT11_rec_byte函数用来接收DHT11传感器传回的一个字节数据。

4.DHT11_receive函数中进行了具体的数据接收流程:发送开始信号、接收湿度和温度数据、校验数据是否正确。

5.如果接收到的数据校验正确,则将湿度和温度数据分别存储在RH、RL、TH、TL中,并将其转换为ASCII码形式存储在rec_dat数组中。

6.在主函数main中,初始化LCD1602液晶屏,然后循环不断地调用DHT11_receive函数获取最新的温湿度数据,并将数据显示在LCD1602液晶屏的第二行上。

整体实验原理就是通过DHT11传感器获取环境的温湿度数据,并通过单片机控制LCD1602液晶屏显示这些数据,实现一个简单的温湿度监测系统。

【实验记录与结果分析】

电路原理图:

程序代码

代码:

#include<reg51.h>

#include<intrins.h>

#include<LCD1602.h>

#define uchar unsigned char

#define uint unsigned int

sbit Data=P3^6; 

uchar rec_dat[9]; 

bit fg=1;

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 R_H,R_L,T_H,T_L,RH,RL,TH,TL,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/10);

        rec_dat[1]='0'+(RH%10);

        rec_dat[2]='R';

        rec_dat[3]='H';

        rec_dat[4]=' ';

        rec_dat[5]=' ';

        rec_dat[6]='0'+(TH/10);

        rec_dat[7]='0'+(TH%10);

        rec_dat[8]=0xdf;

              rec_dat[9]=0x43;

    }

}

void main()  

{  

       LCD_init();

       LCD_send(1,0,"TEMP&HUM:",9);

  DHT11_delay_ms(100);   

      

       while(1)  

       {  

              DHT11_receive();

              LCD_send(2,0,rec_dat,10);

       }  

      

}  

【实验小结】

根据上述代码,这段程序实现了通过DHT11传感器测量温湿度数据,并将数据通过LCD1602显示出来。整体流程如下:

1.初始化LCD1602,显示"TEMP&HUM:"提示信息。

2.延时等待DHT11传感器初始化完成。

3.进入主循环,不断执行以下操作:

调用`DHT11_receive()`函数获取DHT11传感器采集的温湿度数据。

将获取的温湿度数据存储在`rec_dat`数组中。

将温湿度数据通过LCD1602显示出来。

在`DHT11_receive()`函数中:

发送起始信号,开始DHT11传感器数据采集。

判断DHT11传感器是否正确响应,若响应正常则继续接收数据。

通过调用`DHT11_rec_byte()`函数,逐位接收40位数据,包括相对湿度的高低位、温度的高低位和校验位。

对接收到的数据进行校验,如果校验通过则将温湿度数据存储在`RH`、`RL`、`TH`、`TL`变量中。

将温湿度数据转换为字符形式存储在`rec_dat`数组中,用于LCD1602显示。

实验小结:

通过这段代码,我成功实现了DHT11传感器与单片机的连接和数据采集,并通过LCD1602显示出获取的温湿度数据。这个实验展示了如何使用传感器获取环境数据,并通过外设显示模块展示给用户,为后续基于传感器的应用开发奠定了基础。在以后的实验中,可以进一步扩展功能,比如添加温湿度数据的记录和存储,或者实现数据的远程传输等。

  • 34
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值