基本成功。
收到数据时,能点亮一个led。
单片机 STC12C5260S2 1T
延时用的是51单片机小精灵 stc1T 模式编写
1.8上午,发送程序已做部分优化,优化了延时,使延时更加短。
1.8下午,接收程序已做部分优化,优化了延时,使延时更加短。
发送主要程序(完整版请下载附件:
nrf2401—基本驱动程序.rar
(89 KB, 下载次数: 71)
):
- #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();
- }
- }
- }
- //////////////////////////////////////
- ///////////////////////////////////////////////
- /*
- 此处添加显示程序
- */
- }
-
-
-
-
- }
-
复制代码
|