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

📄 nrf905.c

📁 可以应用的程序 可以随便下载使用请放心使用已经高度过了
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int 
#define WC  0x00
#define RC  0x10
#define WTP 0x20
#define RTP 0x21
#define WTA 0x22
#define RTA 0x23
#define RRP 0x24
typedef struct REConfig
{
	uchar n;
	uchar buf[10];
}RFConfig;
code RFConfig RxTxConf=
{
		10,0x01, 0x0c, 0x44, 0x20, 0xcc, 0xcc, 0xcc, 0xcc,0x58
};
uchar data TxBuf[32];
uchar data RxBuf[32];
uchar bdata DATA_BUF;
sbit flag=DATA_BUF^7;
sbit flag1=DATA_BUF^0;
sbit TX_EN=P2^6;
sbit TRX_CE=P2^5;
sbit PWR_UP=P2^4;
sbit MISO=P2^3;
sbit MOSI=P2^2;
sbit SCK=P2^1;
sbit CSN=P2^0;
sbit AM=P3^2;
sbit DR=P3^3;
sbit CD=P3^5;
void InitIO(void);
void Inituart(void);
void Config905(void);
void SetTxMode(void);
void SetRxMode(void);
void TxPacket(void);
void RxPacket(void);
void SpiWrite(uchar);
uchar SpiRead(void);
void Delay(uchar n);
void Scankey(void);
void TxData(uchar x);
void main()
{
	InitIO();
	Inituart();
	Config905();
	SetTxMode();
	TxPacket();
	Delay(500);
	P0=0xff;
	SetRxMode();
	while(1)
	{
		Scankey();
		if(DR)
			RxPacket();
	}	
	
}
void InitIO(void)
{
	P0=0x0f;
	CSN=1;
	SCK=0;
	DR=1;
	AM=1;
	PWR_UP=1;
	TRX_CE=0;
	TX_EN=0;
}
void Inituart(void)
{
	TMOD=0x20;
	TL1=0xfd;
	TH1=0xfd;
	SCON=0xd8;
	PCON=0x80;
	TR1=1;	
}
void Config905(void)
{
	uchar i;
	CSN=0;
	SpiWrite(WC);
  	for(i=0;i<RxTxConf.n;i++)
	{
		SpiWrite(RxTxConf.buf[i]);
	}
	CSN=1;
}
void Delay(uchar n)
{
	uint i;
	while(n--)
	for(i=0;i<80;i++);
}
void SpiWrite(uchar byte)
{
	uchar i;
	DATA_BUF=byte;
//variable
	for(i=0;i<8;i++)
	{
		if(flag)
			MOSI=1;
		else
			MOSI=0;
		SCK=1;
		DATA_BUF=DATA_BUF<<1;
		SCK=0;
	}
}
uchar SpiRead(void)
{
	uchar i;
	for(i=0;i<8;i++)
	{
		DATA_BUF=DATA_BUF<<1;
		SCK=1;
		if(MISO)
			flag1=1;
		else
			flag1=0;
		SCK=0;
	}
	return DATA_BUF;
}
void TxPacket(void)
{
	uchar i;
	CSN=0;
	SpiWrite(WTP);
	for(i=0;i<32;i++)
	{
		SpiWrite(TxBuf[i]);
	}
	CSN=1;
	Delay(1);
	CSN=0;
	SpiWrite(WTA);
	for(i=0;i<4;i++)
	{
		SpiWrite(RxTxConf.buf[i+5]);
	}
	CSN=1;
	Delay(1);
	TRX_CE=0;
}
void RxPacket(void)
{
	uchar i,xx;
	TRX_CE=0;
	CSN=0;
	SpiWrite(RRP);
	for(i=0;i<32;i++)
	{
		RxBuf[i]=SpiRead();	
	}
	CSN=1;
	while(DR||AM);
    P0=RxBuf[0];
	TRX_CE=1;
	xx=(RxBuf[0]>>4)&0x0f;
	TxData(xx);
	Delay(500);
	P0=0xff;
}
void SetTxMode(void)
{
		TX_EN=1;
		TRX_CE=0;
		Delay(1);
}
void SetRxMode(void)
{
		TX_EN=1;
		TRX_CE=1;
		Delay(1);
}
void Scankey()
{
	uchar Temp,xx;
	P0=0xff;
	Temp=P0&0x0f;
	if(Temp!=0x0f)
		{
			Delay(10);
			Temp=P0&0x0f;
			if(Temp!=0x0f)
			{
				xx=Temp;
				Temp=Temp<<4;
				TxBuf[0]=Temp;
				P0=Temp;
				SetTxMode();
				TxPacket();
				TxData(xx);
				Delay(500);
				P0=0xff;
				SetRxMode();
				while((P0&0x0f)!=0x0f);
			}
		}
}
void TxData(uchar x)
{
	SBUF=x;
	while(TI==0);
		TI=0;
}

⌨️ 快捷键说明

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