DHT11温度检测系统

DHT11温湿度传感器

  1. 产品概述

    DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制

    在这里插入图片描述

  2. 特点

    • 相对湿度和温度测量
    • 全部校准,数字输出 长期稳定性
    • 超长的信号传输距离:20米
    • 超低能耗:休眠
    • 4 引脚安装:可以买封装好的
    • 完全互换 : 直接出结果,不用转
  3. 接线

    在这里插入图片描述

  4. 数据传送逻辑

    只有一根数据线DATA,上官一号发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出。

  5. 数据格式

    8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和通讯过程时序图。

    在这里插入图片描述

检测模块是否存在

根据如下时序图,做通信初始化,并检测模块是否存在,功能是否正常。

在这里插入图片描述

时序逻辑分析:

a : dht = 1
b :dht = 0
延时30ms
c: dht = 160us后读d点,如果d点是低电平(被模块拉低),说明模块存在!

代码实现

#include "reg52.h"
#include "intrins.h"sbit led1 = P3^7;
sbit dht = P3^3;//温度传感器void Delay30ms()		//@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{while (--j);} while (--i);
}
void Delay60us()		//@11.0592MHz
{unsigned char i;i = 25;while (--i);
}
void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void check()
{//a : dht = 1dht = 1;//b :dht = 0dht = 0;//延时30msDelay30ms();//c: dht = 1dht = 1;//在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!Delay60us();if(dht == 0){led1 = 0;//小灯亮}
}
void main()
{led1 = 1;Delay1000ms();Delay1000ms();check();while(1);
}

DHT11模块检测温湿度

在这里插入图片描述

DHT11传输0的时序分析

在这里插入图片描述

DHT11传输1的时序分析

在这里插入图片描述

代码实现

#include "reg52.h"
#include "intrins.h"#define BUFF P0sfr AUXR = 0x8E;
sbit led1 = P3^7;//根据原理图(电路图),设备变量led1指向P3组IO口的第7口
sbit dht = P3^3;//温度传感器
/*
控制线接口:
RS -- P1.0
RW -- P1.1
E -- P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;char datas[5] = 0;
void Delay30ms()		//@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{while (--j);} while (--i);
}
void Delay60us()		//@11.0592MHz
{unsigned char i;i = 25;while (--i);
}
void Delay40us()		//@11.0592MHz
{unsigned char i;_nop_();i = 15;while (--i);
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}
void Delay15ms()		//@11.0592MHz
{unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i);
}
void Delay5ms()		//@11.0592MHz
{unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i);
}
void DHT11_start()//启动DHT11模块开始检测
{dht = 1;dht = 0;//延时30msDelay30ms();dht = 1;//卡d点;while(dht); 卡e点 while(!dht) 卡f点:while(dht) while(dht);while(!dht);while(dht);
}
void get_Data()
{int i;int j;char tmp;char flag;DHT11_start();//每次检测得到40bit数据后都要再启动一次for(i=0;i<5;i++){for(j=0;j<8;j++){//卡g点:while(!dht) while(!dht);//有效数据都是高电平,持续时间不一样,40us读,低电平数据为0 高电平数据为1Delay40us();if(dht == 1){flag = 1;while(dht);}else{flag = 0;}tmp <<= 1;tmp |= flag;}datas[i] = tmp;}
}
void UartInit(void)		//9600bps@11.0592MHz
{AUXR = 0x01;//提升系统EMI性能PCON = 0x00;//SMOD0 = 0时SCON中的SM0,和SM1一起指定串行口的工作方式SCON = 0x40;//串口工作方式1,且REN=0,禁止串口接收TMOD &= 0x0F;TMOD |= 0x20;//定时器1的工作方式8位自动重装TH1 = 0xFD;TL1 = 0xFD;//9600bps的TH1初值TR1 = 1;//启动定时器
}
void send_byte(char data_msg)
{SBUF = data_msg;while(!TI);TI = 0;
}
void send_str(char* data_msg)
{while(*data_msg != '\0'){send_byte(*data_msg);data_msg++;}
}
void check_busy()//每次写指令,读/写数据操作均需要检测忙信号
{char tmp = 0x80;BUFF = 0x80;while(tmp & 0x80){RS = 0;RW = 1;EN = 0;_nop_();EN = 1;_nop_();tmp = BUFF;_nop_();_nop_();EN = 0;_nop_();}
}
void Write_cmd(char cmd)//写指令
{check_busy();RS = 0;RW = 0;EN = 0;_nop_();BUFF = cmd;_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_();
}
void Write_data(char _data)//写数据
{check_busy();RS = 1;RW = 0;EN = 0;_nop_();BUFF = _data;_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_();
}
void LCD1602_init()//模块初始化
{//(1)延时 15msDelay15ms();//(2)写指令 38H(不检测忙信号)Write_cmd(0x38);//(3)延时 5msDelay5ms();//(4)以后每次写指令,读/写数据操作均需要检测忙信号//(5)写指令 38H:显示模式设置Write_cmd(0x38);//(6)写指令 08H:显示关闭Write_cmd(0x08);//(7)写指令 01H:显示清屏Write_cmd(0x01);//(8)写指令 06H:显示光标移动设置Write_cmd(0x06);//(9)写指令 0CH:显示开及光标设置Write_cmd(0x0c);}
void LCD1602_print_line(char line,char col,char *string)//写入一行数据
{switch(line){//switch选择那一行case 1:Write_cmd(0x80+col);//col 决定从哪个地方开始while(*string){Write_data(*string);string++;}break;case 2:Write_cmd(0x80+0x40+col);while(*string){Write_data(*string);string++;}break;}
}
void main()
{led1 = 1;UartInit();Delay1000ms();Delay1000ms();while(1){Delay1000ms();get_Data();send_str("Wet:");//数字加上0x30,装变成对应的字符send_byte(datas[0]/10 + 0x30);//湿度十位send_byte(datas[0]%10 + 0x30);//湿度个位send_byte('.');send_byte(datas[1]/10 + 0x30);//小数位send_byte(datas[1]%10 + 0x30);send_str("\r\n");send_str("Tem:");send_byte(datas[2]/10 + 0x30);//温度十位send_byte(datas[2]%10 + 0x30);//温度个位send_byte('.');send_byte(datas[3]/10 + 0x30);//小数位send_byte(datas[3]%10 + 0x30);send_str("\r\n");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/600575.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 11 上的文件读写无权限问题

Android 6以上需要动态申请读写权限&#xff0c;但是11以上动态申请了读写权限也是无效。并且手动给予权限没有该按钮。 如上图华为钱包有个所有文件权限、但是百度地图只有仅媒体权限&#xff0c;仅媒体权限&#xff08;动态申请读写权限&#xff09;给予后软件还是没法访问文…

飞书文档如何在不同账号间迁移

今天由于个人需要新建了一个飞书账号&#xff0c;遇到个需求就是需要把老帐号里面的文档迁移到新的账号里面。在网上搜了一通&#xff0c;发现关于此的内容似乎不多&#xff0c;只好自己动手解决&#xff0c;记录一下过程以便分享&#xff0c;主要有以下几个步骤。 1. 添加新账…

【Vue】实现仿微信输入@出现选择框

<div style"padding: 10px 10px" class"editor"><el-inputresizetype"textarea":rows"4"clearableplaceholder"请输入您的问题.."v-model"requestParams.prompt"input"handleInput"keydown.na…

面试题:ConcurrentHashMap

ConcurrentHashMap 是一种线程安全的高效Map集合 底层数据结构&#xff1a; JDK1.7底层采用分段的数组链表实现 JDK1.8 采用的数据结构跟HashMap1.8的结构一样&#xff0c;数组链表/红黑二叉树。 1. JDK1.7 数据结构 提供了一个segment数组&#xff0c;在初始化Concurre…

Linux使用宝塔面板部署Discuz结合内网穿透实现公网访问本地论坛

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

柯桥外语培训之【韩语干货】如何用韩语作简单自我介绍

안녕하세요! 意思是“您好”“你好”&#xff0c;这是最常用的问候语&#xff0c;正式场合可以使用“안녕하십니까?" 제 이름은 [你的名字]이고, [你的年龄] 살입니다. 意思是“我的名字是~&#xff0c;~岁了”&#xff0c;这是比较谦虚的自我介绍方式 介绍自己的名字…

微信小程序开发学习笔记——4.8【小案例】初识wx.request获取网络请求并渲染至页面

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;4.8.【小案例】初识wx.request获取网络请求并渲染至页面_哔哩哔哩_bilibili up主提供的网络请求常用接口&#xff1a; 随机猫咪&#xff0c;用来获取一些…

git操作码云(gitee)创建仓库到上传到远程仓库

想必有的小伙伴在为上传到码云远程仓库而感到烦恼吧&#xff01;本篇为大家详细讲解实现过程&#xff0c;跟着我的步伐一步一步来。 我就当大家已经注册好了码云 一、在码云上需要的操作 接下来我们需要使用到 git 了 二、git 上的操作 到了咋们的git了&#xff0c;开整 首…

创建真实项目vue2项目

1. 创建 vue create 项目名 2. 选择自定义 3. 勾选以下必备选项 4.选择使用vue2 5. 选择哈希模式&#xff08;n&#xff09;; css选择Less 6. ESLint校验 选择 7. 保存&#xff08;按照默认&#xff09; 8. 在哪里添加ESLint文件 9. 要不要把这个改成将来的预设&am…

HIDS是什么,如何保护主机系统

随着网络安全攻防对抗的日趋激烈&#xff0c;主机当前企业和组织的安全运营工作面临的挑战越来越突出&#xff0c;外网防护的同时&#xff0c;内网主机安全防护也越来越重要。 HIDS(Host-based Intrusion Detection System)&#xff0c;是基于主机型入侵检测系统的简称。作为计…

【201】Java8读取JSON树形结构并插入到MySQL数据库表中

我写了一个 maven 项目的 Demo&#xff0c;用来演示 JAVA8 如何读取 JSON 文件树形结构&#xff0c;并将这种树形结构保存到 MySQL 中。 json文件 city.json {"name": "山东省","sub": [{"name": "青岛市","sub"…

mysql的索引类型与数据存储

mysql索引与类型 什么是索引&#xff1f; 索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。我们可以简单理解为&#xff1a;快速查找排好序的一种数据结构。Mysql索引主要有两种结构&#xff1a;BTree索引和Hash索引。我们平常所说的索引&#xff0c;如…