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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8511|回復: 14
收起左側

nrf24l01遙控小車制作資料

  [復制鏈接]
ID:164989 發表于 2017-5-23 21:28 | 顯示全部樓層 |閱讀模式
分享基于51單片機的nrf24l01遙控小車的一些制作文件,帶發送和接受的源程序,及ad畫的原理圖和pcb文件等資料

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png 0.png
0.png

單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. typedef unsigned int uint;
  4. typedef unsigned char uchar;

  5. #define TX_ADDR_WITDH 5//發送地址寬度設置為5個字節
  6. #define RX_ADDR_WITDH 5//接收地址寬度設置為5個字節
  7. #define TX_DATA_WITDH 8//
  8. #define RX_DATA_WITDH 8
  9. /******************************************************************
  10. // nRF24L01指令格式:
  11. *******************************************************************/
  12. #define R_REGISTER    0x00  // 讀寄存器
  13. #define W_REGISTER    0x20  // 寫寄存器
  14. #define R_RX_PLOAD    0x61  // 讀RX FIFO有效數據,1-32字節,當讀數據完成后,數據被清除,應用于接收模式
  15. #define W_TX_PLOAD    0xA0  // 寫TX FIFO有效數據,1-32字節,寫操作從字節0開始,應用于發射模式
  16. #define FLUSH_TX    0xE1  // 清除TX FIFO寄存器,應用于發射模式
  17. #define FLUSH_RX    0xE2  // 清除RX FIFO寄存器,應用于接收模式
  18. #define REUSE_TX_PL 0xE3  // 重新使用上一包有效數據,當CE為高過程中,數據包被不斷的重新發射
  19. #define NOP         0xFF  // 空操作,可以用來讀狀態寄存器
  20. /******************************************************************
  21. // nRF24L01寄存器地址
  22. *******************************************************************/
  23. #define CONFIG      0x00  // 配置寄存器
  24. #define EN_AA       0x01  // "自動應答"功能寄存
  25. #define EN_RX_ADDR  0x02  // 接收通道使能寄存器
  26. #define SETUP_AW    0x03  // 地址寬度設置寄存器
  27. #define SETUP_RETR  0x04  // 自動重發設置寄存器
  28. #define RF_CH       0x05  // 射頻通道頻率設置寄存器
  29. #define RF_SETUP    0x06  // 射頻設置寄存器
  30. #define STATUS      0x07  // 狀態寄存器
  31. #define OBSERVE_TX  0x08  // 發送檢測寄存器
  32. #define CD          0x09  // 載波檢測寄存器
  33. #define RX_ADDR_P0  0x0A  // 數據通道0接收地址寄存器
  34. #define RX_ADDR_P1  0x0B  // 數據通道1接收地址寄存器
  35. #define RX_ADDR_P2  0x0C  // 數據通道2接收地址寄存器
  36. #define RX_ADDR_P3  0x0D  // 數據通道3接收地址寄存器
  37. #define RX_ADDR_P4  0x0E  // 數據通道4接收地址寄存器
  38. #define RX_ADDR_P5  0x0F  // 數據通道5接收地址寄存器
  39. #define TX_ADDR     0x10  // 發送地址寄存器
  40. #define RX_PW_P0    0x11  // 數據通道0有效數據寬度設置寄存器
  41. #define RX_PW_P1    0x12  // 數據通道1有效數據寬度設置寄存器
  42. #define RX_PW_P2    0x13  // 數據通道2有效數據寬度設置寄存器
  43. #define RX_PW_P3    0x14  // 數據通道3有效數據寬度設置寄存器
  44. #define RX_PW_P4    0x15  // 數據通道4有效數據寬度設置寄存器
  45. #define RX_PW_P5    0x16  // 數據通道5有效數據寬度設置寄存器
  46. #define FIFO_STATUS 0x17  // FIFO狀態寄存器
  47. //*********************************************************************************
  48. uchar sta;    // 狀態變量
  49. #define RX_DR  (sta & 0x40)  // 接收成功中斷標志
  50. #define TX_DS  (sta & 0x20)  // 發射成功中斷標志
  51. #define MAX_RT (sta & 0x10)  // 重發溢出中斷標志
  52. sbit CE=P2^0;
  53. sbit IRQ=P1^0;
  54. sbit CSN=P2^1;
  55. sbit MOSI=P2^3;
  56. sbit MISO=P2^4;
  57. sbit SCK=P2^2;
  58. sbit LED=P0^0;
  59. sbit Key=P3^2;

  60. uchar code TX_Addr[]={0x34,0x43,0x10,0x10,0x01};
  61. uchar code TX_Buffer[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x00};
  62. uchar RX_Buffer[RX_DATA_WITDH];

  63. void _delay_us(uint x)
  64. {
  65.     uint i,j;
  66.     for (j=0;j<x;j++)
  67.         for (i=0;i<12;i++);
  68. }
  69. void _delay_ms(uint x)
  70. {
  71.     uint i,j;
  72.     for (j=0;j<x;j++)
  73.         for (i=0;i<120;i++);
  74. }
  75. /*nRF24L01初始化*/
  76. void nRF24L01_Init(void)
  77. {
  78.     CE=0;//待機模式Ⅰ
  79.     CSN=1;
  80.     SCK=0;
  81.     IRQ=1;
  82. }
  83. /*SPI時序函數*/
  84. uchar SPI_RW(uchar byte)
  85. {
  86.     uchar i;
  87.     for(i=0;i<8;i++)//一字節8位循環8次寫入
  88.     {
  89.         if(byte&0x80)//如果數據最高位是1
  90.             MOSI=1;//向NRF24L01寫1
  91.         else //否則寫0
  92.             MOSI=0;
  93.         byte<<=1;//低一位移到最高位
  94.         SCK=1;//SCK拉高,寫入一位數據,同時讀取一位數據
  95.         if(MISO)
  96.             byte|=0x01;
  97.         SCK=0;//SCK拉低
  98.     }
  99.     return byte;//返回讀取一字節
  100. }
  101. /*SPI寫寄存器一字節函數*/
  102. /*reg:寄存器地址*/
  103. /*value:一字節(值)*/
  104. uchar SPI_W_Reg(uchar reg,uchar value)
  105. {
  106.     uchar status;//返回狀態
  107.     CSN=0;//SPI片選
  108.     status=SPI_RW(reg);//寫入寄存器地址,同時讀取狀態
  109.     SPI_RW(value);//寫入一字節
  110.     CSN=1;//
  111.     return status;//返回狀態
  112. }
  113. /*SPI讀一字節*/
  114. uchar SPI_R_byte(uchar reg)
  115. {
  116.     uchar reg_value;
  117.     CSN=0;//SPI片選
  118.     SPI_RW(reg);//寫入地址
  119.     reg_value=SPI_RW(0);//讀取寄存器的值
  120.     CSN=1;
  121.     return reg_value;//返回讀取的值
  122. }
  123. /*SPI讀取RXFIFO寄存器數據*/
  124. /*reg:寄存器地址*/
  125. /*Dat_Buffer:用來存讀取的數據*/
  126. /*DLen:數據長度*/
  127. uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen)
  128. {
  129.     uchar status,i;
  130.     CSN=0;//SPI片選
  131.     status=SPI_RW(reg);//寫入寄存器地址,同時狀態
  132.     for(i=0;i<Dlen;i++)
  133.     {
  134.         Dat_Buffer[i]=SPI_RW(0);//存儲數據
  135.     }
  136.     CSN=1;
  137.     return status;
  138. }
  139. /*SPI向TXFIFO寄存器寫入數據*/
  140. /*reg:寫入寄存器地址*/
  141. /*TX_Dat_Buffer:存放需要發送的數據*/
  142. /*Dlen:數據長度*/  
  143. uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)
  144. {
  145.     uchar status,i;
  146.     CSN=0;//SPI片選,啟動時序
  147.     status=SPI_RW(reg);
  148.     for(i=0;i<Dlen;i++)
  149.     {
  150.         SPI_RW(TX_Dat_Buffer[i]);//發送數據
  151.     }
  152.     CSN=1;
  153.     return status;  
  154. }
  155. /*設置發送模式*/
  156. void nRF24L01_Set_TX_Mode(uchar *TX_Data)
  157. {
  158.     CE=0;//待機(寫寄存器之前一定要進入待機模式或掉電模式)
  159.     SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH);/*寫寄存器指令+接收節點地址+地址寬度*/
  160.     SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH);/*為了接收設備應答信號,接收通道0地址與發送地址相同*/
  161.     SPI_W_DBuffer(W_TX_PLOAD,TX_Data,TX_DATA_WITDH);/*寫有效數據地址+有效數據+有效數據寬度*/
  162.     SPI_W_Reg(W_REGISTER+EN_AA,0x01);/*接收通道0自動應答*/
  163.     SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);/*使能接收通道0*/
  164.     SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);/*自動重發延時250US+86US,重發10次*/
  165.     SPI_W_Reg(W_REGISTER+RF_CH,0);/*(2400+40)MHZ選擇射頻通道0X40*/
  166.     SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);/*1Mbps速率,發射功率:0DBM,低噪聲放大器增益*/
  167.     SPI_W_Reg(W_REGISTER+CONFIG,0x0e);/*發送模式,上電,16位CRC校驗,CRC使能*/
  168.     CE=1;//啟動發射
  169.     _delay_ms(5);/*CE高電平持續時間最少10US以上*/
  170. }

  171. uchar Check_Rec(void)
  172. {
  173.     uchar status;
  174.     sta=SPI_R_byte(R_REGISTER+STATUS);
  175.     if(RX_DR)
  176.     {
  177.         CE=0;
  178.         SPI_R_DBuffer(R_RX_PLOAD,RX_Buffer,RX_DATA_WITDH);
  179.         status=1;
  180.     }
  181.     SPI_W_Reg(W_REGISTER+STATUS,0xff);
  182.     return status;  
  183. }
  184. /*檢測應答信號*/
  185. uchar Check_Ack(void)
  186. {
  187.     sta=SPI_R_byte(R_REGISTER+STATUS);/*讀取寄存狀態*/
  188.     if(TX_DS||MAX_RT)/*如果TX_DS或MAX_RT為1,則清除中斷和清除TX_FIFO寄存器的值*/
  189.     {
  190.         SPI_W_Reg(W_REGISTER+STATUS,0xff);
  191.         CSN=0;
  192.         SPI_RW(FLUSH_TX);/*如果沒有這一句只能發一次數據,大家要注意*/
  193.         CSN=1;
  194.         return 0;
  195.     }
  196.     else
  197.         return 1;
  198. }

  199. void main(void)
  200. {
  201. ……………………

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

所有資料51hei提供下載:
nrf24l01小車項目.zip (11.15 MB, 下載次數: 293)

評分

參與人數 2黑幣 +56 收起 理由
菜用雞 + 6 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:164989 發表于 2017-5-24 12:30 | 顯示全部樓層
PCB是遙控燈的.......
回復

使用道具 舉報

ID:182522 發表于 2017-7-13 11:07 | 顯示全部樓層
很好的資料 謝謝分享
回復

使用道具 舉報

ID:110278 發表于 2017-8-4 13:42 | 顯示全部樓層
感謝分享。。。。
回復

使用道具 舉報

ID:79544 發表于 2017-11-5 15:04 | 顯示全部樓層
送人玫瑰手留余香,感謝分享!
回復

使用道具 舉報

ID:5322 發表于 2017-11-8 10:58 | 顯示全部樓層
很好的資料,謝謝
回復

使用道具 舉報

ID:312835 發表于 2018-5-25 10:10 | 顯示全部樓層
打不開
回復

使用道具 舉報

ID:148126 發表于 2018-10-27 17:07 | 顯示全部樓層
你這個是2401嗎  分明是別人的資料好不好  我之前見過的  這是紅外遙控好不好   真不知道  你發這個東西時自己有沒有看過     hi有下面點贊的人是真懂還是假懂    不看看嗎
回復

使用道具 舉報

ID:372154 發表于 2019-6-3 02:09 | 顯示全部樓層
好資料,謝謝
回復

使用道具 舉報

ID:318672 發表于 2019-6-24 15:40 來自手機 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:246783 發表于 2020-3-1 12:30 來自手機 | 顯示全部樓層
還不錯  
回復

使用道具 舉報

ID:570401 發表于 2020-3-3 22:56 | 顯示全部樓層
很好的資料 謝謝分享
回復

使用道具 舉報

ID:614724 發表于 2020-6-14 13:33 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:521719 發表于 2020-10-5 18:14 | 顯示全部樓層
ymhhmy 發表于 2017-5-24 12:30
PCB是遙控燈的.......

感謝分享
回復

使用道具 舉報

ID:553941 發表于 2020-12-8 14:03 | 顯示全部樓層
霍特 發表于 2018-10-27 17:07
你這個是2401嗎  分明是別人的資料好不好  我之前見過的  這是紅外遙控好不好   真不知道  你發這個東西時 ...

我想問問。。你真看過嗎。紅外遙控用到SPI通信嗎。我特地下載看了一下,程序寫的不復雜,但是確實是2401的程序
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区中文字幕 | 99热激情 | 精品一区二区三区四区视频 | 超碰电影 | 99久久99久久精品国产片果冰 | 狠狠操网站 | 亚洲国产一区二区视频 | 97高清国语自产拍 | 91麻豆精品国产91久久久更新资源速度超快 | 久色网 | 亚洲国产伊人 | 国产午夜影院 | 有码在线 | 99热热99 | 亚洲成人精品视频 | 91精品无人区卡一卡二卡三 | 亚洲一二三在线 | 天堂网中文| 国产精品免费高清 | 在线观看免费观看在线91 | 国产日韩欧美一区二区 | 欧美视频一级 | 精品国产乱码久久久久久丨区2区 | 日韩免费成人av | 午夜影院黄 | 久久久久91| 欧美激情视频一区二区三区在线播放 | 久久久久久久av | 国产高清在线精品一区二区三区 | h视频在线免费观看 | 亚洲精品一二区 | 97av| 91超碰caoporn97人人 | 激情亚洲 | 精品欧美一区二区精品久久久 | 一区二区三区成人 | 免费一级淫片aaa片毛片a级 | a级毛片基地 | 亚洲视频在线一区 | 一区在线免费视频 | 亚洲福利av |