|
本人搜集整理的關于nRF905的功能介紹、使用的C語言源代碼及電路圖等資料,下面附上壓縮文件和電路圖還有接收端和發送端的C語言程序
需要的朋友可以下載
電路原理圖如下:
批注 2020-03-25 135121.png (67.69 KB, 下載次數: 148)
下載附件
電路圖
2020-3-25 13:53 上傳
發送端:
- #include<reg52.h>
- #define WC 0x00
- #define RC 0x10
- #define WTP 0x20
- #define RTP 0x21
- #define WTA 0x22
- #define RTA 0x23
- #define RRP 0x24
- //#define BYTE_BIT0 0x01
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char idata RFConf[11]=
- {
- 0x00, //配置命令//
- 0x4c, //CH_NO,配置頻段在423MHZ
- 0x0c, //輸出功率為10db,不重發,節電為正常模式
- 0x44, //地址寬度設置,為4字節
- 0x03,0x03, //接收發送有效數據長度為3字節
- 0xCC,0xCC,0xCC,0xCC, //接收地址
- 0x58, //CRC充許,8位CRC校驗,外部時鐘信號不使能,16M晶振
- };
- unsigned char led[]={0X01,0X37,0X42,0X22,0X34,0X28,0X08,0X33,0X00,0X20};//預發送數據碼
- unsigned char send_bruff[3]={0X01,0X01,0X01};
- unsigned char TxAddress[4]={0xcc,0xcc,0xcc,0xcc}; //地址碼
- //unsigned char rx_bruff;
- bdata unsigned char DATA_BUF;
- sbit flag=DATA_BUF^7;
- sbit AM=P3^7; // 8
- sbit CD=P3^6; // 7
- sbit CSN=P1^0; //13
- sbit SCK=P1^1; // 12
- sbit MISO=P1^2; // 10
- sbit MOSI=P1^3; // 11
- sbit DR=P1^4; // 9
- sbit PWR=P1^5; // 5
- sbit TRX_CE=P1^6;// 4
- sbit TXEN=P1^7; // 3
- sbit add_n=P2^7;
- sbit send=P2^6;
- sbit led0 =P3^0;
- sbit led1 =P3^1;
- sbit led2 =P3^2;
- //---------------延時--------------//
- void Delay(unsigned char n)
- {
- unsigned int i;
- while(n--)
- for(i=0;i<80;i++);
- }
- //--------------------------------11.0592M晶振 n=100 868us 左右-------------------------------
- //------------------------------------------ 毫秒延時 -----------------------------------------
- void Delay_ms(uchar n)
- {
- unsigned int i,j,k;
- for(i=0;i<n;i++)
- {
- for(k=0;k<5;k++)
- {
- for(j=0;j<200;j++);
- }
- }
- }
- //------------SPI寫操作代碼---------//
- void SpiWrite(unsigned char send)
- {
- unsigned char i;
- DATA_BUF=send;
- for (i=0;i<8;i++)
- {
- if (flag) //總是發送最高位
- {
- MOSI=1;
- }
- else
- {
- MOSI=0;
- }
- SCK=1;
- DATA_BUF=DATA_BUF<<1;
- SCK=0;
- }
- }
- //-------------初始化設置---------------//
- void nRF905Init(void)
- {
- CSN=1; // Spi disable
- SCK=0; // Spi clock line init low
- DR=0; // DR=1 接收準備。DR=0 發送準備
- AM=0; // Init AM for input
- CD=0; // Init CD for input
- PWR=1; // nRF905 power on
- TRX_CE=0; // Set nRF905 in standby mode
- TXEN=0; // set radio in Rx mode
- }
- //----------設置配置寄存器-------//
- void Config905(void)
- {
- unsigned char i;
- CSN=0;
- //SpiWrite(WC);
- for (i=0;i<11;i++)
- {
- SpiWrite(RFConf[i]);
- }
- CSN=1;
- }
- //------------發送數據-------------//
- void TxPacket()
- {
- unsigned char i,j;
- CSN=0;
-
- SpiWrite(WTP);
- for(j=0;j<3;j++)
- {
- SpiWrite(send_bruff[j]); //循環3次發送3個字節
- }
- CSN=1;
- Delay(1);
- CSN=0;
- SpiWrite(WTA); // Write address command
- for (i=0;i<4;i++) // Write 4 bytes address
- {
- SpiWrite(TxAddress[i]);
- }
- CSN=1;
- Delay(1);
- TRX_CE=1;
- Delay(1);
- TRX_CE=0;
- }
- //-----------------set send mode-----------------//
- void SetTxMode(void)
- {
-
- TRX_CE=0;
- TXEN=1;
- Delay(1); // delay for mode change(>=650us)
- }
- /*
- //------------SPI讀操作代碼---------//
- unsigned char SpiRead(void)
- {
- unsigned char j;
- for (j=0;j<8;j++)
- {
- DATA_BUF=DATA_BUF<<1;
- SCK=1;
- if (MISO) //讀取最高位,保存至最末尾,通過左移位完成整個字節
- {
- DATA_BUF|=BYTE_BIT0;
- }
- else
- {
- DATA_BUF&=~BYTE_BIT0;
- }
- SCK=0;
- }
- return DATA_BUF;
- }
- //----------- resive mode ------------------//
- void SetRxMode(void)
- {
- TXEN=0;
- TRX_CE=1;
- Delay(1); // delay for mode change(>=650us)
- }
- //--------------讀取RF905接收數據------------//
- void RxPacket(void)
- {
- unsigned char i;
- Delay(1);
- // TRX_CE=0; // Set nRF905 in standby mode
- Delay(100);
- TRX_CE=0;
- CSN=0; // Spi enable for write a spi command
- Delay(1);
- SpiWrite(RRP);
- for (i = 0 ;i < 1 ;i++)
- {
- rx_bruff=SpiRead(); // Read data and save to buffer
- }
- CSN=1;
-
- Delay(10);
- TRX_CE=1;
- }
- //-------檢查是否有新數據傳入-----------//
- unsigned char CheckDR(void) //檢查是否有新數據傳入 Data Ready
- {
- if (DR) //當數據完全接收DR為1
- {
- ;
- return 1;
- }
- else
- {
- return 0;
- }
- }
- //----------數據接收------------------//
- void RX(void)
- {
- SetRxMode(); // Set nRF905 in Rx mode
- while (CheckDR()==0); //RX wait
- Delay(10);
- RxPacket();
- Delay(10);
- }
- */
- //-----------------按鍵發送函數---------------------------------
- void sender_bruff()
- {
-
- SetTxMode();
- Delay_ms(10);
- TxPacket(); //發送數據
- Delay_ms(100);
- }
- /*
- //----------------接收數據語音芯片----------------//
- void led_ISD()
- {
- led0=1;
- led1=1;
- led2=1;
- // rx_Buffer=0x00;
- P0=0xff;
- P3=0xff;
- Delay(10);
- P3=0x00;
- }
- */
- //---------------按鍵加一函數--------------------------//
- void add_number(void)
- {
- int i,j;
-
- if(!add_n)
- {
- Delay_ms(100);
- while(add_n)
- send_bruff[2]=led[i++];
- send_bruff[1]=led[j++];
- Delay(100);
- if(++i<3) i=0;
-
- }
-
-
- }
- //************************main function/***********************//
- void main()
- {
-
- nRF905Init();
- Config905();
- while(1)
- {
-
- led0=1;
- led1=1;
- led2=1;
- // DR=1; RX(); led1=0;
- //if(rx_bruff==0x12) led_ISD();
- if(!add_n)
- add_number();
- while(!send);
- Delay_ms(10);
- if(!send)
- {
- led0=0;
- // DR=0;
-
- sender_bruff();
- led0=0;
- led1=0;
- led2=0;
- Delay_ms(100);
- }
-
-
- }
-
- }
復制代碼 接收端:- #include<reg51.h>
- #define WC 0x00
- #define RC 0x10
- #define WTP 0x20
- #define RTP 0x21
- #define WTA 0x22
- #define RTA 0x23
- #define RRP 0x24
- #define BYTE_BIT0 0x01
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char idata RFConf[11]=
- {
- 0x00, //配置命令//
- 0x4c, //CH_NO,配置頻段在423MHZ
- 0x0c, //輸出功率為10db,不重發,節電為正常模式
- 0x44, //地址寬度設置,為4字節
- 0x03,0x03, //接收發送有效數據長度為3字節
- 0xCC,0xCC,0xCC,0xCC, //接收地址
- 0x58, //CRC充許,8位CRC校驗,外部時鐘信號不使能,16M晶振
- };
- unsigned char rx_Buffer[]={0}; //用于存放接收到的數據
- uchar position[3]={0xFE,0xFC,0xFB};
- bdata unsigned char DATA_BUF;
- sbit flag=DATA_BUF^7;
- sbit AM=P3^7;
- sbit CD=P3^6;
- sbit CSN=P1^0;
- sbit SCK=P1^1;
- sbit MISO=P1^2;
- sbit MOSI=P1^3;
- sbit DR=P1^4;
- sbit PWR=P1^5;
- sbit TRX_CE=P1^6;
- sbit TXEN=P1^7;
- sbit send_reset =P3^4;
- //---------------延時--------------//
- void Delay(unsigned char n)
- {
- unsigned int i;
- while(n--)
- for(i=0;i<80;i++);
- }
- void Delay_ms(uchar n)
- {
- unsigned int i,j,k;
- for(i=0;i<n;i++)
- {
- for(k=0;k<5;k++)
- {
- for(j=0;j<200;j++);
- }
- }
- }
- void Delay_us(uchar n)
- {
- uint i;
- for(i=0;i<n;i++);
- }
- //------------SPI寫操作代碼---------//
- void SpiWrite(unsigned char send)
- {
- unsigned char i;
- DATA_BUF=send;
- for (i=0;i<8;i++)
- {
- if (flag) //總是發送最高位
- {
- MOSI=1;
- }
- else
- {
- MOSI=0;
- }
- SCK=1;
- DATA_BUF=DATA_BUF<<1;
- SCK=0;
- }
- }
- //------------SPI讀操作代碼---------//
- unsigned char SpiRead(void)
- {
- unsigned char j;
- for (j=0;j<8;j++)
- {
- DATA_BUF=DATA_BUF<<1;
- SCK=1;
- if (MISO) //讀取最高位,保存至最末尾,通過左移位完成整個字節
- {
- DATA_BUF|=BYTE_BIT0;
- }
- else
- {
- DATA_BUF&=~BYTE_BIT0;
- }
- SCK=0;
- }
- return DATA_BUF;
- }
- //-----------resive 狀態設置------------------//
- void SetRxMode(void)
- {
- TXEN=0;
- TRX_CE=1;
- Delay(1); // delay for mode change(>=650us)
- }
- //-------------初始化設置---------------//
- void nRF905Init(void)
- {
- CSN=1; // Spi disable
- SCK=0; // Spi clock line init low
- DR=1; // 激活單片機IO
- AM=0; // Init AM for input
- CD=0; // Init CD for input
- PWR=1; // nRF905 power on
- TRX_CE=0; // Set nRF905 in standby mode
- TXEN=0; // set radio in Rx mode
- }
- //----------設置配置寄存器-------//
- void Config905(void)
- {
- unsigned char i;
- CSN=0;
- //SpiWrite(WC);
- for (i=0;i<11;i++)
- {
- SpiWrite(RFConf[i]);
- }
- CSN=1;
- }
- //--------------讀取RF905接收數據------------//
- void RxPacket(void)
- {
- unsigned char i;
- Delay(1);
- // TRX_CE=0; // Set nRF905 in standby mode
- Delay(100);
- TRX_CE=0;
- CSN=0; // Spi enable for write a spi command
- Delay(1);
- SpiWrite(RRP);
- for (i = 0 ;i < 3 ;i++)
- {
- rx_Buffer[i]=SpiRead(); // Read data and save to buffer
- }
- CSN=1;
- Delay(100);
- Delay(100);
- Delay(10);
- Delay_ms(1000);
- TRX_CE=1;
- }
- //-------檢查是否有新數據傳入-----------//
- unsigned char CheckDR(void) //檢查是否有新數據傳入 Data Ready
- {
- if (DR) //當數據完全接收DR為1
- {
-
- return 1;
- }
- else
- {
- return 0;
- }
- }
- //------------------------------數據接收------------------//
- void RX(void)
- {
- SetRxMode(); // Set nRF905 in Rx mode
- while (CheckDR()==0); //RX wait
- Delay(100);
- RxPacket();
- Delay_ms(1000);
-
- Delay_ms(1000);
- }
- void display()
- {
- uchar i;
- for(i=0;i<3;i++)
- {
- P2=rx_Buffer[i];
- P0=position[i];
- Delay_us(1000);
- P0=0xff;
- }
- }
-
- //-------------主函數---------------//
- void main()
- {
- P0=0X00;
- P2=0X37;
- Delay_ms(100);
- nRF905Init();
- Config905();
- while(1)
- {
- P0=0XFF;
- RX();
- P0=0X00;
- Delay_ms(100);
- P0=0XFF;
- display();
- /* while(send_reset==0);
- Delay_ms(10);
- if(send_reset==0)
- {
- while(key==1);
- }
- */
- }
- }
復制代碼
批注 2020-03-25 005203.png (30.3 KB, 下載次數: 168)
下載附件
包含文件
2020-3-25 00:54 上傳
全部資料51hei下載地址:
nRF905無線傳輸模塊的使用.7z
(6.09 MB, 下載次數: 108)
2020-3-25 16:07 上傳
點擊文件名下載附件
壓縮文件 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|