入正题,这个试验的功用便是一个发送模块(大的那个板)衔接4个按键,经过按动这4个不同的按键来发送4种不同的指令,来操控接纳端(小的板)点亮4个不同的灯。
>_
1 void main()2 {3 uchar Tx_Buf1[]={1}; //发送的信息1 4 uchar Rx_Buf[32]; //接纳到的数据暂存器,最多32字节数据 5 init_NRF24L01();6 LED6=1; //初始灯6平息 7 8 while(NRF24L01_Check()) //查看不到24l01则报警 9 {10 beep=0;11 delay_ms(200);12 beep=1;13 delay_ms(200);14 }15 while(1)16 { 17 RX_Mode(); //接纳形式 18 while(!nRF24L01_RxPacket(Rx_Buf)) //等候接纳数据,回来1则接纳到数据,在等候接纳数据期间,能够随时变成发送形式 19 {20 if(KEY1==0) //按了按键1,则变成发送形式,发送对应数据,发送完后变成接纳形式 21 { 22 delay_ms(5);//消颤动 23 if(KEY1==0)24 {25 while(!KEY1);26 TX_Mode(); //发送形式 27 Tx_Buf1[0]=1; //将1发送曩昔28 nRF24L01_TxPacket(Tx_Buf1); //发送指令数据29 LED6=0;30 delay_ms(300);31 LED6=1;32 delay_ms(300); //发送后LED1闪一下 33 break; //退出最近的循环,然后变回接纳形式,这句要害34 } 35 }36 else if(KEY2==0) 37 { 38 delay_ms(5);//消颤动 39 if(KEY2==0)40 {41 while(!KEY2);42 TX_Mode(); //发送形式 43 Tx_Buf1[0]=2; //将2发送曩昔44 nRF24L01_TxPacket(Tx_Buf1); //发送指令数据45 LED6=0;46 delay_ms(300);47 LED6=1;48 delay_ms(300); 49 break; //退出最近的循环,然后变回接纳形式,这句要害50 } 51 }52 else if(KEY3==0) 53 { 54 delay_ms(5);//消颤动 55 if(KEY3==0)56 {57 while(!KEY3);58 TX_Mode(); //发送形式 59 Tx_Buf1[0]=3; //将3发送曩昔60 nRF24L01_TxPacket(Tx_Buf1); //发送指令数据61 LED6=0;62 delay_ms(300);63 LED6=1;64 delay_ms(300); 65 break; //退出最近的循环,然后变回接纳形式,这句要害66 } 67 }68 else if(KEY4==0) //按了按键8,则变成发送形式,发送对应数据,发送完后变成接纳形式 69 { 70 delay_ms(5);//消颤动 71 if(KEY4==0)72 {73 while(!KEY4);74 TX_Mode(); //发送形式 75 Tx_Buf1[0]=4; //将4发送曩昔76 nRF24L01_TxPacket(Tx_Buf1); //发送指令数据77 LED6=0;78 delay_ms(300);79 LED6=1;80 delay_ms(300); 81 break; //退出最近的循环,然后变回接纳形式,这句要害82 } 83 }84 }85 if(Rx_Buf[0]==1) //若接纳到对应的数据则完成对应功用 86 {87 Rx_Buf[0]=0; //清空数据 88 LED6=0;89 delay_ms(300);90 LED6=1;91 delay_ms(300); //接纳到数据 后业绩 92 }93 }94 }
第8~14行检测nRF24L01是否存在,假如不存在就报警,这儿把beep映射到一个蜂鸣器的引脚;接下来进入主循环,首要设置为接纳形式,循环检测是否收到数据,假如收到数据就直接跳到85行碑文LED6的业绩功用,在循环检测是否收到数据期间,还能够检测是否有按键按下,并转换为发送形式将对应指令发送出去;总的来说比较简单,这儿就不做详解,此外要有一个nRF24L01的51驱动文件,网上许多,自己写起来有点烦~调试可能会呈现许多过错!
>_
1 void main()2 {3 uchar Tx_Buf1[]={1}; //发送的信息1 4 uchar Rx_Buf[32]; //接纳到的数据暂存器,最多32字节数据 5 init_NRF24L01();6 LED6=1; //初始灯6平息 7 8 while(NRF24L01_Check()) //查看不到24l01则报警 9 {10 beep=0;11 delay_ms(200);12 beep=1;13 delay_ms(200);14 }15 while(1)16 { 17 RX_Mode(); //接纳形式 18 while(!nRF24L01_RxPacket(Rx_Buf)) //等候接纳数据,回来1则接纳到数据,在等候接纳数据期间,能够随时变成发送形式 19 {20 if(KEY8==0) //按了按键8,则变成发送形式,发送对应数据,发送完后变成接纳形式 21 { 22 delay_ms(5);//消颤动 23 if(KEY8==0)24 {25 while(!KEY8);26 TX_Mode(); //发送形式 27 nRF24L01_TxPacket(Tx_Buf1); //发送指令数据28 LED6=0;29 delay_ms(300);30 LED6=1;31 delay_ms(300); //发送后LED6闪一下 32 break; //退出最近的循环,然后变回接纳形式,这句要害33 } 34 }35 }36 //1//if(Rx_Buf[0]==1) //若接纳到对应的数据则完成对应功用 37 //1//{38 //1// Rx_Buf[0]=0; //清空数据 39 //1// LED6=0;40 //1// delay_ms(300);41 //1// LED6=1;42 //1// delay_ms(300); //接纳到数据 后业绩 43 //1//}44 switch(Rx_Buf[0]){//对数据进行剖析来操控灯亮45 case 0:46 break;47 case 1:48 Rx_Buf[0]=0; //清空数据 49 LED1=0;50 delay_ms(300);51 LED1=1;52 delay_ms(300); 53 break;54 case 2:55 Rx_Buf[0]=0; //清空数据 56 LED2=0;57 delay_ms(300);58 LED2=1;59 delay_ms(300); 60 break;61 case 3:62 Rx_Buf[0]=0; //清空数据 63 LED3=0;64 delay_ms(300);65 LED3=1;66 delay_ms(300); 67 break;68 default:69 Rx_Buf[0]=0; //清空数据 70 LED4=0;71 delay_ms(300);72 LED4=1;73 delay_ms(300); 74 break;75 } 76 }77 }
这个就不解说啦,和发送的差不多,便是等候接纳,接纳的时分还能检测按键然后将指令发送曩昔,当收到数据时,就转到下面的switch对指令进行解析,来完成不同LED灯的亮灭。