📄 main.c
字号:
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 + -