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

📄 nrf905.c

📁 发送缓冲与接收缓冲是为了匹配用户接口和无线接口速率而设计
💻 C
字号:
#include <at89x52.h>
#include <absacc.h>
#include <intrins.h>
#include <NRF905.h>

void main(void)
{
	init();
	while(1)
	{
		outdata();
//		delayms(1000);
	}
}

void init(void)
{
	uchar i;
	P1=0x3d;	//00111101
	P3=0xff;
	IE=0x00;	//EA=1,ES=1
	NUM=0;
	CSN=1;
	PWR_UP=0;
	TXEN=1;
	TRX_CE=0;
	DOUT=1;
	DIN=1;
	SPI_write(0x00,0x74);//0x74);
	SPI_write(0x01,0x0e);//0x0c);
	SPI_write(0x02,0x44);
	SPI_write(0x03,0x0c);
	SPI_write(0x04,0x0c);
	SPI_write(0x05,0xff);
	SPI_write(0x06,0xff);
	SPI_write(0x07,0x01);
	SPI_write(0x08,0x00);		
	SPI_write(0x09,0xdf);

	for(i=0;i<=15;i++)
		add[i]=i;
}


void outdata(void)
{
	uchar a;
	uchar *p1;
	NUM++;
	//a=SPI_read(0x10);
	//a=SPI_read(0x11);
	if(NUM<=10)
		NUMA=0x00;
	if((NUM>10)&&(NUM<=20))
		NUMA=0x01;
	if((NUM>20)&&(NUM<=30))
		NUMA=0x02;
	if((NUM>30)&&(NUM<=40))
		NUMA=0x03;
	if((NUM>40)&&(NUM<=50))
		NUMA=0x04;
	if((NUM>50)&&(NUM<=150))
		NUMA=0x04;
	if(NUM>150)
		NUMA=0x05;
	switch(NUMA)
	{
		case 0x00:	for(a=0;a<12;a++)
						add[a]=com_on2[a];
					break;
		case 0x01:	for(a=0;a<12;a++)
						add[a]=com_on3[a];
					break;
		case 0x02:	for(a=0;a<12;a++)
						add[a]=com_off2[a];
					break;
		case 0x03:	for(a=0;a<12;a++)
						add[a]=com_off3[a];
					break;
		case 0x04:	for(a=0;a<12;a++)
						add[a]=com_up[a];
					break;
		case 0x05:	for(a=0;a<12;a++)
						add[a]=com_down[a];
					break;
	}
	SPI_write4(0x22,0xff,0xff,0xff,0x00);
	p1=&add[0];
//	SPI_read_some(0x23,p1,4);
	SPI_write_some(0x20,p1,12);
//	p1=&add[1];
//	SPI_read_some(0x21,p1,16);

	PWR_UP=1;
	TRX_CE=1;
//	a=SPI_read(0x10);
//	while(!DR);
//	delayms(100);
	_nop_();
	_nop_();
	_nop_();
	TRX_CE=0;
	delayms(100);
//	PWR_UP=0;
}


void SPI_write(uchar a,uchar b)
{
	SCLK=0;
	CSN=0;
	write(a);
	write(b);
	CSN=1;
}

void SPI_write_some(uchar a,uchar *p1,uchar num)
{
	uchar b;
	SCLK=0;
	CSN=0;
	write(a);
	while(num)
	{
		b=*p1;
		write(b);
		p1++;
		num--;
	}
	CSN=1;	
}

void SPI_write4(uchar a,uchar b,uchar c,uchar d,uchar e)
{
	SCLK=0;
	CSN=0;
	write(a);
	write(b);
	write(c);
	write(d);
	write(e);
	CSN=1;
}

void write(uchar a)
{
	uchar b,i;
	for(i=1;i<=8;i++)
	{
		b=a&0x80;
		if(b==0x80)
			DOUT=1;
		else
			DOUT=0;
		SCLK=1;
		a<<=1;
		_nop_();
		SCLK=0;
	}
}

SPI_read_some(uchar a,uchar *p1,uchar num)
{
	SCLK=0;
	CSN=0;
	write(a);
	while(num)
	{
		a=read();
		*p1=a;
		p1++;
		num--;
	}
	CSN=1;
}

uchar SPI_read(uchar a)
{
	SCLK=0;
	CSN=0;
	write(a);
	a=read();
	CSN=1;
	return(a);
}

uchar read(void)
{
	uchar i,a=0;
	for(i=1;i<=8;i++)
	{
		a<<=1;
		if(DIN==1)
			a|=0x01;
		SCLK=1;
		_nop_();
		SCLK=0;
		
	}
	return(a);
}

void delayms(uint n)
{
	uint b;
	while(n>0)
	{
		for(b=0;b<100;b++);
		n--;
	}
}

⌨️ 快捷键说明

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