红河信息港

当前位置:

24G无线发射模块nRF2402应用

2020/02/15 来源:红河信息港

导读

2.4G无线发射模块nRF2402应用花了我一个下午的时间,终于调试好了nRF2402无线发射模块,有一点值得注意的,nRF2402是单

2.4G无线发射模块nRF2402应用

花了我一个下午的时间,终于调试好了nRF2402无线发射模块,有一点值得注意的,nRF2402是单独发射模块,单通道的,具体应用和nRF2401差不多,就是值得注意的是配置控制字(Configuration Word)不一样。

nRF2402模块引脚图如下:

值得注意到是nRF2402配置控制字和nRF2401不一样,具体看datasheet,我摘录了一部分如下

有4个字节的控制字,其中D0-D19是需要配置的,D31-D20空,可以配置为0.

源程序:

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

/*nRF2402学习板V1.0 */

/*创建人 :郑 文(ClimberWin) 日期: */

/*功能描述:nRF2402无线数据传输 */

/*芯片 :STC89C51RC晶振 11.0592M */

/*版本 :V1.0 */

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

//测试OK

,功能描述:

//8个LED接在P0口,低电平有效

//按键1是LED加 按键2LED减 按键3 LED全亮 按键4 LED全灭

//串口输出数据

//添加串口发送数据给单片机再无线发送

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

//端口定义

///////LED定义//////////

sbit LED1 = P0^0;

sbit LED2 = P0^1;

sbit LED3 = P0^2;

sbit LED4 = P0^3;

sbit LED5 = P0^4;

sbit LED6 = P0^5;

sbit LED7 = P0^6;

sbit LED8 = P0^7;

///////按键定义////////////

sbit K1 = P3^3;

sbit K2 = P3^4;

sbit K3 = P3^5;

sbit K4 = P3^6;

sbit speaker=P3^7;//蜂鸣器输出引脚

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

void speakertest(void); //蜂鸣器程序

void init_rs232(void); //串口初始化

void keytest(void); //按键测试程序

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

/* 串口通信初始化设置 */

void init_rs232(void)

{

SCON=0x50;

PCON=0x00;

TH1=0xFD; //波特率 9600 11.0592MHZ 时候

TL1=0XFD;

TMOD=0X20;

TR1=1;

}

void speakertest(void)//蜂鸣器程序

{

unsigned char i;

for(i=0;ita[0]++;

}

else

{;}

}

/////////////////////////////

////////按键K2判断程序////////

while(K2==0)

{

delayms(100);//按键去抖

if(K2==1)

{

nRF2402_flag|=0x02; //按键标志位nRF2402_flag_bit1=1

speakertest();

nRF2402_Data[0]--;

}

else

{nRF2402_flag&=0xfd; } //清除按键标志位nRF2402_flag_bit1=0

}

/////////////////////////////

////////按键K3判断程序////////

while(K3==0)

{

delayms(100);//按键去抖

if(K3==1)

{

nRF2402_flag|=0x02; //按键标志位nRF2402_flag_bit1=1

speakertest();

nRF2402_Data[0]=0x00;

}

else

{nRF2402_flag&=0xfd; } //清除按键标志位nRF2402_flag_bit1=0

}

/////////////////////////////

////////按键K4判断程序////////

while(K4==0)

{

delayms(100);//按键去抖

if(K4==1)

{

nRF2402_flag|=0x02; //按键标志位nRF2402_flag_bit1=1

speakertest();

nRF2402_Data[0]=0xff;

}

else

{nRF2402_flag&=0xfd; } //清除按键标志位nRF2402_flag_bit1=0

}

if((nRF2402_flag&0x02)==0x02)//判断是否有按键按下

{

P0=~nRF2402_Data[0];

nRF2402_Transmit_Mode(); //设置为发送模式

nRF2402_Transmit_Data(nRF2402_Data); //发送数据

nRF2402_flag&=0xfd; //清除按键标志位nRF2402_flag_bit1=0

}

else

{;}

}

void main(void)

{

delayms(1000);//开机延时

nRF2402_Data[0] = 0x55;

init_rs232(); //串口初始化

TI=1; //串口发射有效

nRF2402_config(); //nRF2402初始化配置

delayms(100);

speakertest(); //蜂鸣器叫一声

nRF2402_Transmit_Mode(); //设置为发送模式

nRF2402_Transmit_Data(nRF2402_Data);//发送测试数据

SBUF=0x55; //串口输出0x55 测试是否有正确的串口数据

delayms(100);

while (1)

{

keytest(); //调用按键子程序,无线发送数据

}

}

///////////////////////////////////////////////////////////////////////////////////////////////

头文件:nRF2402.h

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

/**********************中文版本*******************************/

/*****功能描述 : nRF2402无线收发模块应用头文件 *****/

/*****调试平台 : 51单片机 11.0592M晶振 *****/

/*****作 者 : 郑文(ClimberWin) *****/

/*****编写日期 : 2010年02月20日 *****/

/*****版本信息 : V1.0 *****/

/*****修改日期 : *****/

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

#ifndef __nRF2402_H__

#define __nRF2402_H__

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit nRF2402_PWR_UP = P1^4;

sbit nRF2402_CE = P1^5;

sbit nRF2402_CS = P1^3;

//////////////////////

sbit nRF2402_CLK = P1^6;

sbit nRF2402_DIN = P1^2;

//////////////////////

//Configuration Word datasheet(page17 of 37)

//Reserved for testing

#define ADDR_W 2*8 //发送/接收地址宽度(单位:Bit)

#define DATA1_W 28*8 //通道1 payload数据长度设置(bit)

//D31 MSB

#define PLL 0x00 // D19

#define UNUSED_bit18 0x01 //未定义 必须置1

#define PREAMBLE_bit17 0x01 //Logic 0: No generation of Preamble |Logic 1: Preamble generation enabled (default)

#define UNUSED_bit16 0x01 //未定义 必须置1

#define CRC_L 0x01 //CRC 模式 0:8 位 1:16 位

#define CRC_EN 0x01 //CRC 校验 0:禁用 1:启用

#define CM 0x01 //0:Direct mode 1:ShockBurst mode

#define RFDR_SB 0x00 //传输速率0:250kbps 1:1Mbps(requires 16MHZ crystal)

#define XO_F 0x03 //晶振频率 D11-D9(000:4MHZ 001:8MHZ 010:12MHZ 011:16MHZ 100:20MHZ)

#define RF_PWR 0x03 //发射模式的输出功率D8-D7(00:-20dBm 01:-10dBm 10:-5dBm 11:0dBm)

#define RF_CH 0x02 //Channel 发射频率设置Channel=2400MHz+RF_CH * 1.0MHz datasheet(page22 of 37)

uchar code nRF2402_Config_Word[4] =

{

0x00,0x07,0xe7,0x82

};

uchar code Channel_Addr[]={0x34,0x12,0x00,0x00,0x00};//设置通道1地址,发射和接收必须匹配

uchar nRF2402_Data[32]; //定义nRF2402数据发送接收临时存储地址

uchar nRF2402_flag;//定义标志位,bit7-bit2 暂时保留 | bit0:是否有接收数据标志位 1:有 0:无

//| bit1:是否有按键数据标志位 1:有 0:无

void delayms(uint count); //延时程序

uchar nRF2402_Read_Byte(void); //读字节

void nRF2402_Write_Byte(uchar Send_Byte);//写字节

void nRF2402_config(void); //参数配置

void nRF2402_Transmit_Mode(void); //设置为发射模式

void nRF2402_Transmit_Data(uchar TxBuf[]); //nRF2402发送数据子程序

/*************延时子程序start*****************/

void delayms(unsigned int count)

{

unsigned int i,j;

for(i=0;i ST_BY_mode | MAX 3ms | name: Tpd2sby

nRF2402_CS=1; //进入配置模式Configuration

////4个字节的配置字////////////// datasheet(page17 of 37)

for (i=0;ita(uchar temp[]) //datasheet(page22 of 37);

{

uchar i;

nRF2402_CE=1;

delayms(1);

for (i=0;iTA1_W/8);i++)//写入需要发送的数据

{

nRF2402_Write_Byte(temp[i]);

}

nRF2402_CE=0; //nRF2402_CE 置低使发送有效

delayms(1);

}

#endif

上海远大心胸医院李红莉
北京市西城区广外社区卫生服务中心怎么样
广东看癫痫病价格
北京卵巢早衰好的医院
岳阳小儿白巅风去哪个医院好
标签

友情链接