单片机+NRF2401+DHT11远程温湿度控制程序

发布者:灵感发电站最新更新时间:2020-11-21 来源: 51hei关键字:单片机  NRF2401  DHT11 手机看文章 扫描二维码
随时随地手机看文章

本设计是基于 STC89C52 单片机和 DHT11 实现温湿度的测量。单片机在本系统中作为温湿度,时钟输入和显示控制器件,DHT11 被用作温湿度数据的采集和温湿度输出器件。最后采 nRF24L01 模块对采集到的温湿度时间 数据进行无线传输,在接收端通过 LCD1602 液晶显示模块显示接收的温湿度,从而实现温湿度的采集和无线传送。

主要步骤:

1.通过查阅资料,了解无线温湿度采集系统的研究背景、国内外发展状况;

2.熟悉 LCD1602,DHT11,NRF24L01,蜂鸣器 等模块的基本功能;

3.熟悉 Keil C51 软件和 STC-ISP 软件;

4.使用 Keil C51 软件编写应用程序;

5.使用 STC-ISP 软件将编译好的程序烧写进单片机;

6.调试并分析;


制作出来的实物图如下:
IMG_20180129_113002_1_副本.jpg IMG_20180129_113032_副本.jpg 1.png 2.png

单片机源程序如下:

#include ".\nRF24L01\nRF24L01.h"

#include "def.h"

typedef unsigned char unint8;

typedef unsigned char unint16;

#define uint unsigned int

unint8 com_data,untemp,temp;

uchar  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

uchar  U8FLAG,U8comdata;

uchar  U8count,U8temp;

uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

unint8 respond;

void Delay(unsigned int s)

{

        unsigned int i;

        for(i=0; i        for(i=0; i}


/*******************************************************************************************************

                                                                                                                                                                                DHT11相关命令            

********************************************************************************************************/

void Delay1(uint j)

{  

        uchar i;

        for(;j>0;j--)

        {         

                for(i=0;i<27;i++);

        }

}


void  Delay_10us(void)

{

        uchar i;

        i--;

        i--;

        i--;

        i--;

        i--;

        i--;

}





void  COM(void)

{

        uchar i;

        for(i=0;i<8;i++)           

        {

                U8FLAG=2;        

                while((!DHT11)&&U8FLAG++);

                Delay_10us();

                Delay_10us();

                Delay_10us();

                U8temp=0;

                if(DHT11)U8temp=0;

                U8FLAG=2;

                while((DHT11)&&U8FLAG++);

                //超时则跳出for循环                  

                if(U8FLAG==0)break;

                //判断数据位是0还是1         

                // 如果高电平高过预定0高电平值则数据位为 1

                U8comdata<<=1;

                U8comdata|=U8temp;        //

        }

}

//--------------------------------

//-----湿度读取子程序 ------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位== U8T_data_H------

//----温度低8位== U8T_data_L------

//----湿度高8位== U8RH_data_H-----

//----湿度低8位== U8RH_data_L-----

//----校验 8位 == U8checkdata-----

//----调用相关子程序如下----------

//---- Delay();, Delay_10us();,COM();

//--------------------------------


void RH(void)

{

        //主机拉低18ms

        DHT11=0;

        Delay1(180);

        ET0 = 0;//关闭定时器0中断

        DHT11=1;

        //总线由上拉电阻拉高 主机延时20us

        Delay_10us();

        Delay_10us();

        Delay_10us();

        Delay_10us();

        //主机设为输入 判断从机响应信号

        DHT11=0;

        //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行         

        if(!DHT11)                 //T !         

        {

                U8FLAG=2;

                //判断从机是否发出 80us 的低电平响应信号是否结束         

                while((!DHT11)&&U8FLAG++);

                U8FLAG=2;

                //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态

                while((DHT11)&&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;

                DHT11=0;

                ET0 = 1;//开启定时器0中断

                //数据校验


                U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

                if(U8temp==U8checkdata_temp)

                {

                        U8RH_data_H=U8RH_data_H_temp;

                        U8RH_data_L=U8RH_data_L_temp;

                        U8T_data_H=U8T_data_H_temp;

                        U8T_data_L=U8T_data_L_temp;

                        U8checkdata=U8checkdata_temp;

                }//fi

        }//fi


}

        


void main(void)

{

        unsigned char leng =0;

        unsigned char tf =0;

        unsigned char TxBuf[20]={0};         //

        unsigned char RxBuf[20]={0};        

        led=0;

    init_io() ;

        while(1)

        {           

               inerDelay_us(100);

                CE=0;   // chip enable

                CSN=0;   // Spi disable

                SCK=0;   

                                RH();//温湿度检测受定时器影响,故在驱动程序中关闭定时器中断,减小扫描频率才能更好的实现红外接收

                   TxBuf[0] =U8T_data_H;

                   TxBuf[2] =U8RH_data_H;

                   tf = 0 ;

           

            SPI_RW_Reg(WRITE_REG+STATUS, 0xff);      //

            CSN=0;

            SPI_RW(FLUSH_RX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!!

            CSN=1;                 

           if (tf==0)

       {        

                led=0;

                        nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data

                        TxBuf[0] = 0x00;

                        TxBuf[2] = 0x00;

                        tf=0;

                        Delay(60000);

                        led=0;

           }

[1] [2]
关键字:单片机  NRF2401  DHT11 引用地址:单片机+NRF2401+DHT11远程温湿度控制程序

上一篇:单片机电子密码锁仿真 可修改密码
下一篇:单片机OLED屏幕进行数字,字符,图片的显示程序

推荐阅读最新更新时间:2024-11-09 08:44

STM32L053C8 MCU上的低功耗模式详解
意法半导体(STMicroelectronics)的超低功耗MCU系列采用低泄漏技术和优化设计,以实现出色的低电流消耗,使其非常适合电池供电和能量收集应用。为了充分利用这些器件的低功耗功能,有必要知道可用的低功耗模式,如何配置它们以及最适合哪些任务。本文概述了STM32L053C8 MCU上的低功耗模式。但是,由于该系列的低功耗模式相同,因此可以使用任何STM32L0器件。 STM32L1系列和STM32L4系列还包括在超低功耗系列中。这些器件是性能更高的产品,具有更高级的内核,更多的内存和更多的外围设备。它们具有与L0系列相同的低功耗模式(对于L4系列,还具有一些其他功能),因此,本文也是从了解L4系列的好入门。图1摘自ST的宣
[单片机]
STM32L053C8 <font color='red'>MCU</font>上的低功耗模式详解
基于飞思卡尔MCU的小型发动机控制方案
方案描述: 随着政府减排监管力度加大,小型发动机市场面临新的设计挑战。新的污染控制标准进一步限制了机械式化油器在摩托车、割草机和通用引擎上的使用。为满足未来需求,以小型发动机为动力的产品,必须由机械式化油器转向电子控制系统并配置传感器,用以精确计量燃烧过程中的油、气进给量。尽管小型发动机化油器经过了几十年的不断优化,但电子控制系统正在成为目前真正应对小型发动机需求的解决办法。 飞思卡尔 MC33812多功能点火与喷油驱动器可取代用于单缸和双缸发动机的四个集成块。为支持发动机控制系统的开发, 飞思卡尔 提供包括硬件、软件和编程工具在内的完整参考设计。 方案设计图: 方案关键器件表:
[汽车电子]
基于飞思卡尔<font color='red'>MCU</font>的小型发动机<font color='red'>控制</font>方案
51单片机中断机制(定时器/计数器)
单片机中断简介 52单片机一共有6个中断源,它们的符号,名称以及各产生的条件分别如下: INT0 - 外部中断0,由P3.2端口线引入,低电平或下降沿引起 INT1 - 外部中断1,由P3.3端口线引入,低电平或下降沿引起 T0 - 定时器/计数器0中断, 由T0计数器计满回零引起 T1 - 定时器/计数器1中断, 由T1计数器计满回零引起 T2 - 定时器/计数器2中断, 由T2计数器计满回零引起 TI/RI - 串行口中断,串行端口完成一帧字符发送/接收后引起 其中T2是52单片机特有的。 中断允许寄存器IE 中断优先级寄存器IP 定时器中断 51单片机内部共有两个16位可编程的定时器/计
[单片机]
ch32单片机怎么样?ch32好用吗?ch32和stm32的区别
Ch32单片机是龙芯微电子推出的一种高性能、低功耗的32位嵌入式处理器。它集成了ARM Cortex-M4内核,配备了丰富的接口和外设,可满足不同领域、不同应用场景的需求。在性能、功耗和功能方面,Ch32单片机比部分同级别的单片机还会优秀。 Ch32和其他单片机相比,其最大的优势在于其先进的处理器核心。在安全性、性能、低功耗等方面有着极高的表现。Ch32单片机采用了ARM Cortex-M4核心,而该核心是具有全面DSP功能的ARM Cortex-M系列中的一种。ARM Cortex-M4核心集成了DSP指令集和浮点计算,可满足高性能、高精度的数字信号处理的需求。同时,该核心还支持多线程,方便开发人员实现复杂应用程的并行执行,提高
[单片机]
基于8051单片机的外部设备交换信息的三种数据传输方式解析
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]
基于8051<font color='red'>单片机</font>的外部设备交换信息的三种数据传输方式解析
基于Kinetis微控制器和16位/24位MAX5556的立体声音频接口设计
本文给出基于Kinetis MK60N512微控制器和16位/24位音频数模转换器MAX5556的立体声音频接口设计。MK60N512由I2S总线向MAX55 56传输音频数据,输出音频信号经有源滤波器进行滤波,保证音频质量的同时提高其带负载能力。由MK60N512内部高性能可编程的增强型DMA向I2S模块传送音频数据,减轻微控制器内核的负担。 引言 MK60N512是飞思卡尔公司Kinetis系列微控制器集成度最高的芯片,它基于ARM Cortex—M4内核,具有功耗低、性能高、成本低的特点,旨在为嵌入式音频、汽车电子和电源管理等提供灵活的解决方案。MAX5556是美信公司一款低功耗、立体声音频数/模转换器(DAC),支持标
[嵌入式]
基于Kinetis<font color='red'>微控制</font>器和16位/24位MAX5556的立体声音频接口设计
Arduino CEO 专访:人工智能的MCU可以让更多人不再做技术“旁观者”
编译自《麻省理工学院技术评论》 自 2005 年成立以来,Arduino 开源平台彻底改变了电子工程界,以开源为代表的创新席卷了整个技术开发的。无论过去、现在还是未来,科技目标始终是让技术更简单、更容易为人们所使用。这一理念与Arduino的开源原则一起,在其开发计划中始终保持不变。 我们已经在最近对该公司创始人 Massimo Banzi的采访中看到了这一点,Arduino 首席执行官 Fabio Violante 也证实了这一点。 法比奥·维奥兰特 (Fabio Violante),Arduino 首席执行官 Violante告诉《麻省理工学院技术评论》意大利版:“我们正在投资各个领域,以便让越来越多的人能够接
[嵌入式]
Arduino CEO 专访:人工智能的<font color='red'>MCU</font>可以让更多人不再做技术“旁观者”
IAR 编写程序的代码比单片机的flash大了会出现故障Error[e16]
Error : Segment NEAR_ID (size: 0x15 align: 0) is too long for segment definition. At least 0xb more bytes needed. The problem occurred while processing the segment placement command -Z(CODE)TINY_ID,NEAR_ID=_..X_INTVEC_SIZE-_..X_FLASH_END , where at the moment of placement the available memory ranges were CODE:ff6-ff
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved