Example #1
0
void main()
{
	unsigned char testdisplay[8]={'1','1','1','1','1','1','1','1'};
	uchar i; //自己加的
//	uchar datedisplay[7];
	init_io();
	P0=0x00;//屏蔽数码管
	 delay(10);                 //延时
//    wela=0;
//	dula=0; 
//	inte();
 lcd_init2();	
	lcd12864(testdisplay);
	/******************自己加的**************************/
	while(NRF_Check());	

	RX_Mode();//	
	interface();
	while(NRF24L01_RxPacket(RxBuf)!=0);
	while(1)
	{
		if(NRF24L01_RxPacket(RxBuf)==0)		
		{
			for(i=0;i<8;i++)
			datedisplay[i]=RxBuf[i];	
		}

	checkbutton();
	lcd12864(datedisplay);

	}		
}
/*=====================================================================================================*/
void NRF24L01_Init( u8 NRF_INIT_MODE )
{
  NRF_CE = 0;
  NRF_SetAddr(NRF_TX_ADDR, TX_ADDRESS);             // 設定 TX 地址
  NRF_SetAddr(NRF_RX_ADDR_P0, RX_ADDRESS);          // 設定 RX 地址
  NRF_WriteReg(CMD_W_REG | NRF_EN_AA, 0x01);        // 致能通道0的自動應答
  NRF_WriteReg(CMD_W_REG | NRF_EN_RXADDR, 0x01);    // 致能 data Pipe 0 的接收地址
  NRF_WriteReg(CMD_W_REG | NRF_SETUP_RETR, 0x1A);   // 設定自動重發間隔時間:500us + 86us;最大自動重發次數:10次
  NRF_SetChannel(NRF_CHANAL);                       // 設定傳輸通道(頻率)
  NRF_SetDataRate(NRF_RATE_2Mbps);                  // 設定傳輸速率 2Mbps
//  NRF_WriteReg(CMD_W_REG | NRF_RX_PW_P0, NRF_TX_PL_WIDTH);  // 設定通道0的有效數據寬度

  switch(NRF_INIT_MODE) {

    case NRF_MODE_FTLR:
      NRF_WriteReg(CMD_W_REG | NRF_CONFIG, 0x0E);   // Power UP,Enable 16bit CRC,TX Mode,no mask
      NRF_FlushRxFIFO();
      NRF_FlushTxFIFO();
      break;

    case NRF_MODE_FRLT:
      NRF_FlushRxFIFO();
      NRF_FlushTxFIFO();
      NRF_WriteReg(CMD_W_REG | NRF_CONFIG, 0x0F);   // Power UP,Enable 16bit CRC,RX Mode,no mask
      break;
  }

  NRF_WriteReg(CMD_RX_PL_WID, 0x73);
  NRF_WriteReg(CMD_W_REG | NRF_DYNPD, 0x01);
  NRF_WriteReg(CMD_W_REG | NRF_FEATURE, 0x07);

  NRF_CE = 1;

  while(NRF_Check()!=SUCCESS);
}
Example #3
0
int main(void)
{
    /* 串口1初始化 */
    USART1_Config();

    /*SPI接口初始化*/
    SPI_NRF_Init();

    printf("\r\n 这是一个 NRF24L01 无线传输实验 \r\n");
    printf("\r\n 这是无线传输 从机端 的反馈信息\r\n");
    printf("\r\n   正在检测NRF与MCU是否正常连接。。。\r\n");

    /*检测NRF模块与MCU的连接*/
    status = NRF_Check();
    if(status == SUCCESS)
        printf("\r\n      NRF与MCU连接成功\r\n");
    else
        printf("\r\n   正在检测NRF与MCU是否正常连接。。。\r\n");

    while(1)
    {
        printf("\r\n 从机端 进入接收模式\r\n");
        NRF_RX_Mode();

        /*等待接收数据*/
        status = NRF_Rx_Dat(rxbuf);

        /*判断接收状态*/
        if(status == RX_DR)
        {
            for(i=0; i<4; i++)
            {
                printf("\r\n 从机端 接收到 主机端 发送的数据为:%d \r\n",rxbuf[i]);
                /*把接收的数据+1后发送给主机*/
                rxbuf[i]+=1;
                txbuf[i] = rxbuf[i];
            }
        }
        printf("\r\n 从机端 进入自应答发送模式\r\n");
        NRF_TX_Mode();

        /*不断重发,直至发送成功*/
        do
        {
            status = NRF_Tx_Dat(txbuf);
        } while(status == MAX_RT);
    }
}
Example #4
0
/*
 * 函数名:NRF_Init
 * 描述  :SPI的 I/O配置
 * 输入  :无
 * 输出  :无
 * 调用  :外部调用
 */
void NRF_Init(void)
{
    //配置NRF管脚复用
    spi_init(NRF_SPI,MASTER);               //初始化SPI,主机模式
    
    gpio_init(PORTE,28, GPO,LOW);           //初始化CE,默认进入待机模式
    //gpio_init(PORTE,27, GPI,LOW);           //初始化IRQ管脚为输入 
    gpio_init(PORTA,14, GPO,HIGH);          //初始化PCSN管脚为输出,低电平选中  
    
#if IS_USE_ISR
    exti_init(PORTE,27, falling_up);        //初始化IRQ管脚为 :下降沿触发,内部上拉
#else
    gpio_init(PORTE,27, GPI,LOW);           //初始化IRQ管脚为输入     
#endif
    
    //配置NRF寄存器
    NRF_CE_LOW();	
    
    NRF_WriteReg(NRF_WRITE_REG+SETUP_AW,ADR_WIDTH - 2);     //设置地址长度为 TX_ADR_WIDTH
    
    NRF_WriteReg(NRF_WRITE_REG+RF_CH,CHANAL);               //设置RF通道为CHANAL
 
    NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f);              //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 
    
    NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01);                 //使能通道0的自动应答  
    
    NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01);             //使能通道0的接收地址    
    
    //RX模式配置
    //NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址

    NRF_WriteReg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);    //选择通道0的有效数据宽度   
    
    //TX模式配置
    //NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);    //写TX节点地址 ,主要为了使能ACK   

    NRF_WriteReg(NRF_WRITE_REG+SETUP_RETR,0x0F);            //设置自动重发间隔时间:250us + 86us;最大自动重发次数:15次
    
#if IS_AUTO_RX_MODE
    NRF_RX_Mode();          //默认进入接收模式
#endif
    NRF_CE_HIGH();

    while(NRF_Check() == 0);                            //检测无线模块是否插入:如果卡在这里,说明没检测到无线模块
    
}
Example #5
0
 /**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)                  
{   
  SPI_NRF_Init();

  /* 串口1初始化 */
  USART1_Config();

  printf("\r\n 这是一个 NRF24L01 无线传输实验 \r\n");
  printf("\r\n 这是无线传输 主机端 的反馈信息\r\n");
  printf("\r\n   正在检测NRF与MCU是否正常连接。。。\r\n");

  /*检测NRF模块与MCU的连接*/
  status = NRF_Check(); 

  /*判断连接状态*/  
  if(status == SUCCESS)	   
    printf("\r\n      NRF与MCU连接成功!\r\n");  
  else	  
    printf("\r\n  NRF与MCU连接失败,请重新检查接线。\r\n");

  while(1)
  {
    printf("\r\n 主机端 进入自应答发送模式\r\n"); 
    NRF_TX_Mode();

    /*开始发送数据*/	
    status = NRF_Tx_Dat(txbuf);	  

    /*判断发送状态*/
    switch(status)
    {
      case MAX_RT:
        printf("\r\n 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 \r\n");
      break;

      case ERROR:
        printf("\r\n 未知原因导致发送失败。 \r\n");
      break;

      case TX_DS:
        printf("\r\n 主机端 接收到 从机端 的应答信号,发送成功! \r\n");	 		
      break;  								
    }			   	

    printf("\r\n 主机端 进入接收模式。 \r\n");	
    NRF_RX_Mode();

    /*等待接收数据*/
    status = NRF_Rx_Dat(rxbuf);

    /*判断接收状态*/
    switch(status)
    {
      case RX_DR:
      for(i=0;i<4;i++)
      {					
        printf("\r\n 主机端 接收到 从机端 发送的数据为:%d \r\n",rxbuf[i]);
        txbuf[i] =rxbuf[i];
      }
      break;

      case ERROR:
        printf("\r\n 主机端 接收出错。   \r\n");
      break;  		
    }
  }// while(1)
}
Example #6
0
void main()			   
{													  
	uchar shujv[8];		
	uchar stop=0;
	uchar cejv=1; 
	uchar flag=0;
	uchar helpcejv=0;	 
	init_io();
	led0=1;led1=1;ledk=1; 
	while(NRF_Check())	 
	{
		led0=0;
		delayms(1000);
		led0=1;
		delayms(1000);								  
	}	
	TX_Mode();		   //设置为发送模式
	/*************自己加的***********************/
	while(CNRF_Check())	 //检查nrf是否存在
	{
		led0=0;
		delayms(1000);
		led0=1;
		delayms(1000);								  
	}	
	CTX_Mode();
	/*************自己加的***********************/
	stop=byte_read(0x2000);		//读取上一次保留的值
	while(1)
	{
			wenshi(shujv); //写入前4个数据
		//	yali(shujv);//写入第5个数据
		//	shache(shujv);//写入第六个数据
	Get_weight();
	if (weight_shiwu/1000<=5)
	shujv[4]='0';
	else shujv[4]='1';


	if(stop==0)		 
		shujv[5]='1';
	if(stop==1)		 
		shujv[5]='0';
		if(out==0)	
		shujv[6]='1';
		else	
		shujv[6]='0';

		//////////////////////////////
			if(NRF24L01_TxPacket(shujv)==TX_OK)	
			{
				led1=0;
				delayms(300);
				led1=1;
				delayms(10);
				/////
				flag=1;
			}
			else flag=0;

	   //////////////////////////////
			if(flag==1)
			{
				if(CNRF24L01_TxPacket(shujv)==TX_OK)	
				{
					led3=0;
					delayms(300);
					led3=1;
					delayms(10);
					cejv=0;		
					helpcejv=0;
				}	
				else  
				{
					helpcejv++;
					delayms(100);
					if(helpcejv>2)
					{  			led2=0;
								delayms(300);
								led2=1;
								delayms(10);
						cejv=0;
						helpcejv=0;	
					}		 
				}
			/////////////////////////////////////////////////
							
			if(shache(cejv,stop)==1)	
			{
					led0=0;
					delayms(300);
					led0=1;
					delayms(10);
			stop=1;							  
			SectorErase(0x2000);
			byte_write(0x2000,stop);
			}
			if(checkbutton(cejv,stop)==0)
			{stop=1;
						
			SectorErase(0x2000);
			byte_write(0x2000,stop);
			}
			}			
	}
}