本设计由两块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)
|