×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-17 发布时间:
|

单片机型号为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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址