历史上的今天
返回首页

历史上的今天

今天是:2024年12月04日(星期三)

正在发生

2019年12月04日 | 基于NRF24L01的DS18B20温度无线传输单片机源码

2019-12-04 来源:51hei

单片机型号为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则说明接到数据并且放置在接收缓存器

推荐阅读

史海拾趣

苏州锋驰(Feng)公司的发展小趣事
利用开关元件(如晶体管)的开关行为来实现稳流控制,适用于大电流和高效率的需求。其优点是效率高、体积小、重量轻,但可能产生较高的噪声和电磁干扰。
ECM [ECM Electronics Limited.]公司的发展小趣事

企业文化是企业发展的灵魂。ECM Electronics Limited.注重企业文化的建设,倡导“诚信、创新、协作、共赢”的价值观。公司注重员工的培训和发展,为员工提供良好的工作环境和职业发展机会。通过团队建设活动,增强员工的凝聚力和归属感。正是这些积极向上的企业文化和优秀的团队,为ECM Electronics Limited.的持续发展提供了源源不断的动力。

e2v technologies公司的发展小趣事

2016年,e2v被Teledyne Technologies公司收购,成为Teledyne e2v。这一合并不仅为e2v带来了更多的资源和支持,也为其开启了新的发展篇章。Teledyne e2v在继续保持其在图像传感器领域的领先地位的同时,也积极拓展新的市场和应用领域,为电子行业的发展贡献更多的力量。

Amphenol Aerospace公司的发展小趣事

e2v Technologies自成立以来,一直致力于技术创新和科学合作。公司曾与多个国际知名科研机构合作,参与了诸如哈勃天文望远镜、Envisat气象环境遥感卫星等著名科学项目。这些项目对图像传感器的精度和稳定性提出了极高的要求,e2v凭借其卓越的技术实力,成功为这些项目提供了高质量的图像传感器,进一步巩固了其在图像传感器领域的领先地位。

FINDER公司的发展小趣事

随着电子行业的快速发展,e2v不断拓展其产品线,以满足市场的多样化需求。除了传统的图像传感器产品外,公司还开发了示波器数据转换器、高性能图像处理器等,广泛应用于科学、医学、工业、汽车和电信等领域。这些产品的推出,不仅拓展了e2v的市场空间,也为其带来了可观的经济效益。

Advance Tapes公司的发展小趣事

随着电子行业的快速发展,对胶带产品的性能要求也越来越高。Advance Tapes公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发的投入,引进了一批高素质的研发人才,并与多家高校和研究机构建立了合作关系。经过不懈努力,Advance Tapes成功开发出了一系列具有高性能、高可靠性的胶带产品,得到了广大客户的认可。

问答坊 | AI 解惑

小弟冒死将老师的课件分给大家,课件分章节,大家按需下载.

小弟冒死将老师的课件分给大家,课件分章节,大家按需下载.…

查看全部问答>

项目团队中个别人员工作积极性不高,怎样解决?

项目成员工作不主动,处于混日子的状态。怎样解决员工工作积极性?…

查看全部问答>

EVC4 网络通信问题--操作超时

我在同时开多线程模拟多用户访问HTTP客户端下载上传数据时,CATCH到很多“操作超时”,但是使用单线程时没有这种错误,请问下这个是什么原因?如何解决。 我测试使用的是同步方式。 全部分数奉上,希望有个解决的办法,急~~~;…

查看全部问答>

为什么build不出sys文件?

有现成的例子,在Windows DDK 2600.1106的Build Environment下用build指令编译,只出来.res, .obj, .sbr文件,没看到.sys文件。 而Build并没有提示错误,最后一行信息是BUILD:Done 这是为什么啊? …

查看全部问答>

想用ST的PWM做DA,滤波怎么选参数好

我对DA的速度要求不高,10Hz以内就够了,但是纹波比较担心现在是PWM后运放怎么做滤波,高手给支个招,参数怎么选。…

查看全部问答>

意法半导体(ST)宣布2011年中国iNEMO™校园创意大赛获胜名单

    中国北京,2011年12月1日 —— 横跨多重电子应用领域、全球领先的半导体供应商及全球最大的消费电子和便携设备MEMS(微机电系统)供应商意法半导体[1](STMicroelectronics,简称ST;纽约证券交易所代码:STM)今天宣布清华大学的天 ...…

查看全部问答>

新手求助

我是新手,各位仁兄可有FPGA的程序编译器?…

查看全部问答>

给力

楼主好样的 加油  祝你顺利…

查看全部问答>

新手来报到。。求解惑,汇编的。。不知道断点是在哪里

ORG                 0000H                        LJMP        MAIN             ...…

查看全部问答>

identifier “ ” is undefined

以下是我整理的程序,想实现的功能是三个按键,一个是按一下增加10,一个是按一下减少10,最后个是复位到0。但是错误报告identifier “ key” is undefined,dentifier “ keys” is undefined. #include #include\"NOKIA_LCD_BSP.H\" #define&nb ...…

查看全部问答>