久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 51單片機應用之無線通訊模塊NRF24L01+(含程序源碼) [打印本頁]

作者: yangyuan123    時間: 2018-9-23 17:30
標題: 51單片機應用之無線通訊模塊NRF24L01+(含程序源碼)
本教程關于NRF24L01+的內容十分詳細,對于大家的學習和調試及其有幫助



內含詳細教程:




單片機源程序如下:

  1. 接下來我們寫發送程序:
  2. //**********************************
  3. //   NRF24L01+模塊發射程序
  4. //      用8個LED調試
  5. //   Txz001 2012.05.16
  6. //**********************************
  7. #include <reg52.h>
  8. typedef unsigned char uchar; //將無符號字節類型重定義為uchar
  9. typedef unsigned int uint;  //將無符號整數類型重定義為Uint
  10. //*********************NRF24L01函數定義****************************
  11. void delayms(uint t);//毫秒延時
  12. void init_NRF24L01(void);   //模塊初始化函數
  13. uchar SPI_RW(uchar reg);    //基本SPI讀寫時序
  14. uchar SPI_Read(uchar reg);  //從寄存器reg讀一個字節
  15. void SetRX_Mode(void);      //設置接收模式
  16. uchar SPI_RW_Reg(uchar reg, uchar value);  //向寄存器寫一個字節
  17. uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars); // 從緩沖器讀出uchars字節的數據
  18. uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars); //向緩沖器寫進uchars字節的數據
  19. void nRF24L01_TxPacket(uchar * tx_buf); //啟動一次發送
  20. uchar nRF24L01_RxPacket(uchar * rx_buf);//讀取接收的數據,放入rx_buf數組
  21. //***********NRF24L01模塊IO端口定義******************
  22. sbit CE=P1^0;
  23. sbit CSN =P1^1;
  24. sbit SCK =P1^2;
  25. sbit MOSI =P1^3;
  26. sbit MISO =P1^4;
  27. sbit IRQ =P1^5;
  28. //*****************NRF24L01常量**********************
  29. #define TX_ADR_WIDTH    5    //發送地址寬度 5字節
  30. #define RX_ADR_WIDTH    5    //接收地址寬度 5字節
  31. #define TX_PLOAD_WIDTH  32   // 發送數據寬度 32字節
  32. #define RX_PLOAD_WIDTH  32   //接收數據的寬度 32字節
  33. uchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x01,0x02,0x03,0x04,0x05}; //本地地址
  34. uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x01,0x02,0x03,0x04,0x05}; //接收地址
  35. //*****************NRF24L01寄存器指令*******************
  36. #define READ_REG        0x00   // 讀寄存器指令
  37. #define WRITE_REG       0x20  // 寫寄存器指令
  38. #define RD_RX_PLOAD     0x61   // 讀取接收數據指令
  39. #define WR_TX_PLOAD     0xA0   // 寫待發數據指令
  40. #define FLUSH_TX        0xE1   //清空發送緩沖區
  41. //**************SPI(nRF24L01)寄存器地址常量*****************
  42. #define CONFIG          0x00  // 配置收發狀態,CRC校驗模式以及收發狀態響應方式
  43. #define EN_AA           0x01  // 自動應答功能設置
  44. #define EN_RXADDR       0x02  // 可用信道設置
  45. #define SETUP_AW        0x03  // 收發地址寬度設置
  46. #define SETUP_RETR      0x04  // 自動重發功能設置
  47. #define RF_CH           0x05  // 工作頻率設置
  48. #define RF_SETUP        0x06  // 發射速率、功耗功能設置
  49. #define STATUS          0x07  // 狀態寄存器
  50. #define OBSERVE_TX      0x08  // 發送監測功能
  51. #define CD              0x09  // 地址檢測            
  52. #define RX_ADDR_P0      0x0A  // 頻道0接收數據地址
  53. #define RX_ADDR_P1      0x0B  // 頻道1接收數據地址
  54. #define RX_ADDR_P2      0x0C  // 頻道2接收數據地址
  55. #define RX_ADDR_P3      0x0D  // 頻道3接收數據地址
  56. #define RX_ADDR_P4      0x0E  // 頻道4接收數據地址
  57. #define RX_ADDR_P5      0x0F  // 頻道5接收數據地址
  58. #define TX_ADDR         0x10  // 發送地址寄存器
  59. #define RX_PW_P0        0x11  // 接收頻道0接收數據長度
  60. #define RX_PW_P1        0x12  // 接收頻道0接收數據長度
  61. #define RX_PW_P2        0x13  // 接收頻道0接收數據長度
  62. #define RX_PW_P3        0x14  // 接收頻道0接收數據長度
  63. #define RX_PW_P4        0x15  // 接收頻道0接收數據長度
  64. #define RX_PW_P5        0x16  // 接收頻道0接收數據長度
  65. #define FIFO_STATUS     0x17  // FIFO棧入棧出狀態寄存器設置
  66. /*****毫秒延時子程序*****/
  67. void delayms(uint t)     //約延時t毫秒
  68. {
  69.   uint i;
  70.   while(t--)
  71.     {
  72.      for(i=0;i<125;i++);
  73.     }        
  74. }
  75. /**********************************************
  76. /*函數:uint SPI_RW(uint uchar)
  77. /*功能:NRF24L01的SPI寫時序
  78. /**********************************************/
  79. uchar SPI_RW(uchar uuchar)
  80. {
  81. uchar bit_ctr;
  82.     for(bit_ctr=0;bit_ctr<8;bit_ctr++) // 輸出8個位
  83.     {
  84.   MOSI = (uuchar & 0x80);     //輸出uuhar的最高位
  85.   uuchar = (uuchar << 1);     //左移一位
  86.   SCK = 1;                    // 將時鐘線置‘1’
  87.   uuchar |= MISO;             //同時讀取STATUS
  88.   SCK = 0;                //然后再將時鐘線置‘0’
  89.     }
  90.     return(uuchar);               //返回讀取的值
  91. }
  92. /***********************************************
  93. /*函數:uchar SPI_Read(uchar reg)
  94. /*功能:NRF24L01的SPI讀取一個字節時序
  95. /***********************************************/
  96. uchar SPI_Read(uchar reg)
  97. {
  98. uchar reg_val;
  99. CSN = 0;             //CSN置'0',允許指令操作
  100. SPI_RW(reg);            //寫一條reg指令
  101. reg_val = SPI_RW(0);    //讀取reg的值到reg_val
  102. CSN = 1;                //CSN置'1',禁示操作
  103. return(reg_val);        //返回讀取的值
  104. }
  105. /***********************************************
  106. /*功能:NRF24L01寫一個字節到寄存器函數
  107. /***********************************************/
  108. uchar SPI_RW_Reg(uchar reg, uchar value)
  109. {
  110. uchar status;
  111.   
  112. CSN = 0;                   // CSN置'0',允許操作
  113. status = SPI_RW(reg);      //這指令,并讀STATUS
  114. SPI_RW(value);             //寫數據值到reg
  115. CSN = 1;                   // CSN置'1',禁止操作
  116. return(status);            // return nRF24L01 status uchar
  117. }
  118. /*****************************************************************
  119. /*函數:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
  120. /*功能: 用于寫數據:reg:為寄存器地址,
  121. /*                  pBuf:為待寫入數據地址,
  122. /*                  uchars:寫入數據的個數
  123. /*****************************************************************/
  124. uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
  125. {
  126. uchar status,uchar_ctr;
  127. CSN = 0;            //SPI使能        
  128. status = SPI_RW(reg);   
  129. for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //
  130.   SPI_RW(*pBuf++);
  131. CSN = 1;           //關閉SPI
  132. return(status);    //  
  133. }
  134. //******************************************
  135. /*NRF24L01初始化
  136. //******************************************/
  137. void init_NRF24L01(void)
  138. {
  139.   delayms(1);
  140.   CE=0;    //  射頻停止工作
  141.   CSN=1;   // 停止寄存器讀寫
  142.   SCK=0;   //時種信號停止讀寫
  143.   IRQ=1;//中斷復位
  144.   SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);      //  頻道0自動 ACK應答禁止  
  145.   SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);      //禁止自動發送
  146.   SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允許接收地址只有頻道0,   
  147.   SPI_RW_Reg(WRITE_REG + RF_CH, 1);        //   設置信道工作為2.4GHZ,收發必須一致
  148.   SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設置接收數據長度,本次設置為32字節
  149.   SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);     //設置發射速率為2MHZ,發射功率為最大值0dB  
  150. }
  151. /******************************************************
  152. /*函數:void nRF24L01_TxPacket(unsigned char * tx_buf)
  153. /*功能:發送 tx_buf中數據
  154. /*******************************************************/
  155. void nRF24L01_TxPacket(unsigned char * tx_buf)
  156. {
  157. CE=0;   //StandBy I模式  
  158. SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 寫本地地址  
  159. SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 裝載接收端地址
  160. SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);// 裝載數據  
  161. SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);      // IRQ收發完成中斷響應,16位CRC,主發送
  162. CE=1;   //置高CE,激發數據發送
  163. delayms(1);
  164. }

  165. //************************************
  166. //              主函數
  167. //************************************
  168. void main()
  169. {
  170.   uchar  TxBuf[32];
  171.   uchar status;  //定義一個變量用來裝讀取到的STATUS數值
  172.   init_NRF24L01();//NRF24L01初始化
  173.   SPI_RW_Reg(WRITE_REG+STATUS,0XFF);   //清狀態寄存器
  174.   status=SPI_Read(STATUS); //讀取狀態
  175.   P0=~status;//P0口顯示讀取的狀態
  176.   delayms(4000);//顯示延時4秒,以便從容看清楚
  177.   P0=0xff;//清除顯示
  178.   delayms(600);
  179.   TxBuf[0]=1;  //我們設置個初值1在想要發送的數組的第1個里變量里。
  180.   while(1)
  181.    { TxBuf[0]=~TxBuf[0];   //這句把要發送的第1個變量的值取反,如果原來是1,現再就為0
  182.      nRF24L01_TxPacket(TxBuf);//裝載數據并進行一次發送操作
  183.      status=SPI_Read(STATUS); //發送完后再讀取狀態
  184.      P0=~status;  //顯示發送完后的狀態
  185.      delayms(500);  //顯示發送后的信息停留1秒
  186.      P0=0xFF;   //清除顯示
  187.      delayms(500);
  188.    }  
  189. }
復制代碼

所有資料51hei提供下載:
51單片機應用之無線通訊模塊NRF24L01 .rar (7.79 MB, 下載次數: 709)



作者: mtk1625    時間: 2019-1-23 13:58
圖片很豐富
作者: qwe1234qwe    時間: 2019-1-28 21:50
感覺要顯示圖片界面的話還是推薦上89c52吧,但還是好評,待我借鑒一下,我回頭帶來升級版,哈哈哈
作者: qwe1234qwe    時間: 2019-1-28 21:51
挺好,謝樓主,但感覺要顯示圖片的話這塊單片機有點勉強了,待我借鑒一下回來帶上升級版,哈哈
作者: 234347892    時間: 2019-1-29 16:30
也許我愚鈍,感覺亂七八糟的。
作者: wwdec    時間: 2019-3-10 13:19
聽高級的
作者: sheepppppp2    時間: 2019-5-25 17:27
你好,我想問一下,兩個單片機通訊時地址是設置成一樣的嗎?
作者: 向日葵男人    時間: 2019-6-16 09:32
看著很不錯的教學,下載來看看
作者: ecfuhgdeiuci    時間: 2019-7-5 11:00
sheepppppp2 發表于 2019-5-25 17:27
你好,我想問一下,兩個單片機通訊時地址是設置成一樣的嗎?

對,地址得要一樣才行
作者: yulin3192    時間: 2019-7-7 13:17
謝謝,文檔很詳細
作者: xyz12    時間: 2019-8-2 16:36
請問接收部分該怎么寫(⊙_⊙?)
作者: xiaogan_gu    時間: 2019-8-19 20:40
里面的vb程序不全,有沒有完整的vb程序?
作者: meilidianzhi    時間: 2019-8-20 19:23
學習一下非常感謝啊
作者: xuezhuai    時間: 2019-12-1 23:33
頂一下
作者: Mr.haohao    時間: 2020-4-10 17:43
圖形處理軟件自己做的嗎?
作者: songqinggyun    時間: 2020-6-17 16:16
感謝分享哦,接收程序在哪里呢
作者: chjchj816    時間: 2020-12-30 08:45
發送和收接的源碼都有的嗎?
作者: 人人學會單片機    時間: 2020-12-30 12:40
這是我昨天分享到51hei 上的 無線模塊通信基礎代碼。有需要的拿去
http://www.zg4o1577.cn/bbs/dpj-200684-1.html
作者: 人人學會單片機    時間: 2020-12-30 12:42
chjchj816 發表于 2020-12-30 08:45
發送和收接的源碼都有的嗎?

我也在51黑上面分享了無線通信的代碼和資料包。有需要可以拿去哦 http://www.zg4o1577.cn/bbs/dpj-200684-1.html
作者: 人人學會單片機    時間: 2020-12-30 12:43
sheepppppp2 發表于 2019-5-25 17:27
你好,我想問一下,兩個單片機通訊時地址是設置成一樣的嗎?

無線模塊的所有參數都要設置一樣的,除了工作模式。
我也在51黑上面分享了無線通信的代碼和資料包。 http://www.zg4o1577.cn/bbs/dpj-200684-1.html
作者: 人人學會單片機    時間: 2020-12-30 12:44
xyz12 發表于 2019-8-2 16:36
請問接收部分該怎么寫(⊙_⊙?)

我也在51黑上面分享了無線通信的代碼和資料包。有需要可以拿去哦 http://www.zg4o1577.cn/bbs/dpj-200684-1.html 接收和發射 只是工作模式不同
作者: 阿瓦塞翻譯    時間: 2021-3-8 14:08

謝謝,文檔很詳細
作者: jkluzi    時間: 2023-7-28 15:26
剛好要做C51單片機的多機通訊,很有幫助,謝謝。
作者: kingaaaaa    時間: 2023-8-2 21:40
還算整潔,很有幫忙 謝謝。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人性生交大片免费看r链接 | 在线观看国产视频 | 一区二区在线 | 亚洲国产精品久久久 | 国产精品久久久久久久午夜片 | 精品久久久久久亚洲综合网 | 午夜视频在线播放 | 在线观看国产 | 国产精品美女一区二区 | 国产高清在线 | 国产日韩欧美精品一区二区 | 在线日韩中文字幕 | 欧美在线一区二区三区 | 亚洲视频在线观看 | 91夜色在线观看 | 色婷婷亚洲一区二区三区 | japanhd成人 | 99久热 | 精品免费视频 | 国产在线观看不卡一区二区三区 | 国产精品免费高清 | 一区二区三区四区在线免费观看 | 日韩免费视频一区二区 | 日韩中文字幕一区二区 | 成人在线小视频 | 91综合网 | 九九综合九九 | 中文字幕国产精品 | 国产免费一区二区 | 日韩一级免费看 | 一本一道久久a久久精品蜜桃 | 亚洲精品视频一区二区三区 | 人操人免费视频 | 香蕉大人久久国产成人av | 国产va| 精品久| 日韩在线视频播放 | 一区二区在线 | 欧美嘿咻| 成人羞羞国产免费视频 | 久久精品国产一区二区电影 |