欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
NRF24l01無(wú)線收發(fā)程序(4數(shù)碼管顯示4路口車流量)
[打印本頁(yè)]
作者:
jiujiu
時(shí)間:
2014-12-19 02:29
標(biāo)題:
NRF24l01無(wú)線收發(fā)程序(4數(shù)碼管顯示4路口車流量)
之前我在弄這個(gè)無(wú)線模塊的時(shí)候,很迷茫,網(wǎng)上也很難找到資料,調(diào)了很久才調(diào)通。所以我上傳這個(gè)給大家,我之前是用來(lái)檢測(cè)車流量的,所以有些程序?qū)τ诖蠹沂嵌嘤嗟摹S信d趣的可以研究下。單通道跟,多通道的也調(diào)通了。只要在發(fā)射器的IP地址按順序修改IP地址就能夠同時(shí)接收6個(gè)通道信號(hào),再通過(guò)信道號(hào)區(qū)別哪個(gè)發(fā)射器發(fā)射。大家慢慢研究。
電路圖:
NRF24L01多通道通信(4數(shù)碼管顯示4路口車流量).rar
(1.53 MB, 下載次數(shù): 187)
2014-12-19 02:29 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
收發(fā)程序:
NRF24L01多通道(直接修改發(fā)射器地址).rar
(62.27 KB, 下載次數(shù): 141)
2014-12-19 02:29 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
jiujiu
時(shí)間:
2014-12-19 02:31
發(fā)送程序:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit MOSI = P1^5;
sbit MISO = P1^6;
sbit SCK = P1^7;
sbit CE = P1^3; //模式
sbit CSN = P1^2; //SPI en
sbit IRQ = P3^2;
//sbit LCD_RS = P2^0; //LCD1602操作線
//sbit LCD_RW = P2^1;
//sbit LCD_E = P2^2;
sbit LED0 = P2^7;
// SPI(nRF24L01) commands
#define READ_REG 0x00 // Define read command to register
#define WRITE_REG 0x20 // Define write command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define FLUSH_TX 0xE1 // Define flush TX register command
#define FLUSH_RX 0xE2 // Define flush RX register command
#define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
#define NOP 0xFF // Define No Operation, might be used to read status register
// SPI(nRF24L01) registers(addresses)
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
#define SETUP_AW 0x03 // 'Setup address width' register address
#define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
#define RF_CH 0x05 // 'RF channel' register address
#define RF_SETUP 0x06 // 'RF setup' register address
#define STATUS 0x07 // 'Status' register address
#define OBSERVE_TX 0x08 // 'Observe TX' register address
#define CD 0x09 // 'Carrier Detect' register address
#define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
#define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
#define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
#define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
#define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
#define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
#define TX_ADDR 0x10 // 'TX address' register address
#define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
#define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
#define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
#define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
#define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
#define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
#define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
#define TX_ADR_WIDTH 5 // 5字節(jié)寬度的發(fā)送/接收地址
#define TX_PLOAD_WIDTH 1// 數(shù)據(jù)通道有效數(shù)據(jù)寬度
//#define LED P1
uchar TX_ADDRESS[TX_ADR_WIDTH] = {0x04,0x43,0x10,0x10,0x12};
// 定義一個(gè)靜態(tài)發(fā)送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
uchar Table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar temp;
unsigned long av;
unsigned long sum;
unsigned long num;
uint N;
uint i;
char chN;
uchar Nrf;
uchar flag=1;
uchar bdata sta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT = sta^4;
uchar flag1;
void init_io(void)
{
CE = 0; // 待機(jī)
CSN = 1; // SPI禁止
SCK = 0; // SPI時(shí)鐘置低
IRQ = 1; // 中斷復(fù)位
//LED = 0xff; // 關(guān)閉指示燈
}
void delay_ms(char x)
{
int j;
while(x--)
{
j = 1000;
while(j--);
}
}
void delay_us(int x)
{
while(x--);
}
/*uchar Read_LCD1602()
{
uchar busy = 0x80;
LCD_RS = 0;
LCD_RW = 1;
delay_ms(1);
LCD_E = 1;
delay_ms(1);
busy = P0;
delay_ms(1);
LCD_E = 0;
return(busy);
}
void Write_Data(uchar dat)
{
while(Read_LCD1602()&0x80);
LCD_RW = 0;
LCD_RS = 1;
P0 = dat;
delay_ms(1);
LCD_E = 1;
delay_ms(1);
LCD_E = 0;
}
void Write_Com(uchar com)
{
while(Read_LCD1602() & 0x80);
LCD_RW = 0;
LCD_RS = 0;
P0 = com;
delay_ms(1);
LCD_E = 1;
delay_ms(1);
LCD_E = 0;
}
void Write_Add_Dat(uchar add, uchar dat)
{
Write_Com(add);
Write_Data(dat);
}
void LCD_Init()
{
Write_Com(0x38);
Write_Com(0x0c);
Write_Com(0x06);
Write_Com(0x01);
} */
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循環(huán)8次
{
MOSI = (byte & 0x80); // byte最高位輸出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01從MOSI讀入1位數(shù)據(jù),同時(shí)從MISO輸出1位數(shù)據(jù)
byte |= MISO; // 讀MISO到byte最低位
SCK = 0; // SCK置?
}
return(byte); // 返回讀出的一字節(jié)
}
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時(shí)返回狀態(tài)字
SPI_RW(value); // 然后寫數(shù)據(jù)到該寄存器
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
SPI_RW(reg); // 選擇寄存器
reg_val = SPI_RW(0); // 然后從該寄存器讀數(shù)據(jù)
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(reg_val); // 返回寄存器數(shù)據(jù)
}
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時(shí)返回狀態(tài)字
for(i=0; i<bytes; i++)
{
pBuf[ i] = SPI_RW(0); // 逐個(gè)字節(jié)從nRF24L01讀出
}
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時(shí)返回狀態(tài)字
for(i=0; i<bytes; i++)
{
SPI_RW(pBuf[ i]); // 逐個(gè)字節(jié)寫入nRF24L01
}
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
void TX_Mode(uchar *BUF)
{
CE = 0;
// 寫入發(fā)送地址
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 寫入發(fā)送地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 為了應(yīng)答接收設(shè)備,接收通道0地址和發(fā)送地址相同
SPI_Write_Buf(WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH); // 寫數(shù)據(jù)包到TX FIFO
SPI_RW_Reg(WRITE_REG + EN_AA, 0x3f); // 使能接收通道0自動(dòng)應(yīng)答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x3f); // 使能接收通道0
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x0a); // 自動(dòng)重發(fā)延時(shí)等待250us+86us,自動(dòng)重發(fā)10次
SPI_RW_Reg(WRITE_REG + RF_CH, 40); // 選擇射頻通道0x40
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // 數(shù)據(jù)傳輸率1Mbps,發(fā)射功率0dBm,低噪聲放大器增益
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // CRC使能,16位CRC校驗(yàn),上電
CE=1;
}
uchar Check_ACK(bit clear)
{
while(IRQ);
sta = SPI_RW(NOP); // 返回狀態(tài)寄存器
if(MAX_RT)
{
if(clear) // 是否清除TX FIFO,沒(méi)有清除在復(fù)位MAX_RT中斷標(biāo)志后重發(fā)
{
SPI_RW(FLUSH_TX);
}
}
SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除TX_DS或MAX_RT中斷標(biāo)志
IRQ = 1;
if(TX_DS)
{
return(0x00);
}
else
{
return(0xff);
}
}
unsigned char nRF24L01_RxPacket(unsigned char *RX_BUF)
{
unsigned char revale=0;
//SetRX_Mode();
sta = SPI_Read(STATUS); //read register STATUS's value
temp = sta;
if(RX_DR) //if receive data ready (RX_DR) interrupt
{
CE = 0;
SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH); // read receive payload from RX_FIFO buffer
revale =1; //we have receive data
}
SPI_RW_Reg(WRITE_REG+STATUS,sta); // clear RX_DR or TX_DS or MAX_RT interrupt flag
return revale;
}
void init_T0()
{
TMOD = 0x15;
TH0 = 0xfc;
TL0 = 0x47;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void init_T1()
{
TH1 = 0x00;
TL1 = 0x00;
ET1 = 1;
TR1 = 1;
}
void baojing()
{
while(1)
{
LED0=~LED0;
delay_ms(500);
}
}
void main(void)
{
init_io();
init_T0(); // 初始化IO
//LCD_Init();
init_T1(); // 設(shè)置為接收模式
while(1)
{
if(flag1)
{
if(chN<1)
{
N++;
flag1=0;
TR0=0;
TR1=0;
TH1=0;
TL1=0;
TH0=0xfc;
TL0=0x47;
}
}
TX_BUF[0]=N;
LED0 =0;
TX_Mode(TX_BUF); // 把nRF24L01設(shè)置為發(fā)送模式并發(fā)送數(shù)據(jù)
Check_ACK(1);
TR0=1;
TR1=1; // 等待發(fā)送完畢,清除TX FIFO
/* Write_Add_Dat(0x80,'0'+temp/100);
Write_Add_Dat(0x81,'0'+temp%100/10);
Write_Add_Dat(0x82,'0'+temp%10); */
P2=0XFD;
P0=Table[TX_BUF[0]/100];
delay_ms(2);
P2=0XFB;
P0=Table[TX_BUF[0]%100/10];
delay_ms(2);
P2=0XF7;
P0=Table[TX_BUF[0]%10];
delay_ms(2);
}
}
void TIME0() interrupt 1
{
TR0=0;
TR1=0;
if(flag)
{
Nrf=TH1*256+TL1;
flag=0;
}
else
{
chN=TH1*256+TL1-Nrf;
if(chN<(-7)||chN>7)
{
flag1=1;
}
else
{
Nrf=TH1*256+TL1;
}
}
delay_ms(100);
TH1=0;
TL1=0;
TH0=0xfc;
TL0=0x47;
TR0=1;
TR1=1;
}
void TIME1() interrupt 3
{
TR0=0;
TR1=0;
baojing();
}
復(fù)制代碼
作者:
jiujiu
時(shí)間:
2014-12-19 02:32
接受程序:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit MOSI = P1^5;
sbit MISO = P1^6;
sbit SCK = P1^7;
sbit CE = P1^3; //模式
sbit CSN = P1^2; //SPI en
sbit IRQ = P3^2;
//sbit LCD_RS = P2^0; //LCD1602操作線
//sbit LCD_RW = P2^1;
//sbit LCD_E = P2^2;
sbit LED0 = P1^0;
// SPI(nRF24L01) commands
#define READ_REG 0x00 // Define read command to register
#define WRITE_REG 0x20 // Define write command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define FLUSH_TX 0xE1 // Define flush TX register command
#define FLUSH_RX 0xE2 // Define flush RX register command
#define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
#define NOP 0xFF // Define No Operation, might be used to read status register
// SPI(nRF24L01) registers(addresses)
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
#define SETUP_AW 0x03 // 'Setup address width' register address
#define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
#define RF_CH 0x05 // 'RF channel' register address
#define RF_SETUP 0x06 // 'RF setup' register address
#define STATUS 0x07 // 'Status' register address
#define OBSERVE_TX 0x08 // 'Observe TX' register address
#define CD 0x09 // 'Carrier Detect' register address
#define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
#define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
#define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
#define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
#define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
#define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
#define TX_ADDR 0x10 // 'TX address' register address
#define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
#define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
#define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
#define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
#define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
#define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
#define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
#define TX_ADR_WIDTH 5 // 5字節(jié)寬度的發(fā)送/接收地址
#define TX_PLOAD_WIDTH 1 // 數(shù)據(jù)通道有效數(shù)據(jù)寬度
//#define LED P1
uchar TX_ADDRESS[TX_ADR_WIDTH] = {0x01,0x43,0x10,0x10,0x12};
uchar RX_ADDRESS0[5] = {0x01,0x43,0x10,0x10,0x12}; // 定義一個(gè)靜態(tài)發(fā)送地址
uchar RX_ADDRESS1[5]= {0x02,0x43,0x10,0x10,0x12}; //接收地址1
uchar RX_ADDRESS2[1]= {0x03}; //接收地址2
uchar RX_ADDRESS3[1]= {0x04}; //接收地址3
uchar RX_ADDRESS4[1]= {0x05}; //接收地址4
uchar RX_ADDRESS5[1]= {0x06}; //接收地址5
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
uchar temp;
uchar Table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar bdata sta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT = sta^4;
uchar Number[4];
void init_io(void)
{
CE = 0; // 待機(jī)
CSN = 1; // SPI禁止
SCK = 0; // SPI時(shí)鐘置低
IRQ = 1; // 中斷復(fù)位
//LED = 0xff; // 關(guān)閉指示燈
}
void delay_ms(char x)
{
int j;
while(x--)
{
j = 1000;
while(--j);
}
}
void delay_us(int x)
{
while(x--);
}
/*uchar Read_LCD1602()
{
uchar busy = 0x80;
LCD_RS = 0;
LCD_RW = 1;
delay_ms(1);
LCD_E = 1;
delay_ms(1);
busy = P0;
delay_ms(1);
LCD_E = 0;
return(busy);
}
void Write_Data(uchar dat)
{
while(Read_LCD1602()&0x80);
LCD_RW = 0;
LCD_RS = 1;
P0 = dat;
delay_ms(1);
LCD_E = 1;
delay_ms(1);
LCD_E = 0;
}
void Write_Com(uchar com)
{
while(Read_LCD1602() & 0x80);
LCD_RW = 0;
LCD_RS = 0;
P0 = com;
delay_ms(1);
LCD_E = 1;
delay_ms(1);
LCD_E = 0;
}
void Write_Add_Dat(uchar add, uchar dat)
{
Write_Com(add);
Write_Data(dat);
}
void LCD_Init()
{
Write_Com(0x38);
Write_Com(0x0c);
Write_Com(0x06);
Write_Com(0x01);
} */
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循環(huán)8次
{
MOSI = (byte & 0x80); // byte最高位輸出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01從MOSI讀入1位數(shù)據(jù),同時(shí)從MISO輸出1位數(shù)據(jù)
byte |= MISO; // 讀MISO到byte最低位
SCK = 0; // SCK置?
}
return(byte); // 返回讀出的一字節(jié)
}
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時(shí)返回狀態(tài)字
SPI_RW(value); // 然后寫數(shù)據(jù)到該寄存器
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
SPI_RW(reg); // 選擇寄存器
reg_val = SPI_RW(0); // 然后從該寄存器讀數(shù)據(jù)
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(reg_val); // 返回寄存器數(shù)據(jù)
}
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時(shí)返回狀態(tài)字
for(i=0; i<bytes; i++)
{
pBuf[ i] = SPI_RW(0); // 逐個(gè)字節(jié)從nRF24L01讀出
}
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開(kāi)始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時(shí)返回狀態(tài)字
for(i=0; i<bytes; i++)
{
SPI_RW(pBuf[ i]); // 逐個(gè)字節(jié)寫入nRF24L01
}
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
void RX_Mode(void)
{
CE = 0;// 接收設(shè)備接收通道0使用和發(fā)送設(shè)備相同的發(fā)送地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);//寫接收通道0的接收地址,與發(fā)送地址相同
SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, TX_ADR_WIDTH); //寫接收通道1的接收地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P2, RX_ADDRESS2, 1);//寫接收通道2的接收地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P3, RX_ADDRESS3, 1);//寫接收通道3的接收地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P4, RX_ADDRESS4, 1);//寫接收通道4的接收地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P5, RX_ADDRESS5, 1);//寫接收通道5的接收地址
SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0選擇和發(fā)送通道相同有效數(shù)據(jù)寬度,32字節(jié)長(zhǎng)度
SPI_RW_Reg(WRITE_REG + RX_PW_P1, TX_PLOAD_WIDTH);//32字節(jié)長(zhǎng)度
SPI_RW_Reg(WRITE_REG + RX_PW_P2, TX_PLOAD_WIDTH);//32字節(jié)長(zhǎng)度
SPI_RW_Reg(WRITE_REG + RX_PW_P3, TX_PLOAD_WIDTH);//32字節(jié)長(zhǎng)度
SPI_RW_Reg(WRITE_REG + RX_PW_P4, TX_PLOAD_WIDTH);//32字節(jié)長(zhǎng)度
SPI_RW_Reg(WRITE_REG + RX_PW_P5, TX_PLOAD_WIDTH);//32字節(jié)長(zhǎng)度
SPI_RW_Reg(WRITE_REG + EN_AA, 0x3f); // 使能所有接收通道自動(dòng)應(yīng)答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x3f); // 使能所有接收通道
SPI_RW_Reg(WRITE_REG + RF_CH, 40); // 選擇射頻通道0x40
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // 數(shù)據(jù)傳輸率1Mbps,發(fā)射功率0dBm,低噪聲放大器增益
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // CRC使能,16位CRC校驗(yàn),上電
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x0a); // 自動(dòng)重發(fā)延時(shí)等待250us+86us,自動(dòng)重發(fā)10次
CE = 1; // 拉高CE啟動(dòng)接收設(shè)備
delay_us(200);
}
uchar Check_ACK(bit clear)
{
while(IRQ);
sta = SPI_RW(NOP); // 返回狀態(tài)寄存器
if(MAX_RT)
{
if(clear) // 是否清除TX FIFO,沒(méi)有清除在復(fù)位MAX_RT中斷標(biāo)志后重發(fā)
{
SPI_RW(FLUSH_TX);
}
}
SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除TX_DS或MAX_RT中斷標(biāo)志
IRQ = 1;
if(TX_DS)
{
return(0x00);
}
else
{
return(0xff);
}
}
unsigned char nRF24L01_RxPacket(unsigned char *RX_BUF)
{
unsigned char revale=0;
//SetRX_Mode();
sta = SPI_Read(STATUS); //read register STATUS's value
temp = sta;
if(RX_DR) //if receive data ready (RX_DR) interrupt
{
SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH); // read receive payload from RX_FIFO buffer
revale =1;
//we have receive data
}
SPI_RW_Reg(WRITE_REG+STATUS,sta); // clear RX_DR or TX_DS or MAX_RT interrupt flag
return revale;
}
void main(void)
{
uchar reveal;
init_io();
RX_Mode(); // 初始化IO
// 設(shè)置為接收模式
//LCD_Init();
while(1)
{
reveal=nRF24L01_RxPacket(RX_BUF);
if(reveal==1) // 接受完成
{
LED0 = ~LED0;
reveal = 0;
/* Write_Add_Dat(0x80,0x30+RX_BUF[0]/100);
Write_Add_Dat(0x81,0x30+RX_BUF[0]%100/10);
Write_Add_Dat(0x82,0x30+RX_BUF[0]%10);
Write_Add_Dat(0x85,0x30+RX_BUF[1]/100);
Write_Add_Dat(0x86,0x30+RX_BUF[1]%100/10);
Write_Add_Dat(0x87,0x30+RX_BUF[1]%10);
Write_Add_Dat(0x8A,0x30+RX_BUF[2]/100);
Write_Add_Dat(0x8B,0x30+RX_BUF[2]%100/10);
Write_Add_Dat(0x8C,0x30+RX_BUF[2]%10);
*/
}
Number[0]=RX_BUF[0];
P2=0XFD;
P0=Table[RX_BUF[0]/100];
delay_ms(2);
P2=0XFB;
P0=Table[RX_BUF[0]%100/10];
delay_ms(2);
P2=0XF7;
P0=Table[RX_BUF[0]%10];
delay_ms(2);
P2=0XFE;
P0=Table[RX_BUF[0]/100];
delay_ms(2);
P2=0X7F;
P0=Table[RX_BUF[0]%100/10];
delay_ms(2);
P2=0XBF;
P0=Table[RX_BUF[0]%10];
delay_ms(2);
}
}
復(fù)制代碼
作者:
51hei電控2112312
時(shí)間:
2014-12-20 19:45
很好,正需要
作者:
liyongbin10
時(shí)間:
2015-1-25 19:18
現(xiàn)在做畢設(shè),也是NRF24L01,剛剛完成硬件電路,接下來(lái)就慢慢調(diào)程序了,學(xué)習(xí)了
作者:
xudaxi
時(shí)間:
2015-1-27 12:35
學(xué)習(xí)了
作者:
hclin
時(shí)間:
2015-2-9 01:16
very good ! nice job !!!
作者:
delay
時(shí)間:
2015-4-4 17:47
謝謝分享,學(xué)習(xí)了
作者:
獨(dú)之雪
時(shí)間:
2015-4-5 01:00
想問(wèn)下怎么配置好不同單片機(jī)通過(guò)NRF24L01通信?比如 STC89C52RC 和 STC12C5A60S2 ?
作者:
單片菜菜機(jī)
時(shí)間:
2015-4-8 20:18
正需要的東西!
作者:
ludaijin
時(shí)間:
2015-10-18 15:29
一看,好強(qiáng)大啊
作者:
asd123
時(shí)間:
2015-11-21 16:35
很好,正需要,剛買了兩個(gè)模塊,謝謝樓主分享
作者:
伍詠薇
時(shí)間:
2015-12-30 16:47
樓主 第一個(gè) 有2個(gè)warnimg; 第二個(gè)有1個(gè)warning
作者:
Flyxin
時(shí)間:
2016-3-21 23:02
very good !
作者:
13465309885
時(shí)間:
2016-3-22 19:01
放大開(kāi)發(fā)單詞
作者:
13465309885
時(shí)間:
2016-3-22 19:02
頂啊 哈哈哈哈哈哈
作者:
linnyshow
時(shí)間:
2016-3-22 22:35
非常好,感謝分享。
作者:
qwqwqas
時(shí)間:
2016-12-9 19:44
學(xué)習(xí)了,這個(gè)無(wú)線傳輸是多少米的啊!
作者:
LB930302
時(shí)間:
2017-1-18 09:41
很好的資料!謝謝
作者:
emnides
時(shí)間:
2019-10-22 23:04
謝謝分享
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1