51單片機(jī) nRF24L01 無(wú)線(xiàn)模塊 測(cè)試 按鍵燈遠(yuǎn)程控制
>_
1 void main()2 {3 uchar Tx_Buf1[]={1}; //發(fā)送的信息1 4 uchar Rx_Buf[32]; //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù) 5 init_NRF24L01();6 LED6=1; //初始燈6熄滅 7 8 while(NRF24L01_Check()) //檢查不到24l01則報(bào)警 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)) //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時(shí)變成發(fā)送模式 19 {20 if(KEY1==0) //按了按鍵1,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式 21 { 22 delay_ms(5);//消抖動(dòng) 23 if(KEY1==0)24 {25 while(!KEY1);26 TX_Mode(); //發(fā)送模式 27 Tx_Buf1[0]=1; //將1發(fā)送過(guò)去28 nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)29 LED6=0;30 delay_ms(300);31 LED6=1;32 delay_ms(300); //發(fā)送后LED1閃一下 33 break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵34 } 35 }36 else if(KEY2==0) 37 { 38 delay_ms(5);//消抖動(dòng) 39 if(KEY2==0)40 {41 while(!KEY2);42 TX_Mode(); //發(fā)送模式 43 Tx_Buf1[0]=2; //將2發(fā)送過(guò)去44 nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)45 LED6=0;46 delay_ms(300);47 LED6=1;48 delay_ms(300); 49 break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵50 } 51 }52 else if(KEY3==0) 53 { 54 delay_ms(5);//消抖動(dòng) 55 if(KEY3==0)56 {57 while(!KEY3);58 TX_Mode(); //發(fā)送模式 59 Tx_Buf1[0]=3; //將3發(fā)送過(guò)去60 nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)61 LED6=0;62 delay_ms(300);63 LED6=1;64 delay_ms(300); 65 break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵66 } 67 }68 else if(KEY4==0) //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式 69 { 70 delay_ms(5);//消抖動(dòng) 71 if(KEY4==0)72 {73 while(!KEY4);74 TX_Mode(); //發(fā)送模式 75 Tx_Buf1[0]=4; //將4發(fā)送過(guò)去76 nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)77 LED6=0;78 delay_ms(300);79 LED6=1;80 delay_ms(300); 81 break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵82 } 83 }84 }85 if(Rx_Buf[0]==1) //若接收到對(duì)應(yīng)的數(shù)據(jù)則實(shí)現(xiàn)對(duì)應(yīng)功能 86 {87 Rx_Buf[0]=0; //清空數(shù)據(jù) 88 LED6=0;89 delay_ms(300);90 LED6=1;91 delay_ms(300); //接收到數(shù)據(jù) 后閃爍 92 }93 }94 }
第8~14行檢測(cè)nRF24L01是否存在,如果不存在就報(bào)警,這里把beep映射到一個(gè)蜂鳴器的引腳;接下來(lái)進(jìn)入主循環(huán),首先設(shè)置為接收模式,循環(huán)檢測(cè)是否收到數(shù)據(jù),如果收到數(shù)據(jù)就直接跳到85行執(zhí)行LED6的閃爍功能,在循環(huán)檢測(cè)是否收到數(shù)據(jù)期間,還可以檢測(cè)是否有按鍵按下,并轉(zhuǎn)換為發(fā)送模式將對(duì)應(yīng)命令發(fā)送出去;總的來(lái)說(shuō)比較簡(jiǎn)單,這里就不做詳解,此外要有一個(gè)nRF24L01的51驅(qū)動(dòng)文件,網(wǎng)上很多,自己寫(xiě)起來(lái)有點(diǎn)煩~調(diào)試可能會(huì)出現(xiàn)很多錯(cuò)誤!
>_
1 void main()2 {3 uchar Tx_Buf1[]={1}; //發(fā)送的信息1 4 uchar Rx_Buf[32]; //接收到的數(shù)據(jù)暫存器,最多32字節(jié)數(shù)據(jù) 5 init_NRF24L01();6 LED6=1; //初始燈6熄滅 7 8 while(NRF24L01_Check()) //檢查不到24l01則報(bào)警 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)) //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時(shí)變成發(fā)送模式 19 {20 if(KEY8==0) //按了按鍵8,則變成發(fā)送模式,發(fā)送對(duì)應(yīng)數(shù)據(jù),發(fā)送完后變成接收模式 21 { 22 delay_ms(5);//消抖動(dòng) 23 if(KEY8==0)24 {25 while(!KEY8);26 TX_Mode(); //發(fā)送模式 27 nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)28 LED6=0;29 delay_ms(300);30 LED6=1;31 delay_ms(300); //發(fā)送后LED6閃一下 32 break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵33 } 34 }35 }36 //1//if(Rx_Buf[0]==1) //若接收到對(duì)應(yīng)的數(shù)據(jù)則實(shí)現(xiàn)對(duì)應(yīng)功能 37 //1//{38 //1// Rx_Buf[0]=0; //清空數(shù)據(jù) 39 //1// LED6=0;40 //1// delay_ms(300);41 //1// LED6=1;42 //1// delay_ms(300); //接收到數(shù)據(jù) 后閃爍 43 //1//}44 switch(Rx_Buf[0]){//對(duì)數(shù)據(jù)進(jìn)行分析來(lái)控制燈亮45 case 0:46 break;47 case 1:48 Rx_Buf[0]=0; //清空數(shù)據(jù) 49 LED1=0;50 delay_ms(300);51 LED1=1;52 delay_ms(300); 53 break;54 case 2:55 Rx_Buf[0]=0; //清空數(shù)據(jù) 56 LED2=0;57 delay_ms(300);58 LED2=1;59 delay_ms(300); 60 break;61 case 3:62 Rx_Buf[0]=0; //清空數(shù)據(jù) 63 LED3=0;64 delay_ms(300);65 LED3=1;66 delay_ms(300); 67 break;68 default:69 Rx_Buf[0]=0; //清空數(shù)據(jù) 70 LED4=0;71 delay_ms(300);72 LED4=1;73 delay_ms(300); 74 break;75 } 76 }77 }
這個(gè)就不解釋啦,和發(fā)送的差不多,就是等待接收,接收的時(shí)候還能檢測(cè)按鍵然后將命令發(fā)送過(guò)去,當(dāng)收到數(shù)據(jù)時(shí),就轉(zhuǎn)到下面的switch對(duì)命令進(jìn)行解析,來(lái)實(shí)現(xiàn)不同LED燈的亮滅。
評(píng)論