基于51单片机温湿度传感器
DHT11 温湿度传感器
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通
空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制
- 相对湿度和温度测量
- 全部校准,数字输出
- 长期稳定性
- 超长的信号传输距离:20米
- 超低能耗:休眠
- 4 引脚安装:可以买封装好的
- 完全互换 : 直接出结果,不用转化
接线
三根线,一根VCC,一根GND,一根信号线。
信号线接到单片机P1~P4随意一个端口即可。(我接的P1.0)
VCC——电源
GND——接地
数据传送逻辑
只有一根数据线DATA,单片机发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出
数据格式
8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和通讯过程时序图
初始化时序
根据如下时序图,做通信初始化,并检测模块是否存在,功能是否正常
依次给信号线这样的高低电平即可。
深黑色是自己配置
灰色不用管是模块自己变化
初始化之后就可以读取模块传来的温度和湿度了,模块传来的是01信号,有独特的判断方式,判断传来的是0还是1,看下面的01时序
‘0’时序*
‘1’时序
代码实现
掌握了,如何初始化,如何判别模块传来的数据,即可编程实现。
我用串口来显示得到的数据。
不懂串口,可以看我之前写的串口文章:传送门
也可以用LCD1602来显示,传送门
或者数码管等。
main.c
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#include "Serial.h"sbit led = P3^7; //led小灯用来方便判断的显示灯
sbit dht0 = P1^0; //温湿度传感器信号线
char flag = 1; //后面用到的条件判断变量
char dat[4]; //数组分别代表,湿度,湿度小数,温度,温度小数,校验
char temp[10]; //显示到串口的字符//ms延时
void delay(unsigned int ms) //@11.0592MHz
{ unsigned int i;unsigned int j;for(i=0;i<ms;i++)for(j=0;j<115;j++);
}//40us延时
void Delay40us() //@11.0592MHz
{unsigned char i;_nop_();i = 15;while (--i);
}//初始化模块(检测模块是否存在)每次传输数据都要初始化
void Check_DHT()
{//根据时序进行高低电平变化led = 1; //小灯灭dht0 = 1; //对应初始化时序startdht0 = 0;delay(30);dht0 = 1;while(dht0);while(!dht0);while(dht0); //endled = 0; //小灯亮,初始化成功
}void Read_DHT()
{char value = 0;char tmp;char i = 0;char j = 0;Check_DHT();for(j = 0;j<5;j++){ //分别读取五组数据for(i=0;i<8;i++){ //每组八位分别处理while(!dht0); //高电平开始计时Delay40us();if(dht0 == 1){ //如果还为高则是“1”tmp = 1;while(dht0);}else{ //否则“0”tmp = 0;}value = value << 1; //移位value |= tmp; //赋值}dat[j] = value; //赋值}
}//数据转换
void Operate_Value(char i) //0-1为湿度,2-3为温度
{switch(i){case 0:case 1: i = 0;temp[0] = 'H';break;case 2:case 3:i = 2;temp[0] = 'T';break;}temp[1] = dat[i]/10 + 0x30;temp[2] = dat[i]%10 + 0x30;temp[3] = '.';temp[4] = dat[i+1]/10 + 0x30;temp[5] = dat[i+1]%10 + 0x30;temp[6] = '%';temp[7] = '\r';temp[8] = '\n';temp[9] = '\0';
}void main()
{ delay(2000);Init_Serial();while(1){Read_DHT();Operate_Value(0);//湿度SendString(temp);Operate_Value(2);//温度SendString(temp);delay(1000);}
}
Serial.h
#ifndef _SERIAL_H_
#define _SERIAL_H_void Init_Serial();void SendByte(char dat);void SendString(char *dat);//void ClearString();//char *RecvString();#endif
Serial.c
#include <reg51.h>
#include <string.h>
#include "Serial.h"char Serial_Str[12] = {'\0'};static int Serial_i = 0;//char Serial_Recv_Flag = 0;
//初始化串口
void Init_Serial()
{TMOD = 0x20; //定时器1,模式8位重装PCON = 0x80; //波特率加倍SCON = 0x50; //串口模式1,可以接受消息TH1 = 0xFA; //9600波特率TL0 = 0xFA;TR1 = 1; //开启定时器1ES = 1; //开启串口中断EA = 1; //开启总中断
}void SendByte(char dat) //发送一位数据
{SBUF = dat;while(!TI);TI = 0;
}void SendString(char *dat) //发送字符串
{ while(*dat != '\0'){SendByte(*dat);dat++;}
}//char *RecvString() //接受字符串
//{// while(!Serial_Recv_Flag);
// Serial_Recv_Flag = 0;
// return Serial_Str;
//}//void ClearString()
//{// memset(Serial_Str,'\0',12);
// Serial_i = 0;
//}void Serial_Operate() interrupt 4
{if(TI);if(RI){RI = 0;Serial_Str[Serial_i++] = SBUF;if(Serial_Str[Serial_i-1] == '\0'){// Serial_Recv_Flag = 1;SendString(Serial_Str);memset(Serial_Str,'\0',12);Serial_i = 0;}if(Serial_i == 12) Serial_i = 0;}
}
执行结果
可以完美检测出来。
结束
如果对你有帮助,点赞支持一下吧
转载联系作者。
基于51单片机温湿度传感器相关推荐
- 基于51单片机霍尔传感器测速(仿真+源程序)
资料编号:196 下面是该资料仿真演示视频: 196-基于51单片机霍尔传感器测速(仿真+源程序+全套资料) 功能简介: 51单片机计数测速转速测量,在仿真中等价于测量外部脉冲频率:如果修改输入脉冲 ...
- 单片机课程设计——基于51单片机温湿度检测系统的设计与实现
本文主要介绍了怎么使用51单片机最小系统板和温湿度传感器制作一个温湿度检测系统. 本次设计主要涉及了温湿度的测量.显示以及实现简单控制.硬件方面有五个模块,即STC89C52单片机主控模块.传感器模块 ...
- 119、基于51单片机温湿度光照强度仿真设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 一.硬件电路组成 二.功能 三.电脑开发环境 四.Protues仿真 五.程序 六.资料包括 一.硬件电路组成 51最小系统+51单片机+Lcd16 ...
- 基于51单片机温湿度检测采集系统无线蓝牙APP上传方案原理图设计
硬件电路的设计 (附文件) 系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+DHT11温湿度传感器店里了+蓝牙电路+电源电路组成. 1.通过单片机采集DHT1 ...
- T045基于51单片机温湿度检测系统无线蓝牙传输Proteus仿真原理图PCB
功能: 0.本项目采用STC89C52作为单片机系统的控制MCU 1.系统内采用DHT11作为湿度传感器,支持温湿度检测上传 2.系统具备无线蓝牙模块,支持定时循环发送手机端当前的温湿度状态 3.采用 ...
- 9.基于51单片机酒精传感器
目录 一,酒精传感器用途 二,酒精传感器的工作原理 特点 主要应用 三,AD转换器<
- 基于51单片机温湿度报警器设计数码管显示实训开发
视频演示:https://www.bilibili.com/video/BV1QV411s7rr/ 功能说明: 打开仿真后数码管会显示测量出来的温湿度值. 程序一直会显示检测结果. 默认报警开关是关闭 ...
- 基于51单片机温湿度报警器设计LCD12864液晶仿真制作实训
演示视频:https://www.bilibili.com/video/BV1yk4y1q7AC/ 将链接复制至IE浏览器打开!!! 功能说明: 打开仿真文件后液晶显示当前温度和湿度,如果温度或者湿度 ...
- 基于51单片机温湿度报警器设计LCD1602液晶仿真实训开发智能学习资料
视频演示:https://www.bilibili.com/video/BV1H44y1z7sN/ 功能说明: 打开仿真文件后液晶显示当前温度和湿度,如果温度或者湿度在正常范围内不会报警. 否则蜂鸣器 ...
最新文章
- python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (
- Docker实战9 之Dockerfile深入实践
- 【经验】CentOS 5.2 下用Yum安装Apache+PHP+MySQL环境
- 连接没反应_显示器USB接口的作用是什么?为什么会没有反应?
- [ant]通过Android命令自动编译出build.xml文件
- Windows 2008上安装VS2008SP1时的怪异错误
- codeforces 1073E
- C#实现浮动和多标签窗体解决方案---使用Dockpanel
- visual studio怎么让button一直生效_民用建设工程设计合同怎么生效
- servlet和springMVC框架
- SQL Server如何备份数据库
- DataFormatString格式字符串
- 市面上大部分渗透工具下载
- Java中的跨站请求伪造
- Github实用浏览器插件推荐
- python填充三角形颜色_python的pillow用ImageDraw.Draw.polygon如何填充半透明的颜色
- 二叉树基础题(五):二叉树的下一个节点最低公共祖先节点
- 详细解读Latent Diffusion Models:原理和代码
- Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋
- 华为模拟器eNSP防火墙向导配置
热门文章
- JavaScript控制元素(标签)的显示与隐藏
- Spring boot+Shiro+ spring MVC+swagger UI +Mybatis+mysql+Vue +Element UI 之二 vue 环境演示
- 20170114经济学人封面文章Lifelong Learning
- 动量将是策略-产生的原因、计算公式及交易策略和考虑因素
- Github 高级搜索指南
- 让锐捷客户端在linux平台飞
- iOS:你会如何设计一个框架,给别人使用!
- 2018新秀杯a城轨司机调度_《城市轨道交通信号与通信系统》期末考试试卷(A卷)...
- 虚拟化服务器查看密码策略,VMWare虚拟化管理员平台管理手册.docx
- 联想万全t260磁盘阵列_联想万全T168服务器板载Sata raid系统设置图解