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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4089|回復: 0
收起左側

NRF24L01頭文件

[復制鏈接]
ID:104287 發表于 2016-1-30 02:18 | 顯示全部樓層 |閱讀模式
  1. #include <macros.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. //------------------------------------------------------------------------------
  5. //spi標志
  6. #define DDR_SPI DDRB
  7. #define DD_MOSI 5
  8. #define DD_SCK 7
  9. #define DD_SS 4
  10. //--------------------------------NRF24L01接口定義--------------------------------
  11. //------------------------------------------------------------------------------
  12. //#define NRF24L01_MISO          PB6  //輸入0
  13. #define   Hign_24L01_MISO    PORTB|=(1 << PB6)
  14. #define   Low_24L01_MISO     PORTB &= ~(1 << PB6)
  15. #define   Read_24L01_MISO    PINB & (1 << PB6)

  16. //#define NRF24L01_MOSI         PB5       //輸出1
  17. #define   Hign_24L01_MOSI    PORTB |= (1 << PB5)
  18. #define   Low_24L01_MOSI     PORTB &= ~(1 << PB5)
  19. #define   Read_24L01_MOSI    PINB & (1 << PB5)

  20. //#define NRF24L01_SCK    PB7      //輸出1
  21. #define   Hign_24L01_SCK    PORTB |= (1 << PB7)  
  22. #define   Low_24L01_SCK     PORTB &= ~(1 << PB7)   
  23. #define   Read_24L01_SCK    PINB & (1 << PB7);

  24. //#define NRF24L01_CSN       PB4       //輸出1
  25. #define   Low_24L01_CSN     PORTB &= ~(1 << PB4)
  26. #define   Hign_24L01_CSN    PORTB |= (1 << PB4)

  27. //#define NRF24L01_CE         PB2       //輸出1
  28. #define   Hign_24L01_CE    PORTB |= (1 << PB3)
  29. #define   Low_24L01_CE     PORTB &= ~(1 << PB3)  
  30. #define   Read_24L01_CE    PINB & (1 << PB3)

  31. //char sta,count,tf;
  32. /

  33. /
  34. /
  35. void spi_init()
  36. {
  37. DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS)|(1 << PB3);//設置MOSI,SCK,SS.CE 為OUTPUT,其它為INPUT
  38. SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0);//使能SPI接口,主機模式,MSB低位在前,模式0,16分頻,SPI時鐘1MHZ
  39. SPSR=0;
  40. }

  41. uchar SPI_RW(uchar date)
  42. {
  43. SPDR=date;
  44.     while(!(SPSR&(1<<SPIF)));
  45.     return SPDR;
  46. }

  47. uchar SPI_Read(uchar reg)
  48. {
  49. uchar reg_val;

  50. Low_24L01_CSN;                // CSN low, initialize SPI communication...
  51. SPI_RW(reg);            // Select register to read from..
  52. reg_val = SPI_RW(0);    // ..then read registervalue
  53. Hign_24L01_CSN;                // CSN high, terminate SPI communication

  54. return(reg_val);        // return register value
  55. }


  56. uchar SPI_RW_Reg(uchar reg, uchar value)
  57. {
  58. uchar status;

  59. Low_24L01_CSN;                   // CSN low, init SPI transaction
  60. status = SPI_RW(reg);      // select register
  61. SPI_RW(value);             // ..and write value to it..
  62. Hign_24L01_CSN;                   // CSN high again

  63. return(status);            // return nRF24L01 status uchar
  64. }


  65. uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bites)
  66. {
  67. uint status1,uchar_ctr;

  68. Low_24L01_CSN;                      // Set CSN low, init SPI tranaction
  69. status1 = SPI_RW(reg);         // Select register to write to and read status uchar

  70. for(uchar_ctr=0;uchar_ctr<bites;uchar_ctr++)
  71.   pBuf[uchar_ctr] = SPI_RW(0);    //

  72. Hign_24L01_CSN;                          

  73. return(status1);                    // return nRF24L01 status uchar
  74. }

  75. uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bites)
  76. {
  77. uchar status1,uchar_ctr;

  78. Low_24L01_CSN;             //SPI使能      
  79. status1 = SPI_RW(reg);  
  80. for(uchar_ctr=0; uchar_ctr<bites; uchar_ctr++) //
  81. SPI_RW(*pBuf++);
  82. Hign_24L01_CSN;           //關閉SPI
  83. return(status1);        //
  84. }


  85. void SetRX_Mode(void)
  86. {
  87. Low_24L01_CE;
  88. SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH);
  89. SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //
  90. SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //
  91. SPI_RW_Reg(WRITE_REG + RF_CH,0);        //
  92. SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);
  93. SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);  
  94. SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);
  95. Hign_24L01_CE;
  96. Delay(200);//注意不能太小
  97. }


  98. uchar nRF24L01_RxPacket(uchar* rx_buf)
  99. {
  100.     uchar sta,flag=0;
  101. sta=SPI_Read(STATUS);      // 讀取狀態寄存其來判斷數據接收狀況  
  102. if(sta&0x40)                 // 判斷是否接收到數據RX_DR==1?
  103. {
  104.      Low_24L01_CE;    //SPI使能
  105.   SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
  106.   flag =1;   //讀取數據完成標志
  107. }
  108. SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到數據后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志
  109. return (flag);
  110. }

  111. void nRF24L01_TxPacket(uchar * tx_buf)
  112. {
  113. Low_24L01_CE;   //StandBy I模式
  114. SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
  115. SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 裝載接收端地址
  116. SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);     // 裝載數據
  117. SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //
  118. SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //
  119. SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); //
  120. SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //
  121. SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   //
  122. SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);      // IRQ收發完成中斷響應,16位CRC,主發送
  123. Hign_24L01_CE;   //置高CE,激發數據發送
  124. Delay(150);
  125. }
  126. /
  127. void init_NRF24L01(void)
  128. {
  129. spi_init();
  130.   Low_24L01_CE;    // chip enable
  131.   Hign_24L01_CSN;   // Spi disable
  132.   Low_24L01_SCK;   // Spi clock line init high

  133. }

  134. 主函數(發送)

  135. //外部8MHZ晶振

  136. #include <iom16v.h>
  137. #include <macros.h>

  138. #include"RF24L01.H"
  139. #include"LCD1602.H"
  140. uchar TX_BUF[32]={0x53,0x75,0x63,0x63,0x65,0x73,0x66,0x75,0x6c,0x21};//successful!
  141. void main()
  142. {
  143.    lcd_init();
  144.   init_NRF24L01();
  145.   LCD_write_str(0,0,"fa song shu ju:");
  146.   delay_ms(10);
  147.   while(1)
  148.   {
  149.     nRF24L01_TxPacket(TX_BUF);
  150.     delay_ms(50);
  151. sta=SPI_Read(STATUS);
  152. //while(sta&0x20)
  153. //{
  154.      for(i=0;i<10;i++)
  155.        {
  156.        LCD_write_char(1,i,TX_BUF[i]);
  157.        }
  158.      SPI_RW_Reg(WRITE_REG+STATUS,0XFF);
  159.   //}
  160.    delay_ms(500);
  161.    }
  162. }

  163. 主函數(接收)

  164. #include <iom16v.h>
  165. #include <macros.h>

  166. #include"RF24L01.H"
  167. #include"LCD1602.H"
  168. #define  mclk   8000000
  169. #pragma interrupt_handler uart_rx:12
  170. uchar RX_BUF[32];

  171. uchar rdata,flag=0;

  172. void main()
  173. {
  174.   uchar i;
  175.   lcd_init();
  176.   init_NRF24L01();
  177.   LCD_write_str(0,0,"jie shou shu ju:");
  178.   delay_ms(10);

  179.   while(1)
  180.   {
  181.     SetRX_Mode();
  182. if(nRF24L01_RxPacket(RX_BUF))   //判斷是否收到數據
  183.       {
  184.          for(i=0;i<10;i++)
  185.            {
  186.           LCD_write_char(1,i,RX_BUF[i]);
  187.         delay_ms(1);
  188.      }
  189.        }
  190. delay_ms(500);
  191.    }
  192. }
復制代碼


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费一级片 | 成人毛片网站 | 毛片视频网址 | 99精品视频免费观看 | 国产精品亚洲精品日韩已方 | 国产免费一区二区三区 | 欧美a在线 | 91免费福利视频 | 奇米在线 | 黄色一级片aaa | 久产久精国产品 | 亚洲高清在线观看 | 国产成人精品一区二区三区网站观看 | 精品国产伦一区二区三区观看体验 | 一区二区精品视频 | 色呦呦在线| 视频羞羞 | 夜久久| 91视频18| 九色 在线 | 美国一级片在线观看 | 午夜日韩精品 | 蜜臀av日日欢夜夜爽一区 | 成人在线播放网站 | 久久av一区 | 久久久91| 日本啊v在线 | 日韩视频观看 | 国产精品成人久久久久 | 国产精品久久久久久久免费观看 | 亚洲三级免费看 | 日韩视频在线观看中文字幕 | 青青久草 | 91视视频在线观看入口直接观看 | 一区二区精品 | 91精品一区二区三区久久久久 | 国产一区二 | 久久青草av| 免费啪啪 | 天天草天天射 | 亚洲一区导航 |