×
单片机 > 单片机程序设计 > 详情

STC89C52RC单片机的NRF24L01无线通信程序,收发一体

发布时间:2021-05-14 发布时间:
|

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


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈msp430f5529入门(2)----时钟配置.例程分析