哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦。其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯。
>_<!首先是发送模块:
void main()
{
uchar Tx_Buf1[]={}; //发送的信息1
uchar Rx_Buf[]; //接收到的数据暂存器,最多32字节数据
init_NRF24L01();
LED6=; //初始灯6熄灭 while(NRF24L01_Check()) //检查不到24l01则报警
{
beep=;
delay_ms();
beep=;
delay_ms();
}
while()
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式
{
if(KEY1==) //按了按键1,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms();//消抖动
if(KEY1==)
{
while(!KEY1);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将1发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms(); //发送后LED1闪一下
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY2==)
{
delay_ms();//消抖动
if(KEY2==)
{
while(!KEY2);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将2发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms();
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY3==)
{
delay_ms();//消抖动
if(KEY3==)
{
while(!KEY3);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将3发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms();
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
else if(KEY4==) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms();//消抖动
if(KEY4==)
{
while(!KEY4);
TX_Mode(); //发送模式
Tx_Buf1[]=; //将4发送过去
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms();
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
}
if(Rx_Buf[]==) //若接收到对应的数据则实现对应功能
{
Rx_Buf[]=; //清空数据
LED6=;
delay_ms();
LED6=;
delay_ms(); //接收到数据 后闪烁
}
}
}
第8~14行检测nRF24L01是否存在,如果不存在就报警,这里把beep映射到一个蜂鸣器的引脚;接下来进入主循环,首先设置为接收模式,循环检测是否收到数据,如果收到数据就直接跳到85行执行LED6的闪烁功能,在循环检测是否收到数据期间,还可以检测是否有按键按下,并转换为发送模式将对应命令发送出去;总的来说比较简单,这里就不做详解,此外要有一个nRF24L01的51驱动文件,网上很多,自己写起来有点烦~调试可能会出现很多错误!
>_<!接收端:
void main()
{
uchar Tx_Buf1[]={}; //发送的信息1
uchar Rx_Buf[]; //接收到的数据暂存器,最多32字节数据
init_NRF24L01();
LED6=; //初始灯6熄灭 while(NRF24L01_Check()) //检查不到24l01则报警
{
beep=;
delay_ms();
beep=;
delay_ms();
}
while()
{
RX_Mode(); //接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式
{
if(KEY8==) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
{
delay_ms();//消抖动
if(KEY8==)
{
while(!KEY8);
TX_Mode(); //发送模式
nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
LED6=;
delay_ms();
LED6=;
delay_ms(); //发送后LED6闪一下
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
}
////if(Rx_Buf[0]==1) //若接收到对应的数据则实现对应功能
////{
//// Rx_Buf[0]=0; //清空数据
//// LED6=0;
//// delay_ms(300);
//// LED6=1;
//// delay_ms(300); //接收到数据 后闪烁
////}
switch(Rx_Buf[]){//对数据进行分析来控制灯亮
case :
break;
case :
Rx_Buf[]=; //清空数据
LED1=;
delay_ms();
LED1=;
delay_ms();
break;
case :
Rx_Buf[]=; //清空数据
LED2=;
delay_ms();
LED2=;
delay_ms();
break;
case :
Rx_Buf[]=; //清空数据
LED3=;
delay_ms();
LED3=;
delay_ms();
break;
default:
Rx_Buf[]=; //清空数据
LED4=;
delay_ms();
LED4=;
delay_ms();
break;
}
}
}
这个就不解释啦,和发送的差不多,就是等待接收,接收的时候还能检测按键然后将命令发送过去,当收到数据时,就转到下面的switch对命令进行解析,来实现不同LED灯的亮灭。