基本成功。
收到數據時,能點亮一個led。
單片機 STC12C5260S2 1T
延時用的是51單片機小精靈 stc1T 模式編寫
1.8上午,發送程序已做部分優化,優化了延時,使延時更加短。
1.8下午,接收程序已做部分優化,優化了延時,使延時更加短。
發送主要程序(完整版請下載附件:
nrf2401—基本驅動程序.rar
(89 KB, 下載次數: 71)
2016-3-18 17:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
):
- #include "delay.h"
- #include "nrf2401.h"
- uchar TxRxBuff[32]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,
- 0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,
- 0x22,0x23,0x24,0x25,0x26};
- uint i;
- void init_uart() //串口初始化 2400
- {
- TMOD=0X20;
- SCON=0X50;
- TH1=0XF3;
- TL1=0XF3;
- PCON=0X00;
- EA=1;
- ES=1;
- TR1=1;
- }
- void serve_zd() interrupt 4
- {
- if(RI)
- {
- RI=0;
-
- }
- else
- {
- TI=0;
- }
- }
- void main()
- {
- bit flag=1;
- uint i,j;
- init_uart();
- Config2401();
- delay_600us();
- SetTxMode(); //設置為發送模式
- // 初始化后,為發送模式
- while(1)
- {
- for(i=0;i<30;i++) //延時一會兒
- for(j=0;j<30;j++);
- ///////////////
- /// 模式設置 ///
- //key1按下一次,設置為發送模式,按下key2,發送數據, //亮一個led
- //key1按下兩次,設置為接收模式,按下key3,將數據傳至mcu。//亮兩個led
-
- if(key1==0) //去抖檢測
- delay10ms();
- if(key1==0)
- {
- while(key1==0);
- if(key1==1) //松手檢測
- delay10ms();
- if(key1==1)
- {
- if(!flag)
- {
- flag=1; //置標志位,為下次按鍵準備
- led1=0; // 燈測試
- delay1ms(1000); //指示燈亮一秒
- SetTxMode(); //設置為發送模式
- led1=1; //燈滅,說明已設置好
- }
- if(flag) //第二次按鍵判斷 ,設置為接收模式
- {
- led1=0; //指示燈亮
- led2=0;
- delay1ms(1000);
- SetRxMode(); //設置為接收模式
- led1=1;
- led2=1; //指示燈滅,說明已設置好
- flag=0; //復位標志符
- }
- }
- }
- ////////////////////////////////////////////////////
- //////////////////////////////////////////////////
- if(key2==0) //去抖檢測
- delay10ms();
- if(key2==0)
- {
- while(key2==0);
- if(key2==1) //松手檢測
- delay10ms();
- if(key2==1)
- {
- if(!flag)
- {
- led3=0;
- nRF2401_TxPacket(TxRxBuff); //發送數組TxBuf[]內的數據
- delay1ms(1000);
- led3=1;
- }
- if(flag)
- {
-
- if(nRF2401_RxPacket(TxRxBuff)==1);//檢查是否有數據要收,若有,則存在數組RxBuf中
- //并返回 1;沒有則返回 0;
- {
- led3=0;
- led4=0;
- delay1ms(2000);
- led3=1;
- led4=1;
- }
-
- }
- }
- }
- ///////////////////////////////////////////////////
- ////////////////////////////////////////////////////
- if(key3==0) //去抖檢測
- delay10ms();
- if(key3==0)
- {
- while(key3==0);
- if(key3==1) //松手檢測
- delay10ms();
- if(key3==1)
- {
- led3=0;
- delay1ms(1000);
- i=0;
- while(TxRxBuff[i]!='\0')
- {
- SBUF=TxRxBuff[i];
- i++;
- delay_600us();
- }
- }
- }
- //////////////////////////////////////
- ///////////////////////////////////////////////
- /*
- 此處添加顯示程序
- */
- }
-
-
-
-
- }
-
復制代碼
接受部分主程序:
- #include "delay.h"
- #include "nrf2401.h"
- uchar TxRxBuff[32]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,
- 0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,
- 0x22,0x23,0x24,0x25,0x26};
- uint i;
- void init_uart() //串口初始化 2400
- {
- TMOD=0X20;
- SCON=0X50;
- TH1=0XF3;
- TL1=0XF3;
- PCON=0X00;
- EA=1;
- ES=1;
- TR1=1;
- }
- void serve_zd() interrupt 4
- {
- if(RI)
- {
- RI=0;
-
- }
- else
- {
- TI=0;
- }
- }
- void main()
- {
- bit flag=1;
- uint i,j;
- init_uart();
- Config2401();
- delay_600us();
- SetTxMode(); //設置為發送模式
- // 初始化后,為發送模式
- while(1)
- {
- for(i=0;i<30;i++) //延時一會兒
- for(j=0;j<30;j++);
- ///////////////
- /// 模式設置 ///
- //key1按下一次,設置為發送模式,按下key2,發送數據, //亮一個led
- //key1按下兩次,設置為接收模式,按下key3,將數據傳至mcu。//亮兩個led
-
- if(key1==0) //去抖檢測
- delay10ms();
- if(key1==0)
- {
- while(key1==0);
- if(key1==1) //松手檢測
- delay10ms();
- if(key1==1)
- {
- if(!flag)
- {
- flag=1; //置標志位,為下次按鍵準備
- led1=0; // 燈測試
- delay1ms(1000); //指示燈亮一秒
- SetTxMode(); //設置為發送模式
- led1=1; //燈滅,說明已設置好
- }
- if(flag) //第二次按鍵判斷 ,設置為接收模式
- {
- led1=0; //指示燈亮
- led2=0;
- delay1ms(1000);
- SetRxMode(); //設置為接收模式
- led1=1;
- led2=1; //指示燈滅,說明已設置好
- flag=0; //復位標志符
- }
- }
- }
- ////////////////////////////////////////////////////
- //////////////////////////////////////////////////
- if(key2==0) //去抖檢測
- delay10ms();
- if(key2==0)
- {
- while(key2==0);
- if(key2==1) //松手檢測
- delay10ms();
- if(key2==1)
- {
- if(!flag)
- {
- led3=0;
- nRF2401_TxPacket(TxRxBuff); //發送數組TxBuf[]內的數據
- delay1ms(1000);
- led3=1;
- }
- if(flag)
- {
-
- if(nRF2401_RxPacket(TxRxBuff)==1);//檢查是否有數據要收,若有,則存在數組RxBuf中
- //并返回 1;沒有則返回 0;
- {
- led3=0;
- led4=0;
- delay1ms(2000);
- led3=1;
- led4=1;
- }
-
- }
- }
- }
- ///////////////////////////////////////////////////
- ////////////////////////////////////////////////////
- if(key3==0) //去抖檢測
- delay10ms();
- if(key3==0)
- {
- while(key3==0);
- if(key3==1) //松手檢測
- delay10ms();
- if(key3==1)
- {
- led3=0;
- delay1ms(1000);
- i=0;
- while(TxRxBuff[i]!='\0')
- {
- SBUF=TxRxBuff[i];
- i++;
- delay_600us();
- }
- }
- }
- //////////////////////////////////////
- ///////////////////////////////////////////////
- /*
- 此處添加顯示程序
- */
- }
-
-
-
-
- }
-
復制代碼
|