基于NRF24L01的DS18B20温度无线传输单片机源码

2019-12-04来源: 51hei关键字:NRF24L01  DS18B20  温度无线传输  单片机

单片机型号为stc12c5a60s2

温度传感器为DS18B20

无线传输为NRF24L01

温度显示LCD1602


单片机源程序如下:


#include

#include

#include "DELAY.h"

#include "NRF24L01.h"

#include "LCD1602.h"

#include "DS18B20.h"


void main(void)

{

        

        int temp,intt,dect;   

  unsigned char temp_buf[16]={0};

        

        EA=1;

        LCD_Init();            //LCD1602初始化

        Start18B20();          //配置DS18B20

        P23=0;

        

        while(1)

  {

                temp=Get18B20Temp();    //读取温度

                

                if(temp>0)

                {

                        intt=temp>>4;                  //分理出整数部分

                        dect=temp&0xf;                //分理出小数部分

                        intt=intt*16*0.0625;    //处理整数部分

                        dect=(dect*10)/16;      //处理小数部分

                        

                        sprintf(temp_buf,"Temp now:%2d.%d^C",intt,dect);//把温度转化为字符串temp_buf

                        

                        NRF24L01_Init_TX(0);                                            //配置NRF24L01的通道0

                        CE=0;

                        SPI_Write_Reg(WRITE_REG + RF_CH,40);    ////设置RF通道为40

                        CE=1;

                        nRF24L01_TxPacket(temp_buf);                                    //发送temp_buf中数

                        delay_ms(5);

                        

                        LCD_ShowString(0,0,"Mode:launching   ");

                        LCD_ShowString(1,0,temp_buf);                   //LCD1602显示温度

                        delay_ms(5);

           }

   }

}

复制代码

#include

#include


#include "NRF24L01.H"


uchar xdata RX_ADDRESS0[TX_ADR_WIDTH]={0x30,0xE6,0x45,0x82,0x7E}; //通道0地址

uchar xdata RX_ADDRESS1[TX_ADR_WIDTH]={0xC2,0x49,0x49,0x49,0x49}; //通道1地址

uchar xdata RX_ADDRESS2[TX_ADR_WIDTH]={0x94,0x49,0x49,0x49,0x49}; //通道2地址

uchar xdata RX_ADDRESS3[TX_ADR_WIDTH]={0x33,0x49,0x49,0x49,0x49}; //通道3地址

uchar xdata RX_ADDRESS4[TX_ADR_WIDTH]={0x00,0x49,0x49,0x49,0x49}; //通道4地址

uchar xdata RX_ADDRESS5[TX_ADR_WIDTH]={0x24,0x49,0x49,0x49,0x49}; //通道5地址


uchar xdata *pipe_add[6] = {RX_ADDRESS0,RX_ADDRESS1,RX_ADDRESS2,RX_ADDRESS3,RX_ADDRESS4,RX_ADDRESS5};//所有通道地址的集合


/**********************************RNF24L01状态标志位************************************************/

uchar       bdata sta;   

sbit        RX_DR        =sta^6;

sbit        TX_DS        =sta^5;

sbit        MAX_RT        =sta^4;


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

函数名:毫秒级CPU延时函数

调  用:DELAY_MS (?);

参  数:1~65535(参数不可为0)

返回值:无

结  果:占用CPU方式延时与参数数值相同的毫秒时间

备  注:应用于1T单片机时i<600,应用于12T单片机时i<125

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

void Delayms (uint a)

{

        uint i;

        while( --a != 0)

        {

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

        }

}

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



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

函数名称:uchar SPI_RW(uchar dat)

函数功能:NRF24L01的SPI时序

函数备注:Writes one byte to nRF24L01, and return the byte read from nRF24L01 during write

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

uchar SPI_RW(uchar dat)

{

    uchar i;

    for(i=8;i>0;i--) 

    {

         dat <<= 1;           

         MOSI = CY;         

         SCK = 1;                      

         dat |= MISO;                         

         SCK = 0;                              

    }

    return(dat);                             

}


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

函数名称:uchar SPI_Read(uchar cmd_reg)

函数功能:NRF24L01的SPI读时序

函数备注:

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

//uchar SPI_Read(uchar cmd_reg)

//{

//        uchar value;

//        

//    CSN = 0;               

//    SPI_RW(cmd_reg);            

//    value = SPI_RW(0);    

//        CSN = 1;                

//        

//    return(value);        

//}


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

函数名称:void SPI_Write_Reg(uchar cmd_reg, uchar value)

函数功能:写入NRF24L01寄存器

函数备注:

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

void SPI_Write_Reg(uchar cmd_reg, uchar value)

{        

    CSN = 0;                  

        SPI_RW(cmd_reg);     

    SPI_RW(value);            

    CSN = 1;                   

}


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

函数名称:uchar SPI_Read_Buf(uchar cmd_reg, uchar *pBuf, uchar num)

函数功能:从NRF24L01寄存器中读出数据

函数备注:reg:为寄存器地址,pBuf:为待读出数据地址,uchar:读出数据的个数

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

//uchar SPI_Read_Buf(uchar cmd_reg, uchar *pBuf, uchar num)

//{

//    uchar status,i;

//        

//    CSN = 0;                                    

//    status = SPI_RW(cmd_reg);                       

//    for(i=0;i

//           pBuf[i] = SPI_RW(0);            

//    CSN = 1;                           

//        

//        return(status);                    

//}


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

函数名称:void SPI_Write_Buf(uchar cmd_reg, uchar *pBuf, uchar num)

函数功能:在NRF24L01寄存器中写入数据

函数备注:reg:为寄存器地址,pBuf:为待写入数据地址,uchar:写入数据的个数

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

void SPI_Write_Buf(uchar cmd_reg, uchar *pBuf, uchar num)

{

         uchar i;        

    CSN = 0;            //SPI使能       

    SPI_RW(cmd_reg);   

    for(i=0; i

SPI_RW(*p

[1] [2]
关键字:NRF24L01  DS18B20  温度无线传输  单片机 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481943.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于51的IIC通讯原理及协议详解(I2C)
下一篇:4位共阴极数码管秒表设计仿真与程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STC单片机+nRF24L01萝莉控遥控器发射机加接收机
本人亲测成功可用,感兴趣的可以试试,nRF24L01无线芯片和stc的51单片机构成制作出来的实物图如下: QQ图片20180831075104.png (3.12 KB, 下载次数: 31)下载附件  保存到相册2018-8-31 07:51 上传 单片机源程序如下:#include<reg51.h>#define u8 unsigned char#define u16 unsigned intsfr IAP_DATA=0xe2;sfr IAP_ADDRH=0xe3;sfr IAP_ADDRL=0xe4;sfr IAP_CMD=0xe5;sfr IAP_TRIG
发表于 2019-12-03
STC单片机+nRF24L01萝莉控遥控器发射机加接收机
基于51单片机的nrf24l01无线的接收和发射程序
;                      //串口标志初始为0         init_NRF24L01();                //初始化24L01         UART_Init();                    
发表于 2019-12-02
基于51单片机的nrf24l01无线的接收和发射程序
51单片机应用之无线通讯模块NRF24L01+
本教程关于NRF24L01+的内容十分详细,对于大家的学习和调试及其有帮助内含详细教程: 单片机源程序如下:接下来我们写发送程序://**********************************//   NRF24L01+模块发射程序//      用8个LED调试//   Txz001 2012.05.16//**********************************#include <reg52.h>typedef unsigned char uchar; //将无符号字节类型重定义为uchartypedef unsigned int
发表于 2019-12-02
51单片机应用之无线通讯模块NRF24L01+
NRF24L01的使用方法和简单操作介绍(附参考程序)
(相关人员如觉得本人水平低下,还请见谅)Nrf24L01的使用程序和使用方法和简单操作:功能:无线对发程序。两个模块a,b,实现按下一个按键,会在对方的数码管上显示3或4,在本机上显示1,2。当一个模块,比如a模块。当两个按键按下其中一个,则会在另一个模块b上显示数字3,4(具体根据按下哪个按键)。以上功能描述,B模块按键按下,如同a模块一样的功能,不做系统性描述了。下面给出程序中几个地方的解释:#define READ_REG        0x00             
发表于 2019-11-29
NRF24L01的使用方法和简单操作介绍(附参考程序)
NRF24L01无线模块多机通信单片机程序 上位机+下位机
最近在接了一个项目,要求各个设备能够联网(不是互联网)控制。nrf24l01刚好有这个功能。但是之前只做过一对一的通信,还是用例程的那一种。我在想,用两个地址,共用同一个通道应该也可以完成。后来他又要求发过去的数据还要能回传,这下我只好来研究多通道通信了。多机通信和一对一通信基本上相同,就是要配置其他通道的地址和使能其他通道的有效数据宽度,还有自动应答。这是接收机的:void NRF24L01_Init_RX(void){   CE=0;   CSN=1;   SCK=0;   SPI_Write_Buf(WRITE_REG + TX_ADDR
发表于 2019-11-25
单片机课程设计报告—温度报警器
1绪论1.1温度报警器简介温度报警器是一种通过DS18B20采集周围温度,单片机来处理数据来报警的一种电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的温度报警器是以芯片为核心,通过编程来实现的。1.2温度报警器的背景与研究意义            在日常生活中,温度对于我们并不陌生,它是一个时时刻刻存在的物理量在我们的日常生活中占据了十分重要的地位。温度的大小时刻与我们的生产、生命、安全息息相关。因此对温度的测量与控制对各个行业领域有着很及其重要的作用尤其是在金属冶炼、化学研究、建材生产、食品加工、机械制作
发表于 2019-12-04
单片机课程设计报告—温度报警器
小广播
何立民专栏 单片机及嵌入式宝典

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

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