本设计由两块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 { *(content+i) = UART_BUFFER[i]; } // *(content+i+1)='
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』