基于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(*pBuf++);

    CSN = 1;           //关闭SPI

}


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

函数名称:uchar nRF24L01_RxPacket(uchar* rx_buf)

函数功能:数据读取后放入rx_buf接收缓冲区中

函数备注:

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

//uchar nRF24L01_RxPacket(uchar* rx_buf)

//{

//        uchar flag;

//        CE = 1;                          //很重要!启动接收!

//    Delayms(1);

//    sta=SPI_Read(READ_REG+STATUS);        // 读取状态寄存其来判断数据接收状况           //寄存器前面要加是读还是写

//    if(RX_DR)                                // 判断是否接收到数据  如果置1则说明接到数据并且放置在接收缓存器

[1] [2]
关键字:NRF24L01  DS18B20  温度无线传输  单片机 引用地址:基于NRF24L01的DS18B20温度无线传输单片机源码

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

推荐阅读最新更新时间:2024-11-13 20:09

51单片机设计测距仪原理及其应用
5l系列 单片机 中典型芯片(AT89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256 B的RAM,2个16b的定时/计数器TO和T1,4个8 b的工/O端I:IP0,P1,P2,P3,一个全双功串行通信口等组成。特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。该系列单片机引脚与封装如图1所示。 5l系列 单片机 提供以下功能:4 kB存储器;256 BRAM;32条工/O线;2个16b定时/计数器;5个2级中断源;1个全双向的串行口以及时钟 电路 。 空闲方式:CPU停止工
[单片机]
51<font color='red'>单片机</font>设计测距仪原理及其应用
基于MSP430单片机驱动NRF24L01无线模块接收C语言程序
NRF24L01无线模块在此程序中可以直接与MSP430单片机直接相连,单片机的电压和无线模块的电压都是3.3V, 无需加阻流电阻。通信接口为单片机模拟的SP口,LC12864液晶屏主要是用作把接收到数据通过其显示出来。 程序测试通过,可用! //p4口为液晶屏 //p1口中断 //nRF24L01无线通信 //p5.0 csn //p5.1 mosi //p5.3 sck //p5.2 miso //p1.2 irq //p5.7 ce //ST7920串行控制128*64液晶 //rst p4.3 复位 //rs p4.0 片选 //rw p4.1 数据 //E p4.2 时钟 #include msp430
[单片机]
基于MSP430单片机模块设计方案
当前,能源短缺成为制约社会经济发展的重要因素,如何实现能源高效利用是我们面临的重要问题。LED 作为一种新型的绿色光源产品,有着节能、环保、寿命长、体积小等特点,在实际生活中的利用也越来越广泛。而现在太阳能电池板充电技术已经得到了很大的发展,在公路两旁的路灯很多就是利用太阳能进行充电。现有的充电和照明技术都是根据预先的设置进行工作,不能根据环境的改变而实现自动调节,因此在能源利用率方面还可以进一步提高。 原有的充电技术中,太阳能电池板的角度位置是固定的,所以在一天中面对太阳光照的角度也不同。这样使太阳能充电无法达到最大效率。如果设计系统能够根据一天当中太阳位置的变化而调整角度,使充电电池板始终正对太阳,获得最大光照,这
[单片机]
51单片机PID+PWM直流电机转速闭环控制源码(12864液晶显示)
设计内容及要求 内容包括: 1. 查找文献资料,学习直流电机控制的工作原理; 2. 转速控制系统方案设计 3. 硬件电路设计,绘制电路原理图和PCB图; 4. 设计软件,并调试 5. 综合调试,测试、分析误差原因 6. 撰写设计报告 要求: 1.矩阵键盘设定并显示转速,实时显示实际转速 2.按键控制电机起停、正反转 3.PWM转速闭环控制。 4.用lcd12864液晶屏显示相关内容 设计 参数 1.转速调节范围:1500转/分--3000转/分 2.测速误差 10% 制作完成的pid直流电机转速控制系统实物图: 51单片机源程序如下: #include reg51.h
[单片机]
51<font color='red'>单片机</font>PID+PWM直流电机转速闭环控制源码(12864液晶显示)
stm8单片机的SWIM模式引脚复用
SWIM模式 上电复位后,SWIM复位并进入OFF模式。 1、OFF:上电复位的默认状态。此时,SWIM引脚不能应用为I/O口。 2、I/O:通过将全局配置寄存器(CFG_GCR)中的SWD位置位后可将SWIM引脚设定为普通I/O口。一旦系统复位,SWIM模块重新回到OFF模式。 3、SWIM:当SWIM引脚出现特定序列信号时,就会进入此状态。这种模式下,调试工具通过SWIM引脚使用三种命令(SRST系统复位,ROTF运行中读,WOTF运行中写)来控制STM8。 SWIM引脚复用 通过将全局配置寄存器(CFG_GCR)中的SWD位置位后可将SWIM引脚设定为普通I/O口但需要注意: 如果SWIM引脚用作普通I/O口,最好
[单片机]
stm8<font color='red'>单片机</font>的SWIM模式引脚复用
51单片机存储器介绍(3)
高128单元:(80H-FFH) 21个特殊功能寄存器不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作. 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下:
[单片机]
550元MCU跌到70元:汽车芯片现货市场变了?
汽车MCU芯片一直是2020年以来缺芯危机的主角,但在最近的现货市场上,发现自去年不少MCU已经有了不小的降幅。NXP(恩智浦)的一颗MCU FS32K144HAT0MLHT已经平稳降价数月并回到2位数的市场价,市场上反映目前70元左右可以拿到。或许有人还记得,这颗芯片去年被炒到过三四百的高价,也是当时最缺货的汽车芯片之一。 一边是MCU平均交期延长到至少半年,原厂们发涨价函,通知要长期缺。另一边,在最能感受到下游需求变化的现货市场,MCU降价了,这是怎么一回事? 本文将通过NXP 这颗32位MCU FS32K144HAT0MLHT的价格变化,一窥这背后的MCU市场变化,你将了解: 1、FS32K144HAT0MLHT
[汽车电子]
550元<font color='red'>MCU</font>跌到70元:汽车芯片现货市场变了?
PIC单片机编程漫谈
PIC的编程是比较简单的,但是对于初学者来说还是有些概念不太容易理解,从而影响编程。例如,PIC单片机初学者在编写程序时就比较容易在BANK设置和PC操作上出错。 1、 BANK设置错误: 先来看一段程序: include PORTDB EQU 20H …… START movlw b‘11110000’ movwf PORTDB clrf TRISD MAIN bcf STATUS,C rlf PORTDB,1 btfsc STATUS,C bsf PORTDB,0 movf PORTDB,W movwf PORTD call DELAY goto MAIN …… 上面的是一个将D口的发
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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