欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: nRF24L01無線模塊(51單片機收發源碼) [打印本頁]

作者: 西瓜太狼    時間: 2018-4-22 14:33
標題: nRF24L01無線模塊(51單片機收發源碼)
nRF24L01無線模塊

單片機源程序如下:
  1. #include <reg51.h>
  2. #include <api.h>
  3. #include "1602.h"
  4. #define uchar unsigned char
  5. #define TX_ADR_WIDTH 5 // 5字節寬度的發送/接收地址
  6. #define TX_PLOAD_WIDTH 20// 數據通道有效數據寬度
  7. uchar TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //定義一個靜態發送地址
  8. uchar RX_BUF[TX_PLOAD_WIDTH];
  9. uchar RX_date[3]={0x30,0x30,0x30};
  10. uchar flag;
  11. uchar bdata sta;
  12. sbit  RX_DR=sta^6;
  13. sbit  TX_DS=sta^5;
  14. sbit  MAX_RT=sta^4;
  15. sbit  led=P1^5;
  16. void init_io(void)
  17. {
  18.         CE  = 0; //待機
  19.         CSN = 1;//SPI禁止
  20.         SCK = 0;//SPI時鐘置低
  21.         IRQ = 1;//中斷復位
  22. }
  23. uchar SPI_RW(uchar byte)
  24. {
  25.         uchar i;
  26.            for(i=0; i<8; i++)          // 循環8次
  27.            {
  28.                    MOSI = (byte & 0x80);   // byte最高位輸出到MOSI
  29.                    byte <<= 1;       // 低一位移位到最高位
  30.                    SCK = 1;         // 拉高SCK,nRF24L01從MOSI讀入1位數據,同時從MISO輸出1位數據
  31.                    byte |= MISO;   // 讀MISO到byte最低位
  32.                    SCK = 0;             // SCK置低
  33.            }
  34.     return(byte);                   // 返回讀出的一字節
  35. }
  36. uchar SPI_RW_Reg(uchar reg, uchar value)   
  37. {
  38.         uchar status;
  39.           CSN = 0;                   // CSN置低,開始傳輸數據
  40.           status = SPI_RW(reg);      // 選擇寄存器,同時返回狀態字
  41.           SPI_RW(value);             // 然后寫數據到該寄存器
  42.           CSN = 1;                   // CSN拉高,結束數據傳輸
  43.           return(status);            // 返回狀態寄存器
  44. }
  45. uchar SPI_Read(uchar reg)
  46. {
  47.         uchar reg_val;
  48.           CSN = 0;                    // CSN置低,開始傳輸數據
  49.           SPI_RW(reg);                // 選擇寄存器
  50.           reg_val = SPI_RW(0);        // 然后從該寄存器讀數據
  51.           CSN = 1;                    // CSN拉高,結束數據傳輸
  52.           return(reg_val);            // 返回寄存器數據
  53. }
  54. uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
  55. {
  56.         uchar status, i;
  57.           CSN = 0;                    // CSN置低,開始傳輸數據
  58.           status = SPI_RW(reg);       // 選擇寄存器,同時返回狀態字
  59.           for(i=0; i<bytes; i++)
  60.             pBuf[i] = SPI_RW(0);    // 逐個字節從nRF24L01讀出
  61.           CSN = 1;                    // CSN拉高,結束數據傳輸
  62.           return(status);             // 返回狀態寄存器
  63. }
  64. uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
  65. {
  66.         uchar status, i;
  67.           CSN = 0;                    // CSN置低,開始傳輸數據
  68.           status = SPI_RW(reg);       // 選擇寄存器,同時返回狀態字
  69.           for(i=0; i<bytes; i++)
  70.             SPI_RW(pBuf[i]);        // 逐個字節寫入nRF24L01
  71.           CSN = 1;                    // CSN拉高,結束數據傳輸
  72.           return(status);             // 返回狀態寄存器
  73. }
  74. void RX_Mode(void)
  75. {
  76.         CE = 0;
  77.           SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  // 接收設備接收通道0使用和發送設備相同的發送地址
  78.           SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);               // 使能接收通道0自動應答
  79.           SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);           // 使能接收通道0
  80.           SPI_RW_Reg(WRITE_REG + RF_CH, 40);                 // 選擇射頻通道0x40
  81.           SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);  // 接收通道0選擇和發送通道相同有效數據寬度
  82.           SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);            // 數據傳輸率1Mbps,發射功率0dBm,低噪聲放大器增益
  83.           SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);              // CRC使能,16位CRC校驗,上電,接收模式
  84.           CE = 1;                                            // 拉高CE啟動接收設備
  85. }
  86. void main(void)
  87. {
  88.   int i;
  89.    Inte();
  90.         init_io();                              // 初始化IO
  91.         RX_Mode();                              // 設置為接收模式
  92.         while(1)
  93.         {
  94.                 sta = SPI_Read(STATUS);// 讀狀態寄存器
  95.             if(RX_DR)// 判斷是否接受到數據
  96.                 {
  97.                         SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);//從RX FIFO讀出數據
  98.                         flag = 1;
  99.                 }
  100.                 SPI_RW_Reg(WRITE_REG + STATUS,sta);// 清除RX_DS中斷標志
  101.                 if(flag) //接受完成
  102.                 {
  103.                         flag=0;// 清標志
  104.          RX_date[i++]=RX_BUF[0];
  105.                          
  106.                         if(i==3)
  107.                         {
  108. ……………………

  109. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
無線模塊(51收發).zip (89.88 KB, 下載次數: 290)



作者: 18830266820    時間: 2018-4-25 11:20
你們都好會啊,我才開始學習
作者: 冷鋒484    時間: 2018-4-27 15:02
可不可以免費給我發啊

作者: 冷鋒484    時間: 2018-4-27 18:39
冷鋒484 發表于 2018-4-27 15:02
可不可以免費給我發啊

我的郵箱是3372008661@qq.com,萬分感謝
作者: WITHER    時間: 2018-8-2 16:54
學完32學51,一臉懵逼啊
作者: 中恒電子asus    時間: 2018-8-4 13:37
不錯

作者: mtk1625    時間: 2019-1-23 15:34
很不錯的程序

作者: zn1998    時間: 2019-3-8 23:21
WITHER 發表于 2018-8-2 16:54
學完32學51,一臉懵逼啊

先從51入手較好
作者: 菜用雞    時間: 2019-3-17 21:32
這個是收發都在一個程序里面嗎?

作者: 79229道天    時間: 2019-3-19 20:43
WITHER 發表于 2018-8-2 16:54
學完32學51,一臉懵逼啊

太久沒接觸都忘記了
作者: 18784506782    時間: 2019-3-29 14:06
一直在學習還是不太會
作者: 18784506782    時間: 2019-3-29 14:07
51的地址線和時鐘線怎么區分的呢
作者: jemery1030    時間: 2019-7-23 17:15
感謝分享好物




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1