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

📄 main.c

📁 第二届盛群比赛之前做的一个项目
💻 C
📖 第 1 页 / 共 2 页
字号:
 
	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;		
	
	
}

/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void Config905(void)
{
	uchar i,c;					
	CSN=0;						// Spi enable for write a spi command
	SpiWrite(WC);				// Write config command

	for (i=0;i<10;i++)	// Write configration words
	{
		c=RxTxConf_buf[i];
		SpiWrite(c);
	}
	CSN=1;						// Disable Spi
}
/*******************************************************************************************/
//function Delay100us();Delay 100us
/*******************************************************************************************/
void Delay(uchar n)
{
	uint i;
	while(n--)
	for(i=0;i<80;i++);	
}
/*******************************************************************************************/
//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 (DATA_BUF&0x80)				// 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)
			DATA_BUF =DATA_BUF | 0x01;			// Read data
		else
			DATA_BUF =DATA_BUF & 0xfe;
							
		
		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;//,xx;	
	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...
	RecFirChar = RxBuf[0];
	if((RecFirChar==0x01) || (RecFirChar==0x02)){
	
		for(i=0;i<16;i++)
			LCD_write_char(i,LINE2,' ');
				
		FlagRec=1;
		//LCD_write_char(5,LINE2,'s'); 
		LCD_write_char(0,LINE2,RxBuf[1]); 
		LCD_write_char(1,LINE2,RxBuf[2]); 
		LCD_write_char(2,LINE2,RxBuf[3]); 
		LCD_write_char(3,LINE2,RxBuf[4]); 
		LCD_write_char(4,LINE2,RxBuf[5]); 
		LCD_write_char(5,LINE2,RxBuf[6]); 
		if(RecFirChar==0x01) 
		{
			LCD_write_string(7,LINE2,"Alarm");
			IsAlarm=1;
		}
		else if(RecFirChar==0x02)
		{
			LCD_write_string(7,LINE2,"Ack  ");
			IsAlarm=0;
		}
		//LCD_write_string(8,LINE2,"Calling");

	
	}
	TRX_CE=1;
	//xx=(RxBuf[0]>>4)&0x0f;
	//TxData(xx);
//	Delay(500);					// ...light led
//	P0=0xff;					// Close led
//	SetRxMode();								
}
/*******************************************************************************************/
//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)				
}
/*******************************************************************************************/
//Functon Scankey();
/*******************************************************************************************/	
void Scankey(uchar carcmd)
{
//	uchar Temp,xx;
//	P0=0xff;
/*	
//	Temp=P0 & 0x0f;				// Read key value from port P0
	if (_pa0==0)
	{	Delay(10);
	//	Temp=P0 & 0x0f;				// Read key value from port P0
		if (_pa0==0)
		{
*/
			TxBuf[0]=carcmd;	
	//		xx=Temp;	
	//		Temp=Temp<<4;		// Left shift 4 bits	
			TxBuf[1]=0x4a;		// Save to Tx buffer[0]
		//	P0=Temp;			// Turn On the LED
			TxBuf[2]=0x41;	
			TxBuf[3]=0x32;	
			TxBuf[4]=0x33;	
			TxBuf[5]=0x37;	
			TxBuf[6]=0x38;	
			
			SetTxMode();		// Set Tx Mode
			Delay(5);	
		//	LCD_write_char(15,LINE1,'g');	
			TxPacket();			// Transmit Tx buffer data
			
			Delay(50);			// Delay for LED light			
	//		P0=0xff;			// Close LED display
//	LCD_write_char(13,LINE1,'o');
		//	Delay(500);		
			SetRxMode();		// Set Rx Mode
			
//	LCD_write_char(14,LINE1,'k');
	
	
}

/******************** LCD PART *************************************/
void LCD_delay(void)   
{
 unsigned char i;
 for(i=LCD_DELAY_TIME;i>ZERO;i--)//be sure lcd reset
   ;
}
/********************************************************************/  
void LCD_en_command(unsigned char command)
{
 _pb=command;
 LCD1602_RS=LOW;   
 LCD1602_RW=LOW;
 LCD1602_EN=LOW;
 LCD_delay();
 LCD1602_EN=HIGH;
}
/********************************************************************/
void LCD_en_dat(unsigned char dat)
{
 _pb=dat;
 LCD_delay(); 
 LCD1602_RS=HIGH;
 LCD1602_RW=LOW;
 LCD1602_EN=LOW;
 LCD_delay();
 LCD1602_EN=HIGH;
}
/********************************************************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{
 unsigned char address;
 if (y == LINE1) 
  address = LINE1_HEAD + x;
 else 
     address = LINE2_HEAD + x;
 LCD_en_command(address); 
}
/********************************************************************/
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)
{
 LCD_set_xy( x, y ); 
 LCD_en_dat(dat);
}
/********************************************************************/
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
    LCD_set_xy( X, Y ); //set address 
    while (*s)  // write character
    {
     _pb=*s;
        LCD_en_dat(*s);   
 s ++;
    }
}
/********************************************************************/
void LCD_init(void)
{ 
 CLEARSCREEN;//clear screen 
 LCD_en_command(DATA_MODE);//set 8 bit data transmission mode 
 LCD_en_command(OPEN_SCREEN);//open display (enable lcd display)
 LCD_en_command(DISPLAY_ADDRESS);//set lcd first display address 
 CLEARSCREEN;//clear screen
}
/********************************************************************/
/*********************** OTHER PART *********************************/
void delay_nms(unsigned int n)      
{
    unsigned int i=0,j=0;
    for (i=n;i>0;i--)
     for (j=0;j<1140;j++);  
}


⌨️ 快捷键说明

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