//仅供参考
#include #include typedef unsigned char uchar; typedef unsigned char uint; //****************************************IO 端 口 定 义 *************************************** sbit MISO =P1^2; sbit MOSI =P3^2; sbit SCK =P1^6; sbit CE =P1^5; sbit CSN =P1^7; sbit IRQ =P1^3; //*********************************** 数 码 管 0-9 编 码 ******************************************* uchar seg[10]=; //0~~9 段码 uchar TxBuf[32]= ; // //************************************ 按 键 ********************************************** sbit KEY1=P3^6; sbit KEY2=P3^7; //*********************************** 数 码 管 位 选 ************************************************** sbit led1=P2^1; sbit led0=P2^0; sbit led2=P2^2; sbit led3=P2^3; //*********************************************NRF24L01*********************** ************** #define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 // 5 uints RX address width #define TX_PLOAD_WIDTH 32 // 20 uints TX payload #define RX_PLOAD_WIDTH 32 // 20 uints TX payload uint const TX_ADDRESS[TX_ADR_WIDTH]= ; //本地地址 uint const RX_ADDRESS[RX_ADR_WIDTH]= ; //接收地址 //***************************************NRF24L01 寄 存 器 指 令 ******************************************************* #define READ_REG 0x00 // 读寄存器指令 #define WRITE_REG 0x20 // 写寄存器指令 #define RD_RX_PLOAD 0x61 // 读取接收数据指令 #define WR_TX_PLOAD 0xA0 // 写待发数据指令 #define FLUSH_TX 0xE1 // 冲洗发送 FIFO 指令 #define FLUSH_RX 0xE2 // 冲洗接收 FIFO 指令 #define REUSE_TX_PL 0xE3 // 定义重复装载数据指令 #define NOP 0xFF // 保留 //*************************************SPI(nRF24L01) 寄 存 器 地 址 **************************************************** #define CONFIG 0x00 // 配置收发状态,CRC 校验模式以及收发状态响应方式 #define EN_AA 0x01 // 自动应答功能设置 #define EN_RXADDR 0x02 // 可用信道设置 #define SETUP_AW 0x03 // 收发地址宽度设置 #define SETUP_RETR 0x04 // 自动重发功能设置 #define RF_CH 0x05 // 工作频率设置 #define RF_SETUP 0x06 // 发射速率、功耗功能设置 #define STATUS 0x07 // 状态寄存器 #define OBSERVE_TX 0x08 // 发送监测功能 #define CD 0x09 // 地址检测 #define RX_ADDR_P0 0x0A // 频道 0 接收数据地址 #define RX_ADDR_P1 0x0B // 频道 1 接收数据地址 #define RX_ADDR_P2 0x0C // 频道 2 接收数据地址 #define RX_ADDR_P3 0x0D // 频道 3 接收数据地址 #define RX_ADDR_P4 0x0E // 频道 4 接收数据地址 #define RX_ADDR_P5 0x0F // 频道 5 接收数据地址 #define TX_ADDR 0x10 // 发送地址寄存器 #define RX_PW_P0 0x11 // 接收频道 0 接收数据长度 #define RX_PW_P1 0x12 // 接收频道 0 接收数据长度 #define RX_PW_P2 0x13 // 接收频道 0 接收数据长度 #define RX_PW_P3 0x14 // 接收频道 0 接收数据长度 #define RX_PW_P4 0x15 // 接收频道 0 接收数据长度 #define RX_PW_P5 0x16 // 接收频道 0 接收数据长度 #define FIFO_STATUS 0x17 // FIFO 栈入栈出状态寄存器设置 //***************************************************************************** ********* void Delay(unsigned int s); void inerDelay_us(unsigned char n); void init_NRF24L01(void); uint SPI_RW(uint uchar); uchar SPI_Read(uchar reg); void SetRX_Mode(void); uint SPI_RW_Reg(uchar reg, uchar value); uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars); uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars); unsigned char nRF24L01_RxPacket(unsigned char* rx_buf); void nRF24L01_TxPacket(unsigned char * tx_buf); //***************************************** 长 延 时 ***************************************** void Delay(unsigned int s) //***************************************************************************** ************* uint bdata sta; //状态标志 sbit RX_DR =sta^6; sbit TX_DS =sta^5; sbit MAX_RT =sta^4; /****************************************************************************** ************ /*延时函数 /****************************************************************************** ************/ void inerDelay_us(unsigned char n) //***************************************************************************** *********** /*NRF24L01 初始化 //***************************************************************************** **********/ void init_NRF24L01(void) /****************************************************************************** ********************** /*函数:uint SPI_RW(uint uchar) /*功能:NRF24L01 的 SPI 写时序 /****************************************************************************** **********************/ uint SPI_RW(uint uchar) return(uchar); // return read uchar } /****************************************************************************** ********************** /*函数:uchar SPI_Read(uchar reg) /*功能:NRF24L01 的 SPI 时序 /****************************************************************************** **********************/ uchar SPI_Read(uchar reg) /****************************************************************************** **********************/ /*功能:NRF24L01 读写寄存器函数 /****************************************************************************** **********************/ uint SPI_RW_Reg(uchar reg, uchar value) /****************************************************************************** **********************/ /*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) /*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的 个数 /****************************************************************************** **********************/ uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) /****************************************************************************** *************************** /*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars) /*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数 /****************************************************************************** ***************************/ uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars) /****************************************************************************** **********************/ /*函数:void SetRX_Mode(void) /*功能:数据接收配置 /****************************************************************************** **********************/ void SetRX_Mode(void) /****************************************************************************** ************************/ /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) /*功能:数据读取后放如 rx_buf 接收缓冲区中 /****************************************************************************** ************************/ unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后 RX_DR,TX_DS,MAX_PT 都置高为 1,通过写 1 来清楚中断标志 return revale; } /****************************************************************************** ***************************** /*函数:void nRF24L01_TxPacket(unsigned char * tx_buf) /*功能:发送 tx_buf 中数据 /****************************************************************************** ****************************/ void nRF24L01_TxPacket(unsigned char * tx_buf) //************************************ 主 函 数 ************************************************************ void main(void) } if(temp==3) nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data Delay(20000); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); temp++; } }