⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nrf905.c

📁 能较好的实现无线通信 用点阵来实现 距离有100米 程序已通过调试
💻 C
📖 第 1 页 / 共 2 页
字号:

}

unsigned char temp [32]=
{
0x04,0x04,0xFE,0xFE,0x28,0x84,0x28,0xFC,
0xFE,0x84,0xAA,0xFC,0xAA,0x20,0xAE,0xA0,
0xC2,0xFC,0x83,0x20,0x82,0x20,0xFE,0xFC,
0x82,0x20,0x82,0x24,0xFF,0xFE,0x82,0x00 //醒

};

bit wfg = 0;    //display 
bit shfg = 0;  //唤醒 睡眠  数据备份flag

unsigned char r = 0;			   
void main()
{
	

    //SCON=0x50;  //模式1
    //TMOD=0x21;  //定时模式2
    //IE=0x90;

    //=====9600=======设置串口通讯寄存器
    //PCON=0x00;   //波特率9600BPS,晶振11.0592MHZ
   // TH1=0xFD;  //
   // TL1=0xFD;  //计数器初值
    //================NRF905初始化
	CSN=1;						// Spi 	disable						
	SCK=0;						// Spi clock line init high
	DR=1;						// Init DR for input
	AM=1;						// Init AM for input
	PWR_UP=1;					// nRF905 power on
	TRX_CE=0;					// Set nRF905 in standby mode
	TX_EN=0;					// set radio in Rx mode	

   // TI = 0;//串行中断标志位清零
   // TR1 = 1;//打开计数器1  
	//================
	Config905();				// Config nRF905 module
	SetRxMode();
	Adjust_res_18B20(0x3f);
	ReadTemperature();

	

//	print_Char('a');
/*
	Adjust_res_18B20(0x3f);
	ReadTemperature();
	print_Char(sdata/10 +'0');
			print_Char(sdata%10 +'0');
			print_Char('.');			
			print_Char(xiaoshu/10 +'0');
			print_Char(xiaoshu%10 +'0');
			print_Char('\n');
			*/

	//WriteNByte(0xa0,0,TXBuffer,32);
	//ReadNByte(0xa0,0,RXBuffer,32);
//	Display_Init();

while(1)
{
	if(wfg==0)
	{
		Display_Init();
	}

	if(wfg==1)
	{
	   Display();

	   if (shfg == 0)
	   {
			for (r=0; r<32; ++r)
			{
				temp[r] = text[r+32];
			}
	   	}
	}  //Displayadd();

         //=====================等待NRF905接收
	   if (DR)
	   {			// If recive data ready... 
	   		RxPacket();	 // ... recive data
			//print_Str(RxBuf);
		//	print_Char('b');
			if (RxBuf[0]==0x11&&RxBuf[1]=='\0')	  //接收到睡眠命令
			{
				if (flg==0)    //睡眠
				{
			//		 print_Char('f');
			//		 P15 = 1;      //禁止74HC154
					for (r=0; r<32; ++r)
					{
						text[r+32] = 0x00;
					}

					shfg = 1;	//禁止备份

				}
				else	   //唤醒
				{
			//		 print_Char('l');
			  
					Read_24c04_32bit((keycount-1));

					for (r=0; r<32; ++r)
					{
						text[r+32] = temp[r];
					}

					shfg = 0;	//开始备份

				
				}
				flg = ~flg;


				wfg = 1;
				
				
			}
			else if (RxBuf[0]==0x02&&RxBuf[1]=='\0')	 //接收到发送温度命令
			{
				 //Adjust_res_18B20(0x3f);
				 ReadTemperature();
				 delays_key();
				 delays_key();
				 delays_key();
				 delays_key();
				 delays_key();
				 delays_key();
				 TxBuf[0] = sdata/10;
				 TxBuf[1] = sdata%10;
				 TxBuf[2] = xiaoshu/10;
				 TxBuf[3] = xiaoshu%10;
				 SetTxMode();				// Set Tx Mode
		         TxPacket();				// Transmit Tx buffer data

				 //for (r=0; r<32; ++r)
				 //{
					//TxBuf[r]='\0';
				// } 
				 
				 SetRxMode();				// Set nRF905 in Rx mode

				 wfg = 0;

				 for (r=0; r<32; ++r)
				 {
					Int[r+32] = Digital[(sdata/10)*32+r];
				 }
				 for (r=32; r<64; ++r)
				 {
					Int[r+32] = Digital[(sdata%10)*32+r-32];
				 }
				 for (r=0; r<32; ++r)
				 {
				 	Int[r+96] = xiaoshudian[r];
				 }
				 for (r=96; r<128; ++r)
				 {
					Int[r+32] = Digital[(xiaoshu/10)*32+r-96];
				 }
				 for (r=128; r<160; ++r)
				 {
					Int[r+32] = Digital[(xiaoshu%10)*32+r-128];
				 }
				 for (r=0; r<32; ++r)
				 {
				 	Int[r+192] = sheshidu[r];
				 }

		   /*
			print_Char(sdata/10 +'0');
			print_Char(sdata%10 +'0');
			print_Char('.');			
			print_Char(xiaoshu/10 +'0');
			print_Char(xiaoshu%10 +'0');
			print_Char('\n'); 
			*/			
			}
			else// if(strlen(RxBuf)>1)//RxBuf[5]!='\0'||RxBuf[31]!='\0'||RxBuf[15]!='\0'||RxBuf[22]!='\0'||RxBuf[24]!='\0')             //接收到汉字码
			{
			   
			   Write_24c04_32bit(count);
			   count++;


			 //  print_Char('e');
			//   print_Str(RxBuf);

				for (r=0; r<32; ++r)
				{
					text[r+32] = RxBuf[r];
				}

				wfg = 1;
				
			}
			 
			for (r=0; r<32; ++r)
			{
				RxBuf[r]='\0';
			}                                  
			
		}				
		

		if (Key == 0)
		{
			delays_key();

			if (Key == 0)
			{
			    Read_24c04_32bit(keycount);					
				keycount++;
				//此处添加点阵代码
				
				for (r=0; r<32; ++r)
				{
					text[r+32] = RXBuffer[r];
				}

				//print_Str(RXBuffer);                
			}

			wfg = 1;

			while(Key==0);  //等待按键释放
		}
			 
	   			

	/*	  串口部分
	if (RxWriteIndex>0)
	{	

		//print_Str(TxBuf);		
		
		SetTxMode();				// Set Tx Mode
		TxPacket();					// Transmit Tx buffer data
		TxBuf[0] = '\0';
		SetRxMode();				// Set nRF905 in Rx mode
		RxWriteIndex = 0;
		
	}
	*/

}

}


void Write_24c04_32bit(unsigned char count)
{
		WriteNByte(0xa0,16*count*2,RxBuf,16);         //RxBuf  905
		WriteNByte(0xa0,16*count*2+16,&RxBuf[16],16);
}

void Read_24c04_32bit(unsigned char keycount)
{
		ReadNByte(0xa0,16*keycount*2,RXBuffer,16);		  //RXBuffer   24c04
		ReadNByte(0xa0,16*keycount*2+16,&RXBuffer[16],16);
}
	

/*******************************************************************************************/
/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void Config905(void)
{
	uchar i;					
	CSN=0;						// Spi enable for write a spi command
	SpiWrite(WC);				// Write config command写放配置命令
	for (i=0;i<RxTxConf.n;i++)	// Write configration words  写放配置字
	{
		SpiWrite(RxTxConf.buf[i]);
	}
	CSN=1;						// Disable Spi
}
/*******************************************************************************************/
//function SpiWrite();
/*******************************************************************************************/
void SpiWrite(uchar  byte)
{
	uchar i;	
	DATA_BUF=byte;				// Put function's parameter into a bdata variable		
	for (i=0;i<8;i++)			// Setup byte circulation bits
	{	
		
		if (flag)				// Put DATA_BUF.7 on data line
			MOSI=1;
		else
			MOSI=0;
		SCK=1;					// Set clock line high
		DATA_BUF=DATA_BUF<<1;	// Shift DATA_BUF
		SCK=0;					// Set clock line low 
	}	
}
/*******************************************************************************************/
//function SpiRead();
/*******************************************************************************************/
uchar SpiRead(void)
{
	uchar i;	
	for (i=0;i<8;i++)			// Setup byte circulation bits
	{	
		DATA_BUF=DATA_BUF<<1;	// Right shift DATA_BUF
		SCK=1;					// Set clock line high
		if (MISO)
			flag1=1;			// Read data
		else
			flag1=0;
							
		
		SCK=0;					// Set clock line low
	}
	return DATA_BUF;			// Return function parameter
}
/*******************************************************************************************/
//function TxPacket();
/*******************************************************************************************/
void TxPacket(void)
{
	uchar i;
	//Config905();				
	CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTP);				// Write payload command
	for (i=0;i<32;i++)
	{
		SpiWrite(TxBuf[i]);		// Write 32 bytes Tx data
	}
	CSN=1;						// Spi disable						
	Delay(1);
	CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTA);				// Write address command
	for (i=0;i<4;i++)			// Write 4 bytes address
	{
		SpiWrite(RxTxConf.buf[i+5]);
	}	
	CSN=1;						// Spi disable
	TRX_CE=1;					// Set TRX_CE high,start Tx data transmission
	Delay(1);					// while (DR!=1);
	TRX_CE=0;					// Set TRX_CE low
}
/*******************************************************************************************/
//function RxPacket();
/*******************************************************************************************/
void RxPacket(void)
{
	uchar i;	
	TRX_CE=0;					// Set nRF905 in standby mode	
	CSN=0;						// Spi enable for write a spi command
	SpiWrite(RRP);				// Read payload command	
	for (i=0;i<32;i++)
	{
		RxBuf[i]=SpiRead();		// Read data and save to buffer		
	}
	CSN=1;						// Disable spi
	while(DR||AM);	
	//P0=	RxBuf[0];				// Buffer[0] output from P0 port...
	TRX_CE=1;
						
}
/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)				
{	
	TX_EN=1;
	TRX_CE=0;
	Delay(1); 					// delay for mode change(>=650us)
}				
/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
	TX_EN=0;
	TRX_CE=1;
	Delay(1); 					// delay for mode change(>=650us)				
}

void delays_key(void)
{
	uchar i;

	for (i=1300; i>0; --i);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -