本設計由兩塊STC89C52RC單片機組成,通過NRF24L01實現最廉價的無線通信。
每塊單片機都是集收發于一體,先初始化會在OLED上顯示是否初始化成功,
然后通過按鍵可選擇收發模式,并在OLED屏幕上顯示出來
最后選擇串口調試助手,打開串口給單片機發送信息,單片機接收到后再通過NRF24L01向另一塊單片機發送
接收成功后會將接收到的信息顯示在OLED上。
OLED顯示屏較1602液晶顯示屏清楚,可現實的內容豐富,可以建立自己的字庫
并且占用的引腳較少
單片機源程序如下:
- #include "reg52.h"
- #include "oled.h"
- #include "bmp.h"
- #include "nrf24l01.h"
- #include "delay.h"
- #include "uart.h"
- #include "key.h"
- sbit LED0=P0^7;
- u8 *content;
- u8 *content1;
- u8 UART_BUFFER[64]={0};
- //u8 UART_BUFFER1[64];
- u8 RF24L01RxBuffer[64]={0};
- void main(void)
- {
- u32 num=0;
- u8 i,flag1=1,flag2=1;
- drv_spi_init( ); //SPI初始化
- drv_uart_init();
- NRF24L01_Gpio_Init( ); //RF24L01引腳初始化
- OLED_Init(); //初始化OLED
- OLED_Clear();
- NRF24L01_check( ); //檢測nRF24L01
- RF24L01_Init( );
- OLED_ShowString(0,0,"Init success");
- while(flag1)
- {
- if(KEY1==0)
- {
- delay_ms(5);
- if(KEY1==0)
- {
- RF24L01_Set_Mode( MODE_TX );
- flag1 = 0;
- flag2 = 0;
- OLED_ShowString(12*9+1,0,"TX");
- // OLED_ShowString(0,3,UART_BUFFER);
- }
- }
- if(KEY2==0)
- {
- delay_ms(5);
- if(KEY2==0)
- {
- RF24L01_Set_Mode( MODE_RX );
- OLED_ShowString(12*9+1,0,"RX");
- flag1 = 0;
- flag2=1;
- }
- }
- }
-
- if(flag2==1)
- {
- OLED_ShowString(0,2,"receive message:");
- while(1)
- {
- RF24L01_Set_Mode( MODE_RX );
- if(NRF24L01_RxPacket( RF24L01RxBuffer ))
- {
- OLED_ShowString(0,4,RF24L01RxBuffer);
- LED0=~LED0;
- delay_ms(500);
- LED0 = ~LED0;
- }
- }
- }
- if(flag2==0)
- {
- /*while(1)
- {
- if(KEY3==0)
- {
- num = drv_uart_rx_bytes();
- if(num)
- {
- content = UART_BUFFER;
- for(i=0;i<=num;i++)
- {
- *(content+i) = UART_BUFFER[i];
- }
- NRF24L01_TxPacket(content, num ); //模式1發送固定字符,1S一包
- LED0 = ~LED0;
- delay_ms(500);
- LED0 = ~LED0;
- }
- }
- }*/
- while(1)
- {
- num = drv_uart_rx_bytes();
- if(num)
- {
- content = UART_BUFFER;
- // content1 = UART_BUFFER;
- // OLED_ShowString(0,4,content1);
- for(i=0;i<num;i++)
- {
- *(content+i) = UART_BUFFER[i];
- }
- // *(content+i+1)='\0';
- NRF24L01_TxPacket(content, num ); //模式1發送固定字符,1S一包
- // for(i=0;i<64;i++)
- // {
- // UART_BUFFER1[i]=UART_BUFFER[i];
- // }
-
- LED0 = ~LED0;
- delay_ms(500);
- LED0 = ~LED0;
- }
- // OLED_Clear();
- // OLED_ShowString(0,3,"wlma;cm");
- // OLED_ShowString(0,3,content);
- }
- }
- }
復制代碼
所有程序51hei提供下載:
NRF24L01TX-RX.zip
(115.53 KB, 下載次數: 138)
2019-7-24 10:07 上傳
點擊文件名下載附件
收發一體源程序
|