找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3144|回复: 0
打印 上一主题 下一主题
收起左侧

基于51单片机实现实时测量温湿度以及距离显示

[复制链接]
跳转到指定楼层
楼主
ID:457999 发表于 2019-12-26 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、整体介绍
实时监测空气中的温度与湿度,测试范围内的距离,在LCD1602液晶显示器上面显示温度湿度,时间,在数码管上面显示距离。
使用了DTH11温湿度模块,LCD1602模块,DS1302模块,HC-SR04超声波模块,蜂鸣器,数码管。
硬件:基于KST-51开发板,芯片是STC89C52RC
软件:keil编译器,stc下载工具
二、项目硬件介绍
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度 湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。

DS1302模块内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式

HC-SR04超声波模块:
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
     (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
DS1302模块:VCC--à+5v   GND--àGND    CLK--àP1^7   DAT--àP3^4   RST--àP3^5
HC-SR04超声波模块: VCC--à+5v  GND--àGND   TRIG--àP2^0    ECHO--àP2^1
DHT11模块: VCC--à+5v  GND--àGND    OUT--àP3^0
三、软件介绍
DHT11模块:
  
unsigned char DHT11_rec_byte(){
  
         unsigned  char i,dat=0;
  
   for(i=0;i<8;i++)    //从高到低依次接收8位数据
  
    {         
  
      while(!Data);   ////等待50us低电平过去
  
      DHT11_delay_us(8);     //延时60us,如果还为高则数据为1,否则为0
  
      dat<<=1;           //移位使正确接收8位数据,数据为0时直接移位
  
      if(Data==1)    //数据为1时,使dat1来接收数据1
  
         dat+=1;
  
      while(Data);  //等待数据线拉低   
  
     }  
  
     return dat;
  
}
  
  
unsigned char* DHT11_receive(){
  
                   unsigned  char rec_dat[9];
  
           unsigned char  R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  
  
                   Data=1;
  
     DHT11_delay_us(2);
  
     Data=0;
  
     DHT11_delay_ms(20);   //延时18ms以上
  
     Data=1;
  
     DHT11_delay_us(30);
  
  
     if(Data==0)
  
     {
  
        while(Data==0);   //等待拉高     
  
        DHT11_delay_us(40);  //拉高后延时80us
  
        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]='C';
  
     }
  
                   return  rec_dat;
  
}
  


DS1302模块
  
//用单次写操作向寄存器写入一个字节
  
void DS1302SingleWrite(unsigned  char reg, unsigned char dat)
  
{
  
         DS1302_CE  = 1;        //使能片选信号
  
         DS1302ByteWrite((reg<<1)  | 0x80);        //发送写寄存器指令
  
         DS1302ByteWrite(dat);            //写入字节数据
  
         DS1302_CE  = 0;
  
}
  
  
//用单次读操作从某一寄存器读取一个字节
  
unsigned char  DS1302SingleRead(unsigned char reg)
  
{
  
         unsigned  char dat;
  
  
         DS1302_CE  = 1;
  
         DS1302ByteWrite((reg<<1)  | 0x81);                 //发送读寄存器指令
  
         dat  = DS1302ByteRead();                   //读取字节数据
  
         DS1302_CE  = 0;
  
  
         return  dat;
  
}
  

HC-SR04超声波模块:
  
                                     init_time();  //初始化定时器
  
        flag = 0;    //置溢出标志位为0
  
        //控制口发一个10US 以上的高电平
  
        TRIG = 1;   
  
        delay(3);
  
        TRIG = 0;
  
        //等待接收端出现高电平
  
        while(!ECHO);
  
        TR0 = 1; //启动计时器 开始计时
  
        while(ECHO); //等待高电平结束
  
        TR0 = 0; //关闭低电平
  
  
        out_TH0 = TH0; //取定时器的值
  
        out_TL0 = TL0;
  
        out_TH0 <<= 8;  //右移8
  
        distance = out_TH0 | out_TL0; //合并为16位的值  
  
        distance *= 0.017;
  
  
        if(flag == 1) //如果定时器溢出  则超出超声波测量范围
  
        {
  
            display(-1);
  
            flag = 0;
  
        }
  
        else
  
        {
  
            for(y =5; y >=0; y--)//加此循环只是为了将结果在数码管上停留时间长点便于观察
  
            {
  
                display(distance);
  
            }
  
        }
  
        delay(1000);//60ms的周期,这里不是6ms,太多会闪烁。
  


项目.rar

75.01 KB, 下载次数: 18, 下载积分: 黑币 -5

源码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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