值得注意到是nRF2402配置控制字和nRF2401不一样,具体看datasheet,我摘录了一部分如下
有4个字节的控制字,其中D0-D19是需要配置的,D31-D20空,可以配置为0.
源程序:
/***********************************************************/
/*nRF2402学习板V1.0 */
/*创建人 :郑 文(ClimberWin) 日期:2010-02-20 */
/*功能描述: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;i<100;i++)
{
speaker=0;
delayms(1);
speaker=1;
delayms(1);
}
}
/*****************************************/
void keytest(void) //按键测试程序
{
////////按键K1判断程序////////
while(K1==0)
{
delayms(100);//按键去抖
if(K1==1)
{
nRF2402_flag|=0x02; //按键标志位nRF2402_flag_bit1=1
speakertest();
nRF2402_Da
}
else
{;}
}
/////////////////////////////
////////按键K2判断程序////////
while(K2==0)
{
delayms(100);//按键去抖
if(K2==1)
{
nRF2402_flag|=0x02; //按键标志位nRF2402_flag_bit1=1
speakertest();
nRF2402_Da
}
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_Da
}
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_Da
}
else
{nRF2402_flag&=0xfd; } //清除按键标志位nRF2402_flag_bit1=0
}
if((nRF2402_flag&0x02)==0x02)//判断是否有按键按下
{
P0=~nRF2402_Da
nRF2402_Transmit_Mode(); //设置为发送模式
nRF2402_Transmit_Da
nRF2402_flag&=0xfd; //清除按键标志位nRF2402_flag_bit1=0
}
else
{;}
}
void main(void)
{
delayms(1000);//开机延时
nRF2402_Da
init_rs232(); //串口初始化
TI=1; //串口发射有效
nRF2402_config(); //nRF2402初始化配置
delayms(100);
speakertest(); //蜂鸣器叫一声
nRF2402_Transmit_Mode(); //设置为发送模式
nRF2402_Transmit_Da
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 DA
//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 co
{
0x00,0x07,0xe7,0x82
};
uchar co
uchar nRF2402_Da
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_Da
/*************延时子程序start*****************/
void delayms(unsigned int count)
{
unsigned int i,j;
for(i=0;i
}
/**************延时子程序end****************/
/************读数据子程序***********/
uchar nRF2402_Read_Byte(void)
{
uchar i,j,temp;
temp=0x00;
for (i=0;i<8;i++)
{
nRF2402_CLK=1;
_nop_();
if (nRF2402_DIN==1) j=1;
else j=0;
temp=(temp<<1)|j;
nRF2402_CLK=0;
}
return temp;
}
/************写数据子程序***********/
void nRF2402_Write_Byte(uchar Send_Byte)
{
uchar i;
for (i=0;i<8;i++)
{
Send_Byte=Send_Byte<<1;
nRF2402_DIN=CY; //读进位数据
nRF2402_CLK=1;
_nop_();
nRF2402_CLK=0;
}
}
/*********配置参数子程序***********/
void nRF2402_config(void)
{
uchar i;
//////stand by/////////////
nRF2402_PWR_UP=1;
nRF2402_CE=0;
nRF2402_CS=0;
///////////////////////////// datasheet(page24 of 37)
delayms(3);// PWR_DWN -> ST_BY_mode | MAX 3ms | name: Tpd2sby |
nRF2402_CS=1; //进入配置模式Configuration
////4个字节的配置字////////////// datasheet(page17 of 37)
for (i=0;i<4;i++)
{
nRF2402_Write_Byte(nRF2402_Config_Word[i]);
}
delayms(1);
nRF2402_CS=0; //nRF2402_CS 置低使配置有效 datasheet(page26 of 37);
}
/*********设置发射模式子程序*********/
void nRF2402_Transmit_Mode(void)
{
//设置为Active(Tx)模式
nRF2402_PWR_UP=1;
nRF2402_CE=1;
nRF2402_CS=0;
delayms(1);
}
/********发送数据子程序*********/
void nRF2402_Transmit_Da
{
uchar i;
nRF2402_CE=1;
delayms(1);
for (i=0;i<(ADDR_W/8);i++)//写入接收地址
{
nRF2402_Write_Byte(Channel_Addr[i]);
}
for (i=0;i<(DA
{
nRF2402_Write_Byte(temp[i]);
}
nRF2402_CE=0; //nRF2402_CE 置低使发送有效
delayms(1);
}
#endif
上一篇:PS/2处理C51头文件
下一篇:nRF2401学习板---AD采集无线发送
推荐阅读最新更新时间:2024-03-16 15:08