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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 14858|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

nRF2401無線數(shù)據(jù)傳輸試驗(yàn)測(cè)試程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76686 發(fā)表于 2015-4-11 19:38 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    nRF2401無線數(shù)據(jù)傳輸試驗(yàn)測(cè)試程序,兩塊同樣nRF2401學(xué)習(xí)板子上演示數(shù)據(jù)同步,這是從網(wǎng)上轉(zhuǎn)載的。單片機(jī)使用的是STC89C52RC,8個(gè)LED接在P0口,低電平有效,測(cè)試直觀。

  1. /***********************************************************/

  2. /*nRF2401學(xué)習(xí)板V1.0                                        */

  3. /*功能描述:nRF2401無線數(shù)據(jù)傳輸                            */

  4. /*芯片    :STC89C52RC  晶振 11.0592M                      */

  5. /*版本    :V1.0                                           */

  6. /***********************************************************/

  7. //測(cè)試OK,功能描述:

  8. //8個(gè)LED接在P0口,低電平有效

  9. //按鍵1是LED加 按鍵2LED減  按鍵3 LED全亮 按鍵4 LED全滅

  10. //兩塊同樣的板子能夠通過無線控制實(shí)現(xiàn)LED顯示同步,串口輸出數(shù)據(jù)

  11. #include <reg51.h>

  12. #include <intrins.h>

  13. #define uchar unsigned char

  14. #define uint  unsigned int

  15. #define ulong unsigned long


  16. //端口定義

  17. sbit nRF2401_PWR_UP = P1^4;

  18. sbit nRF2401_CE     = P1^5;

  19. sbit nRF2401_CS     = P1^7;

  20. //////////////////////

  21. sbit DR1    = P1^1;   //通道1

  22. sbit CLK1   = P3^2;

  23. sbit DATA   = P1^0;

  24. //////////////////////

  25. sbit DR2    = P1^3;   //通道2

  26. sbit CLK2   = P1^6;

  27. sbit DOUT2  = P1^2;

  28. ///////LED定義//////////

  29. sbit LED1  = P0^0;

  30. sbit LED2  = P0^1;

  31. sbit LED3  = P0^2;

  32. sbit LED4  = P0^3;

  33. sbit LED5  = P0^4;

  34. sbit LED6  = P0^5;

  35. sbit LED7  = P0^6;

  36. sbit LED8  = P0^7;

  37. ///////按鍵定義////////////

  38. sbit K1  = P3^3;

  39. sbit K2  = P3^4;

  40. sbit K3  = P3^5;

  41. sbit K4  = P3^6;


  42. sbit speaker=P3^7;//蜂鳴器輸出引腳


  43. //Configuration Word       datasheet(page17 of 37)

  44. //Reserved for testing

  45. #define TEST_2         0x8E     //MSB    D143~D136

  46. #define TEST_1         0x08     //       D135~D128

  47. #define TEST_0         0x1C     //       D127~D120


  48. #define DATA2_W        2*8      //通道2 payload數(shù)據(jù)長(zhǎng)度設(shè)置(bit)

  49. #define DATA1_W        28*8      //通道1 payload數(shù)據(jù)長(zhǎng)度設(shè)置(bit)

  50. //NOTE: DATAx_W(bits)<=256 - ADDR_W - CRC                datasheet(page17 of 37)  

  51. #define ADDR2_4      0x00//通道2接收地址   

  52. #define ADDR2_3      0x00

  53. #define ADDR2_2      0x00

  54. #define ADDR2_1      0x00

  55. #define ADDR2_0      0x01

  56.                

  57. #define ADDR1_4      0x00//通道1接收地址

  58. #define ADDR1_3      0x00

  59. #define ADDR1_2      0x00

  60. #define ADDR1_1      0x34

  61. #define ADDR1_0      0x12


  62. #define ADDR_W       2*8    //發(fā)送/接收地址寬度(單位:Bit)

  63. #define CRC_L        0x1    //CRC 模式  0:8 位  1:16 位

  64. #define CRC_EN       0x1    //CRC 校驗(yàn)  0:禁用  1:啟用


  65. #define RX2_EN       0x0    //雙通道功能0:禁用  1:啟用

  66. #define CM           0x1    //0:Direct mode   1:ShockBurst mode

  67. #define RFDR_SB      0x0    //傳輸速率0:250kbps 1:1Mbps(requires 16MHZ crystal)

  68. #define XO_F         0x3    //晶振頻率 D12-D10(000:4MHZ  001:8MHZ  010:12MHZ  011:16MHZ  100:20MHZ)

  69. #define RF_PWR       0x3    //發(fā)射模式的輸出功率D9-D8(00:-20dBm  01:-10dBm  10:-5dBm  11:0dBm)


  70. #define RF_CH        0x2    //Channel 發(fā)射頻率設(shè)置Channel=2400MHz+RF_CH * 1.0MHz  datasheet(page22 of 37)  

  71. #define RXEN         0x0    //0:transmit mode    1:receive mode


  72. uchar code nRF2401_Config_Word[18] =

  73. {

  74. TEST_2, TEST_1, TEST_0, DATA2_W, DATA1_W, ADDR2_4, ADDR2_3, ADDR2_2,

  75. ADDR2_1,ADDR2_0,ADDR1_4,ADDR1_3, ADDR1_2, ADDR1_1, ADDR1_0,(ADDR_W<<2 | CRC_L<<1 | CRC_EN),

  76. (RX2_EN<<7 | CM<<6 | RFDR_SB<<5 | XO_F <<2 | RF_PWR),(RF_CH<<1 | RXEN)

  77. };


  78. uchar code Channel_Addr[]={0x34,0x12,0x00,0x00,0x00};//設(shè)置通道1地址,發(fā)射和接收必須匹配

  79. uchar nRF2401_Data[32]; //定義nRF2401數(shù)據(jù)發(fā)送接收臨時(shí)存儲(chǔ)地址

  80. uchar nRF2401_flag;//定義標(biāo)志位,bit7-bit2 暫時(shí)保留 | bit0:是否有接收數(shù)據(jù)標(biāo)志位 1:有 0:無

  81.                                                   //| bit1:是否有按鍵數(shù)據(jù)標(biāo)志位 1:有 0:無

  82. /*****************************************/

  83. void delayms(uint count); //延時(shí)程序

  84. void speakertest(void);   //蜂鳴器程序

  85. uchar nRF2401_Read_Byte(void); //讀字節(jié)

  86. void nRF2401_Write_Byte(uchar Send_Byte);//寫字節(jié)

  87. void nRF2401_config(void);   //參數(shù)配置

  88. void nRF2401_Transmit_Mode(void); //設(shè)置為發(fā)射模式

  89. void nRF2401_Receive_Mode(void);  //設(shè)置為接收模式

  90. void nRF2401_Transmit_Data(uchar TxBuf[]);  //nRF2401發(fā)送數(shù)據(jù)子程序

  91. void nRF2401_Receive_Data(uchar *data_temp);//nRF2401接收數(shù)據(jù)子程序

  92. void init_rs232(void);           //串口初始化

  93. void keytest(void);  //按鍵測(cè)試程序

  94. /*****************************************/

  95. /*************延時(shí)子程序start*****************/

  96. void delayms(unsigned int count)

  97. {

  98. unsigned int i,j;

  99. for(i=0;i<count;i++)

  100. for(j=0;j<120;j++);

  101. }

  102. /**************延時(shí)子程序end****************/

  103. /* 串口通信初始化設(shè)置 */

  104. void init_rs232(void)

  105. {

  106. SCON=0x50;

  107. PCON=0x00;

  108. TH1=0xFD;    //波特率 9600  11.0592MHZ 時(shí)候

  109. TL1=0XFD;

  110. TMOD=0X20;

  111. TR1=1;   

  112. }

  113. void speakertest(void)//蜂鳴器程序

  114. {

  115. unsigned char i;

  116.   for(i=0;i<100;i++)

  117. {

  118.   speaker=0;

  119.   delayms(1);

  120.   speaker=1;

  121.   delayms(1);

  122.   }

  123. }

  124. /*****************************************/

  125. void keytest(void)  //按鍵測(cè)試程序

  126. {

  127. ////////按鍵K1判斷程序////////

  128.   while(K1==0)

  129.   {

  130.   delayms(100);//按鍵去抖

  131.    if(K1==1)

  132.    {

  133.    nRF2401_flag|=0x02; //按鍵標(biāo)志位nRF2401_flag_bit1=1

  134.    speakertest();

  135.    nRF2401_Data[0]++;

  136.    }

  137.    else

  138.    {;}

  139.   }

  140. /////////////////////////////

  141. ////////按鍵K2判斷程序////////

  142.   while(K2==0)

  143.   {

  144.    delayms(100);//按鍵去抖

  145.    if(K2==1)

  146.    {

  147.    nRF2401_flag|=0x02; //按鍵標(biāo)志位nRF2401_flag_bit1=1

  148.    speakertest();

  149.    nRF2401_Data[0]--;

  150.    }

  151.    else

  152.    {nRF2401_flag&=0xfd; } //清除按鍵標(biāo)志位nRF2401_flag_bit1=0

  153.   }

  154. /////////////////////////////

  155. ////////按鍵K3判斷程序////////

  156.   while(K3==0)

  157.   {

  158.   delayms(100);//按鍵去抖

  159.    if(K3==1)

  160.    {

  161.    nRF2401_flag|=0x02; //按鍵標(biāo)志位nRF2401_flag_bit1=1

  162.    speakertest();

  163.    nRF2401_Data[0]=0x00;

  164.    }

  165.    else

  166.     {nRF2401_flag&=0xfd; } //清除按鍵標(biāo)志位nRF2401_flag_bit1=0

  167.   }

  168. /////////////////////////////

  169. ////////按鍵K4判斷程序////////

  170.   while(K4==0)

  171.   {

  172.   delayms(100);//按鍵去抖

  173.    if(K4==1)

  174.    {

  175.    nRF2401_flag|=0x02; //按鍵標(biāo)志位nRF2401_flag_bit1=1

  176.    speakertest();

  177.    nRF2401_Data[0]=0xff;  

  178.    }

  179.    else

  180.    {nRF2401_flag&=0xfd; } //清除按鍵標(biāo)志位nRF2401_flag_bit1=0

  181.   }


  182.   if((nRF2401_flag&0x02)==0x02)//判斷是否有按鍵按下

  183.    {

  184.    P0=~nRF2401_Data[0];

  185.    nRF2401_Transmit_Mode();        //設(shè)置為發(fā)送模式

  186.    nRF2401_Transmit_Data(nRF2401_Data); //發(fā)送數(shù)據(jù)

  187.    nRF2401_Receive_Mode();         //設(shè)置為接收模式

  188.    nRF2401_flag&=0xfd; //清除按鍵標(biāo)志位nRF2401_flag_bit1=0  

  189.   }

  190.   else

  191.   {;}

  192.    

  193. }

  194. /************讀數(shù)據(jù)子程序***********/

  195. uchar nRF2401_Read_Byte(void)

  196. {

  197.   uchar i,j,temp;

  198.   temp=0x00;

  199.   for (i=0;i<8;i++)

  200.    {

  201.       CLK1=1;

  202.       _nop_();

  203.       if (DATA==1) j=1;

  204.       else j=0;

  205.       temp=(temp<<1)|j;

  206.       CLK1=0;

  207.    }

  208.   return temp;

  209. }

  210. /************寫數(shù)據(jù)子程序***********/

  211. void nRF2401_Write_Byte(uchar Send_Byte)

  212. {

  213. uchar i;

  214. for (i=0;i<8;i++)

  215.    {

  216.       Send_Byte=Send_Byte<<1;

  217.    DATA=CY; //讀進(jìn)位數(shù)據(jù)

  218.       CLK1=1;

  219.       _nop_();   

  220.       CLK1=0;

  221.    }

  222. }



  223. /*********配置參數(shù)子程序***********/

  224. void nRF2401_config(void)

  225. {

  226. uchar i;

  227. //////stand by/////////////

  228. nRF2401_PWR_UP=1;

  229.     nRF2401_CE=0;

  230.     nRF2401_CS=0;

  231. /////////////////////////////      datasheet(page24 of 37)

  232. delayms(3);// PWR_DWN -> ST_BY_mode | MAX 3ms | name: Tpd2sby |

  233. nRF2401_CS=1;     //進(jìn)入配置模式Configuration

  234. ////18個(gè)字節(jié)的配置字////////////// datasheet(page17 of 37)

  235. for (i=0;i<18;i++)

  236. {

  237.      nRF2401_Write_Byte(nRF2401_Config_Word);

  238. }

  239. delayms(1);

  240. nRF2401_CS=0;    //nRF2401_CS 置低使配置有效  datasheet(page26 of 37);

  241. }


  242. /*********設(shè)置發(fā)射模式子程序*********/

  243. void nRF2401_Transmit_Mode(void)

  244. {

  245. nRF2401_PWR_UP=1; //進(jìn)入配置模式

  246. nRF2401_CE=0;

  247. nRF2401_CS=1;

  248. delayms(1);

  249. //RXEN(bit0)=0 transmit mode ; datasheet(page22 of 37);

  250. DATA =0;

  251. CLK1=1;

  252. _nop_();

  253. CLK1=0;

  254. //設(shè)置為Active(Tx)模式

  255. nRF2401_CE=1;

  256. nRF2401_CS=0;

  257.     delayms(1);

  258. }

  259. /*********設(shè)置接收模式子程序*********/

  260. void nRF2401_Receive_Mode(void)

  261. {

  262. nRF2401_PWR_UP = 1; //進(jìn)入配置模式

  263. nRF2401_CE=0;

  264. nRF2401_CS=1;

  265. delayms(1);

  266. //RXEN(bit0)=1 receive mode ; datasheet(page22 of 37);

  267. DATA =1;

  268. CLK1=1;

  269. _nop_();

  270. CLK1=0;

  271. //設(shè)置為Active(Rx)模式

  272.     nRF2401_CE=1;

  273. nRF2401_CS=0;

  274. delayms(1);

  275. }


  276. //接收方通道硬件地址


  277. /********發(fā)送數(shù)據(jù)子程序*********/

  278. void nRF2401_Transmit_Data(uchar TxBuf[]) //datasheet(page22 of 37);

  279. {

  280. uchar i;

  281. nRF2401_CE=1;

  282. delayms(1);

  283. for (i=0;i< (ADDR_W/8);i++)//寫入接收地址(按字節(jié)對(duì)齊)

  284. {

  285.   nRF2401_Write_Byte(Channel_Addr);

  286. }

  287. for (i=0;i<(DATA1_W/8);i++)//寫入需要發(fā)送的數(shù)據(jù)(按字節(jié)對(duì)齊)

  288. {

  289.   nRF2401_Write_Byte(TxBuf);

  290. }

  291. nRF2401_CE=0; //nRF2401_CE 置低使發(fā)送有效

  292. delayms(1);

  293. }


  294. /********接收數(shù)據(jù)子程序*********/

  295. void nRF2401_Receive_Data(uchar *data_temp)

  296. {

  297. uchar i;

  298. if (DR1==1) //接收完畢后,DR1自動(dòng)為0  datasheet(page28 of 37);

  299. {

  300.     for (i=0; i<DATA1_W/8; i++)

  301.     {

  302.   *data_temp=nRF2401_Read_Byte();

  303.   data_temp++;

  304.      }

  305.   nRF2401_flag|=0x01; //接收標(biāo)志位nRF2401_flag_bit0=1

  306. }

  307. else

  308. {nRF2401_flag&=0xfe;}//接收標(biāo)志位nRF2401_flag_bit0=0

  309. }




  310. void main(void)

  311. {

  312.     delayms(1000);//開機(jī)延時(shí)

  313. nRF2401_Data[0] = 0;

  314.     init_rs232();  //串口初始化

  315.     TI=1;          //串口發(fā)射有效

  316. nRF2401_config(); //nRF2401初始化配置

  317.     delayms(100);

  318. speakertest();  //蜂鳴器叫一聲


  319. nRF2401_Transmit_Mode();            //設(shè)置為發(fā)送模式

  320. nRF2401_Transmit_Data(nRF2401_Data);//發(fā)送測(cè)試數(shù)據(jù)

  321. nRF2401_Receive_Mode();             //設(shè)置為接收模式

  322. SBUF=0x55; //串口輸出0x55 測(cè)試是否有正確的串口數(shù)據(jù)

  323. delayms(100);

  324. while (1)

  325. {   

  326.   nRF2401_Receive_Data(nRF2401_Data);//接收數(shù)據(jù),并存放到nRF2401_Data[32]數(shù)組中

  327.   if (nRF2401_flag&0x01==0x01) //判斷是否有數(shù)據(jù)收到

  328.   {

  329.    P0=~nRF2401_Data[0];

  330.       SBUF=nRF2401_Data[0];         

  331.   }

  332.         else

  333.   {;}

  334.       keytest();  //調(diào)用按鍵子程序,無線發(fā)送數(shù)據(jù)

  335. }

  336. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:75614 發(fā)表于 2015-4-13 14:40 | 只看該作者
我想問一下 圖上那個(gè)8P座子  我寫的那個(gè)位置是1管腳嗎 求解

回復(fù)

使用道具 舉報(bào)

板凳
ID:89596 發(fā)表于 2015-9-27 08:47 | 只看該作者
就是六啊
回復(fù)

使用道具 舉報(bào)

地板
ID:88256 發(fā)表于 2015-11-19 19:21 | 只看該作者
學(xué)習(xí)一下,頂一頂!
回復(fù)

使用道具 舉報(bào)

5#
ID:99627 發(fā)表于 2016-1-26 22:32 | 只看該作者
怎么有3處警告了?
回復(fù)

使用道具 舉報(bào)

6#
ID:105120 發(fā)表于 2016-2-6 09:56 | 只看該作者
學(xué)習(xí)了謝謝!
回復(fù)

使用道具 舉報(bào)

7#
ID:111466 發(fā)表于 2016-3-30 18:51 | 只看該作者
這個(gè)是怎么連接的
回復(fù)

使用道具 舉報(bào)

8#
ID:44267 發(fā)表于 2016-7-27 08:04 | 只看該作者
收長(zhǎng)一下,有空看看
回復(fù)

使用道具 舉報(bào)

9#
ID:182522 發(fā)表于 2017-7-13 13:04 | 只看該作者
很厲害 慢慢學(xué)習(xí) 謝謝
回復(fù)

使用道具 舉報(bào)

10#
ID:289262 發(fā)表于 2018-3-9 17:06 | 只看該作者

非常感謝!。咱們互相幫助吧。

非常好的資料。 下載學(xué)習(xí)下

回復(fù)

使用道具 舉報(bào)

11#
ID:478236 發(fā)表于 2019-3-12 22:10 | 只看該作者
插個(gè)真眼,以后學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

12#
ID:36321 發(fā)表于 2023-11-24 13:15 | 只看該作者
一直在找有關(guān)24l01的51單片機(jī)程序,謝謝你提供的資料。
回復(fù)

使用道具 舉報(bào)

13#
ID:1101234 發(fā)表于 2023-11-29 20:07 來自手機(jī) | 只看該作者
nrf2401容易壞嗎?
回復(fù)

使用道具 舉報(bào)

14#
ID:108361 發(fā)表于 2023-11-30 09:16 | 只看該作者
按鍵消抖用100ms死等,這個(gè)程序的效率可能會(huì)非常低
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本三级全黄三级三级三级口周 | 麻豆久久久久久久 | 91 视频网站 | 日本一区二区高清视频 | 蜜桃视频一区二区三区 | 99精品国产一区二区三区 | 91看片官网 | 伊人精品一区二区三区 | 日韩伦理一区二区 | 国产精品呻吟久久av凹凸 | 91影院| 中文字幕一区二区在线观看 | 一区二区在线免费观看 | 激情av在线 | 成人高清视频在线观看 | 久久精彩 | 国产一级视频在线观看 | 亚洲一区二区日韩 | 一区在线观看 | 欧美一级片在线观看 | 日韩精品一区二区三区在线播放 | 精品九九久久 | 国内精品视频一区二区三区 | 丁香六月伊人 | 欧美一区二区三区大片 | 波多野结衣一区二区 | 亚洲国产成人精品女人久久久 | 日韩精品在线免费 | 一本色道精品久久一区二区三区 | 91视频日本| 黄色免费在线观看网站 | 久久精品中文 | 国产一区二区三区高清 | 福利在线观看 | 九九九视频在线观看 | 91视频一区二区三区 | 中文字幕一区二区三区四区五区 | 午夜免费福利电影 | 欧美a级网站 | 91视频网址 | 五月综合色啪 |