找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC89C52RC單片機的NRF24L01無線通信程序,收發(fā)一體,由串口調(diào)試助手發(fā)送信息OLED屏幕

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:389321 發(fā)表于 2019-7-24 10:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本設(shè)計由兩塊STC89C52RC單片機組成,通過NRF24L01實現(xiàn)最廉價的無線通信。
每塊單片機都是集收發(fā)于一體,先初始化會在OLED上顯示是否初始化成功,
然后通過按鍵可選擇收發(fā)模式,并在OLED屏幕上顯示出來
最后選擇串口調(diào)試助手,打開串口給單片機發(fā)送信息,單片機接收到后再通過NRF24L01向另一塊單片機發(fā)送
接收成功后會將接收到的信息顯示在OLED上。
OLED顯示屏較1602液晶顯示屏清楚,可現(xiàn)實的內(nèi)容豐富,可以建立自己的字庫
并且占用的引腳較少

單片機源程序如下:
  1. #include "reg52.h"
  2. #include "oled.h"
  3. #include "bmp.h"
  4. #include "nrf24l01.h"
  5. #include "delay.h"
  6. #include "uart.h"
  7. #include "key.h"

  8. sbit LED0=P0^7;

  9. u8 *content;
  10. u8 *content1;
  11. u8 UART_BUFFER[64]={0};
  12. //u8 UART_BUFFER1[64];
  13. u8 RF24L01RxBuffer[64]={0};

  14. void main(void)
  15. {        
  16.         u32 num=0;
  17.          u8 i,flag1=1,flag2=1;
  18.          drv_spi_init( );           //SPI初始化
  19.          drv_uart_init();
  20.          NRF24L01_Gpio_Init( );    //RF24L01引腳初始化
  21.          OLED_Init();                        //初始化OLED  
  22.          OLED_Clear();
  23.          NRF24L01_check( );                   //檢測nRF24L01
  24.         RF24L01_Init( );
  25.          OLED_ShowString(0,0,"Init success");
  26.          while(flag1)
  27.          {
  28.                  if(KEY1==0)
  29.                  {
  30.                          delay_ms(5);
  31.                          if(KEY1==0)
  32.                          {
  33.                                  RF24L01_Set_Mode( MODE_TX );
  34.                                  flag1 = 0;
  35.                                  flag2 = 0;
  36.                                  OLED_ShowString(12*9+1,0,"TX");
  37. //                                 OLED_ShowString(0,3,UART_BUFFER);
  38.                          }
  39.                  }
  40.                  if(KEY2==0)
  41.                  {
  42.                          delay_ms(5);
  43.                          if(KEY2==0)
  44.                          {
  45.                                  RF24L01_Set_Mode( MODE_RX );
  46.                                  OLED_ShowString(12*9+1,0,"RX");
  47.                                  flag1 = 0;
  48.                                  flag2=1;
  49.                          }
  50.                  }
  51.          }
  52.          
  53.          if(flag2==1)
  54.          {
  55.                  OLED_ShowString(0,2,"receive message:");
  56.                  while(1)
  57.           {        
  58.                  RF24L01_Set_Mode( MODE_RX );
  59.                 if(NRF24L01_RxPacket( RF24L01RxBuffer ))
  60.                 {
  61.                   OLED_ShowString(0,4,RF24L01RxBuffer);        
  62.                   LED0=~LED0;
  63.                   delay_ms(500);
  64.                   LED0 = ~LED0;
  65.                 }
  66.          }
  67.    }
  68.          if(flag2==0)
  69.          {
  70.                  /*while(1)
  71.                  {
  72.                  if(KEY3==0)
  73.                  {
  74.                          num = drv_uart_rx_bytes();
  75.       if(num)
  76.                         {
  77.                                 content = UART_BUFFER;
  78.                                 for(i=0;i<=num;i++)
  79.                                 {
  80.                                         *(content+i) = UART_BUFFER[i];
  81.                                 }
  82.                                 NRF24L01_TxPacket(content, num );                //模式1發(fā)送固定字符,1S一包
  83.                                 LED0 = ~LED0;
  84.                                 delay_ms(500);
  85.                                 LED0 = ~LED0;
  86.                         }
  87.                  }         
  88.          }*/
  89.          while(1)
  90.          {
  91.                  num = drv_uart_rx_bytes();
  92.       if(num)
  93.                         {
  94.                                 content = UART_BUFFER;
  95. //                                content1 = UART_BUFFER;
  96. //                                OLED_ShowString(0,4,content1);        
  97.                                 for(i=0;i<num;i++)
  98.                                 {
  99.                                         *(content+i) = UART_BUFFER[i];
  100.                                 }
  101. //                                *(content+i+1)='\0';
  102.                                 NRF24L01_TxPacket(content, num );                //模式1發(fā)送固定字符,1S一包
  103. //                                for(i=0;i<64;i++)
  104. //                                {
  105. //                                        UART_BUFFER1[i]=UART_BUFFER[i];
  106. //                                }
  107.                                        
  108.                                 LED0 = ~LED0;
  109.                                 delay_ms(500);
  110.                                 LED0 = ~LED0;
  111.                         }
  112. //                        OLED_Clear();
  113. //                                                        OLED_ShowString(0,3,"wlma;cm");
  114. //                        OLED_ShowString(0,3,content);
  115.          }
  116.    }
  117. }
復(fù)制代碼

所有程序51hei提供下載:
NRF24L01TX-RX.zip (115.53 KB, 下載次數(shù): 138)




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

使用道具 舉報

沙發(fā)
ID:459048 發(fā)表于 2019-7-25 16:02 | 只看該作者
沒原理圖頂不住啊
回復(fù)

使用道具 舉報

板凳
ID:389321 發(fā)表于 2019-7-28 22:36 | 只看該作者

普通最小系統(tǒng)就可以用啊,又不需要接什么外設(shè),IO口配置都有寫的
回復(fù)

使用道具 舉報

地板
ID:836670 發(fā)表于 2020-11-3 18:28 | 只看該作者
為什么全是程序呢,哪個是實現(xiàn)這個無線通信的程序呢
回復(fù)

使用道具 舉報

5#
ID:581979 發(fā)表于 2020-12-1 21:01 | 只看該作者
小晴a 發(fā)表于 2020-11-3 18:28
為什么全是程序呢,哪個是實現(xiàn)這個無線通信的程序呢

知道了嘛?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表