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