本设计可以实现两块51单片机开发板之间通过NRF24L01实现无线通信。开发板可以在接收模式和发送模式之间切换。在发送板上按下对应的按键,接收板上的灯可以对应的在亮和暗两个状态之间切换。其中LED灯可以根据需求换成继电器或者其它东西,在本设计的基础上可以设计出个性化的产品。
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1j_MltJWPoMMbkIaX7fOayw?pwd=8888
部分代码展示
#include <reg51.h>
#include "2401.h"
sbit KEY1=P2^0; //发送按键
sbit KEY2=P2^1; //发送按键
sbit beep=P3^5; //喇叭
sbit LED=P2^6; //接收到数据后的功能实现灯
void delay_ms(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delayms(unsigned int x)
{
unsigned int i;
while(x--)
for(i=125;i>0;i--);
}
void main()
{
uchar Tx_Buf1[]={1};//发送的信息1
uchar Tx_Buf2[]={2};//发送的信息1
uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据
init_NRF24L01();
LED=0; //初始灯6熄灭
while(NRF24L01_Check()) //检查不到24l01则报警
{
beep=0;
delayms(200);
beep=1;
delayms(200);
}
while(1)
{
RX_Mode();//接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据 ,返回1则接收到数据 ,在等待接收数据期间,可以随时变成发送模式
{
if(KEY1==0) //按了按键1 则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY1==0)
{
while(!KEY1);
TX_Mode(); //发送模式
if(nRF24L01_TxPacket(Tx_Buf1) == TX_OK)
{
LED = !LED;
delay_ms(500);
delay_ms(500);
delay_ms(500);
}
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
if(KEY2==0) //按了按键1 则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms(5);//消抖动
if(KEY2==0)
{
while(!KEY2);
TX_Mode(); //发送模式
if(nRF24L01_TxPacket(Tx_Buf2) == TX_OK)
{
LED = !LED;
delay_ms(500);
delay_ms(500);
delay_ms(500);
}
break; //退出最近的循环,从而变回接收模式,这句关键
}