DHT11温湿度传感器

DHT11.h

#ifndef __DHT11_H__
#define __DHT11_H__#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endif
#include <reg52.h>
#include <intrins.h>//IO口定义
sbit OUT = P2^7;//函数声明
void RH( uchar *s );
void Delay(uint x);//声明外部函数
extern void Uart_send_str(char *str, int len);
extern void Uart1Init();
//extern void Uart_send(char str);#endif

DHT11.c

/******************************************************************/
/*      平台:Keil U4 + DHT11温湿度模块                           */
/*      名称:通过串口显示温湿度                               */
/*      编写:WCT                                                 */
/*      日期:2019年1月22日16:57:18                                  */
/*      QQ:  497950600                                         */
/*      晶振:11.0592MHZ                                          */
/*      变更记录:无                                             */
/******************************************************************/
#include "DHT11.h"/**************/
/*   定义区   */
/**************/
uchar U8FLAG;
uchar U8count, U8temp;
uchar U8T_data_H_temp, U8T_data_L_temp, U8RH_data_H_temp, U8RH_data_L_temp, U8checkdata_temp;
uchar U8comdata;
uchar count = 0, count_r = 0;
uint U16temp1, U16temp2;void Delay(uint x)
{  //x = 1, 约 20usuchar i;for( ; x > 0; x --){for(i = 0;i < 29; i ++);}
}void Delay_10us()
{uchar i;i = 25;while( -- i );
}//void Delay(unsigned int x)       //@11.0592MHz 延时1ms
//{//  while(x--)
//  {//      unsigned char i, j;
//      _nop_();
//      i = 11;
//      j = 190;
//      do
//      {//          while (--j);
//      } while (--i);
//  }
//}
//void Delay_10us()     //@11.0592MHz
//{//  unsigned char i;
//
//  _nop_();
//  _nop_();
//  _nop_();
//  i = 24;
//  while (--i);
//}/****************************/
/*      字节读取函数        */
/* 湿度数据和温度数据的读取 */
/****************************/
void COM()
{uchar i;for(i = 0; i < 8; i ++){U8FLAG = 2;while((!OUT) && U8FLAG ++ ); //等待数据出现Delay_10us();Delay_10us();Delay_10us();U8temp = 0;//判断数据位是0还是1//如果高电平高过预定0高电平则数据位为1if( OUT ) //高电平持续大于28us{U8temp = 1;}U8FLAG = 2;while( ( OUT ) && U8FLAG ++);//超时则跳出for循环if( U8FLAG == 1){break;}U8comdata <<= 1;U8comdata |= U8temp;}
}/***************************************/
/*      温湿度读取子程序               */
/***************************************/
void RH( uchar *s )
{//主机拉低至少18msOUT = 0;Delay(900);//主机发送完开始信号,拉高20-40usOUT = 1;Delay(2);//主机设为输入 判断从机响应信号OUT = 1;//判断从机是否有低电平响应信号if( ! OUT ){U8FLAG = 2;//判断从机发出 80us 的低电平信号是否结束while( ( !OUT ) && U8FLAG ++ );U8FLAG = 2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while( OUT && U8FLAG ++ );//数据接收状态COM();U8RH_data_H_temp = U8comdata;COM();U8RH_data_L_temp = U8comdata;COM();U8T_data_H_temp = U8comdata;COM();U8T_data_L_temp = U8comdata;COM();U8checkdata_temp = U8comdata;OUT = 1;//数据校验U8temp =( U8T_data_H_temp + U8T_data_L_temp + U8RH_data_H_temp + U8RH_data_L_temp );if( U8temp == U8checkdata_temp ){s[0] = U8RH_data_H_temp; //---湿度高8位--整数部分s[1] = U8RH_data_L_temp; //---湿度低8位--小数部分s[2] = U8T_data_H_temp;  //---温度高8位--整数部分s[3] = U8T_data_L_temp;  //---温度低8位--小数部分s[4] = U8checkdata_temp; //---校验字节}}
}

uart.c

/**********************************************/
/*          平台:Keil U4 + STC12C5A60S       */
/*          名称:串口通信                    */
/*          编写:WCT                         */
/*          日期:2019年1月21日18:43:49          */
/*          QQ: 497950600                      */
/*          晶振:11.0592MHZ                  */
/*          变更记录: 无                    */
/**********************************************/#include <reg52.h>#define F_f 11059200UL   //晶振频率11.0692MHZ
#define Baud_rate 9600UL //波特率9600sfr AUXR = 0x8E; //定义特殊功能寄存器AUXR
sfr BRT = 0x9C;     //定义独立波特率发生寄存器BRTvoid Uart_send_str(unsigned char *str, int len)
{int i;for(i = 0; i < len; i ++ ){SBUF = str[i];while( !TI ); //等待发送完成TI = 0;     //清除发送中断请求}
}//void Uart_send(char str)
//{//  SBUF = str;
//  while( !TI ); //等待发送完成
//  TI = 0;      //清除发送中断请求
//}void Uart1Init()
{PCON &= 0x7F; // 波特率不加倍SCON = 0x50;  // 设置串行通信工作方式1,并允许串行接受AUXR &= 0xFB; // 独立波特率发生器时钟12TBRT = 256 - F_f / (12 * Baud_rate * 32); //独立波特率发生器装载初值AUXR |= 0x11; // 允许独立波特率发生器作为串口波特率发生器,并开启EA = 1;         // 开启总中断ES = 1;        // 开启串行中断
}//UART中断处理函数
void Uart1Routine() interrupt 4
{unsigned char uart_sbuf;if(RI) //接受完成RI = 1;{uart_sbuf = SBUF;if(uart_sbuf == 0xaa ){Uart_send_str("ok", 2);}RI = 0;     //清除接受中断请求}
}

LED_show.c

/*************************************************/
/*      平台:Keil U4 + STC12C5A60S2            */
/*      名称:LED显示数据 + 串口显示            */
/*      编写:WCT                                */
/*      日期:2019年1月23日13:39:14                 */
/*      QQ:  497950600                            */
/*      晶振:11.0592                            */
/*      变更记录:无                            */
/*************************************************/
#include <reg52.h>
#include <stdio.h>
#include "DHT11.h"sfr AUXR = 0x8e;//定义位选
sbit ASEG = P1^2;
sbit BSEG = P1^3;
sbit CSEG = P1^4;
sbit DSEG = P1^5;uchar code smgduan[]=     //共阴数码管显示0~F的值
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar showdata[4] = { 0 }; //用于显示数据
uchar outdata[6] = { "RS232" }; //定义发送字节数
uchar out[30] = { 0 };void seg4show( uchar i )
{switch( i ){case 0:ASEG = 0; BSEG = 1; CSEG = 1; DSEG = 1; break;case 1:ASEG = 1; BSEG = 0; CSEG = 1; DSEG = 1; break;case 2:ASEG = 1; BSEG = 1; CSEG = 0; DSEG = 1; break;case 3:ASEG = 1; BSEG = 1; CSEG = 1; DSEG = 0; break;default:ASEG = 1; BSEG = 1; CSEG = 1; DSEG = 1; break;}P0 = showdata[i];
//  Delay(10);
//
}void dataProcess()
{showdata[0] = smgduan[ outdata[0] / 10 ];showdata[1] = smgduan[ outdata[0] % 10 ];showdata[2] = smgduan[ outdata[2] / 10 ];showdata[3] = smgduan[ outdata[2] % 10 ];
}void timer0_init()
{AUXR &= 0x7f; //12TTMOD |= 0x02; //方式2 8位自动重装载TH0 = 0x48; //200usTL0 = 0x48;EA = 1; //开启总中断允许ET0 = 1; //开启定时器中断允许TF0 = 0; //消除TF0标志TR0 = 1; //开启定时
}void main()
{Uart1Init();timer0_init();
//  Uart_send_str(outdata);
//  Uart_send_str("\n"2);Delay(5000); //延时1Swhile(1){RH(outdata); //调用温湿度读取函数dataProcess(); //数据处理sprintf(out, "湿度:%d%%, 温度:%d℃\n", (int)(outdata[0]), (int)(outdata[2]));
//      Uart_send_str(out);//调用串口发送函数//读取模块数据周期不小于 2SDelay(50000);Delay(50000);}
}void timer0_Routine() interrupt 1
{static uchar i;seg4show( i / 5 );i ++;if( i % 10 == 0 ) {P0 = 0x00;}i = i % 20;}

stc12c5a60s DHT11温湿度传感器相关推荐

  1. Esp8266 进阶之路19 【外设篇①】esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  2. ESP32 开发笔记(三)源码示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器

    开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...

  3. Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据

    如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 目标 Android手机HC-05蓝牙连接Arduino nano获取DHT-11温 ...

  4. 个人物联网(目前用到了树莓派、PMS7003攀藤g7传感器、DHT11温湿度传感器)

    上周空气不好,突发奇想要搞个个人物联网系统,检测生存环境.手头有树莓派.NodeMCU esp8266.DHT11温湿度传感器.pm2.5检测需要专门的传感器,本以为也就几块钱,结果发现淘宝还挺贵.在 ...

  5. 传感器自学笔记第八章——DHT11温湿度传感器(附带自己写的很好用的51单片机DHT11代码模板,参数列表只有一个字符数组指针)

    作者:GWD 时间:2019.06.26 DHT11温湿度传感器(单总线类) 一. 学习要点: 1.(重要)单总线类传感器检测高电平while(DHT11 == 1) temp |=0x01;出错,因 ...

  6. 51单片机控制DHT11温湿度传感器,并使用OLED屏幕显示

    目录 前言 一.MCU主控选型 二.DHT11温湿度传感器 1.模块介绍 2.软件实现 DHT11.c DHT11.h 三.OLED显示屏 1.模块介绍 2.软件实现 OLED.c OLED.h OL ...

  7. 基于STM32的DHT11温湿度传感器设计

    文章目录 前言 一.DHT11温湿度传感器是什么? 二.DHT11驱动程序详解 1.相关宏定义 2.输入输出GPIO配置 2.GPIO初始化设计 3.检测DHT11是否正常工作 4.读取DHT11数据 ...

  8. 《Arduino实验》实验二:DHT11温湿度传感器检测当前环境温湿度

    更完整.更全面的Arduino实验存放在我的github上,有需要的可以到github上查看和下载. 当然如果你觉得有帮助,给一个小小的star和fork就谢谢您了. gtihub网址:https:/ ...

  9. DHT11温湿度传感器(详细)

    DHT11温湿度传感器--使用LCD1602显示 先上效果图,以及简单的和室内温度对比图,相交而言测量的值还是非常准的. 我的这个做的很简陋,大家可以理解原理后自行升级. 注意学习单片机最重要的就是学 ...

最新文章

  1. python软件是免费的吗-python软件都是免费的吗
  2. 使用Java读取 “Python写入redis” 的数据踩坑记录
  3. java mapreduce 标准差_MapReduce设计模式之概要设计模式
  4. WebSocket webshop后台服务器的一些全局数据结构
  5. c语言如何判断数据是否符合正态分布_统计学里的数据正态性检验
  6. 程序员保持身心健康的八种方式
  7. C#实现外部图片的拖拽到应用程序的简单功能,附全部源码,供有需要的参考...
  8. Linux系统平均负载3个数字的含义
  9. windows下MongoDB数据库的安装
  10. java启动mysq服务_启动和关闭MySQL服务
  11. 基于ELMO Composer的MAXON RE40电机增益调节
  12. android 可拖拽控件,安卓实现任意控件view可拖拽,并监听拖拽和点击事件,可自动拉回屏幕边缘...
  13. 2012移动互联网之人在囧途
  14. 逻辑结构定义及其分类
  15. HCNP——DR和BDR的概念
  16. Vue-Watcher观察者源码详解
  17. 计算机主板知识,电脑硬件及电脑配置知识大全-主板知识
  18. 漂亮的红色玫瑰花——情人节-圣诞节专属-代码实现
  19. 电磁兼容试验项目之谐波电流试验
  20. Java JDBC https://www.bilibili.com/video/BV1PE411i7CV?p=31spm_id_from=pageDriver

热门文章

  1. 全志平台boot框架中增加设备驱动过程分析
  2. 案例:基于RMF的用户价值度分析
  3. 活动排期php开源,PHP-php实现排期的高效算法
  4. 超级 POM,POM的层级关系
  5. 大数据商机VS个人隐私 车联网的攻与守
  6. GWAs——全基因组关联分析流程
  7. 怎样将pdf压缩得很小?如何把pdf压缩到最小?怎么把pdf压缩到最小?如何把pdf文档压缩变小?怎么将pdf文档压缩至更小?怎么把pdf压缩到最小方法软件网站有哪些?
  8. 数据中心交换机与普通交换机有什么不同?
  9. SI(crosstalk)对common path的影响(CPPR)
  10. matlab .opj,HRTF 3D 音效 Matlab实现