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

📄 rt_rgb122x32.c

📁 无线传输C51主程序(基于NFR905)
💻 C
字号:
#include<STC58RD.H>
//#include<REGX52.h>
//#include "reg52.h"
#include <intrins.h>
#include "RT_RGB.h"
//#include "led.h"
#define uchar unsigned char
#define uint unsigned int

sbit RR=P1^4;
sbit GG=P1^5;
sbit BB=P1^6;
uchar int_type;
//////////LCD122*32 I/O 信号管脚/////////
uchar int_count;
uchar riflag ;
unsigned char  DISPLAY_DATA[10]; //定义显示缓冲区
uchar xdata dat_buf[512];
/**************************************************
                    各标志位定义
***************************************************/

/******************************************************
                       延时函数
*******************************************************/
void delay(unsigned int i)
{
 while(i--);
}
//if(int_type)break;

void delay_1ms(uint times)//delay  1 ms,for 12MHZ
{ uchar i;
  while(times--)
   for(i=0;i<121;i++) ;
    {_nop_();}
}

void delay2(int i)
{ uchar k;
 for(;i>0;i--)
   { for(k=0;k<125;k++)
       {_nop_();}

    }
}

/*****************************************************
                 初始化串口
*******************************************************/
void SYS_Init (void)
 {

      TH1=0xf3;//4800Bit 12MHZ
	  TL1=0xf3;
//TMOD     T/C1-----GATE C/T M1 M0        T/C0-- GATE C/T M1 M0	     
   //   TMOD=0x02;
   //   TH0=156;
   //	TL0=156; //100 US来一次中断
	  TMOD=0x20;//M0=0;M1=1;//自动从载八位定时器
//IE   EA D6 ET2 ES ET1 EX1 ET0 EX0
	  EX0=1;
//	  EX1=1;
	  ES=1;
	//  ET0=1;
	  ET1=0;

//SCON  SM0 SM1 SM2 REN TB8 RB8 TI RI
	  SM0=1;
	  SM1=1;
	  SM2=1;
	  REN=1;
	  TB8=1;
//PCON  SMOD D6 D5 D4 GF1 GF0 PD IDL
	  PCON=0x80;//加倍
//TCON  TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
      IT0=1;//下降沿触发
  
	  //IT1=1;
//IP 中断优先级控制
//    IP=0x04;//D7 D6 PT2 PS PT1 PX1 PT0 PX0


      TR1=1;
//	  TR0=1;
	  EA=1;

	  P3=0xff;
	  
	  Received_Flag=0;
}
 
/********mRF905的初始化***********/
void InitnRF905(void)
{
	CSN  	= 1;
	SCK  	= 0;
	PWR_UP  = 1;
	TRX_CE  = 0;
	TX_EN   = 0;


    MISO=1;
	MOSI=1;
	CSN=1;
//	PWR_UP=0;
	TX_EN=0;
	TRX_CE=0;
	SPI_write(0x00,0x4c);//0x6a);
	SPI_write(0x01,0x0c);//0x0c);
	SPI_write(0x02,0x44);
	SPI_write(0x03,0x04);
	SPI_write(0x04,0x04);
	SPI_write(0x05,0xAA);
	SPI_write(0x06,0xAA);
	SPI_write(0x07,0xAA);
	SPI_write(0x08,P0);
	SPI_write(0x09,0x58);

	//PWR_UP=1;
	TRX_CE=1;
	delay2(2);

}
///////////////////////
void getchar(void)
{uint data cout;
 // unsigned long int  cout;
riflag=0;
for(cout=0;cout<15000;cout++)
    {if(RI==1)
        {riflag=1;
         RI=0;
         break;
        }
    }

}

 void sndchar(uchar dats)//reentrant
{uint data cout;
 // EA=0;
  DE=1;
  SBUF=dats;
  for(cout=0;cout<15000;cout++)
    {if(TI==1)
        {
         TI=0;
         break;
        }
    }
	DE=0;
//   EA=1;  
}
 void send_addr(uchar addr)//reentrant
{uint data count;
  EA=0;
  TB8=1;
  DE=1;
  SBUF=addr;//addr=0x55表示命令,让所有从机启动扫灯程序
    for(count=0;count<15000;count++)
      {if(TI==1)
         {TI=0; break;}
      }
   TB8=0;
   DE=0;
   EA=1;
}

 void Asck(bit Type)
 {
  send_addr(0x00);
  sndchar(0xaa);  
  if(Type==1)sndchar(0x66);
  if(Type==0)sndchar(0x88); 
}

void Ask_905()
{uchar buffer[4];
 buffer[0]=0xaa;buffer[1]=0x66; buffer[2]=0x00;buffer[3]=0x00;    
  Send_905(0,buffer);
}
/***************************************************************
           905
*****************************************************************/
/**********SPI发送一个字节*********/
void SpiWrite(unsigned char Dat)
{uchar b,i;
	for(i=1;i<=8;i++)
	{	b=Dat&0x80;
		if(b==0x80)
			MOSI=1;
		else
			MOSI=0;
		Dat<<=1;
		SCK=1;
//		_nop_();_nop_();_nop_();
		SCK=0;
//	_nop_();_nop_();
	}
//	_nop_();_nop_();_nop_();_nop_();

}
/**********SPI读取一个字节*********/
uchar SpiRead(void)
{	uchar i,a=0;
	for(i=1;i<=8;i++)
	{  a<<=1;
		if(MISO==1)
		a|=0x01;
		SCK=1;
       // _nop_();_nop_();
		SCK=0;_nop_();_nop_();
       //_nop_();_nop_();_nop_();_nop_();
	}
	return(a);
}
void SPI_addrs(uchar addrs)
{
	SCK=0;
	CSN=0;
	SpiWrite(0x22);
	SpiWrite(0xaa);
	SpiWrite(0xaa);
	SpiWrite(0xaa);
	SpiWrite(addrs);
	CSN=1;
}


void SPI_write_some(uchar CMD,uchar *BUF,uchar NUM)
{	uchar b;
	SCK=0;
	CSN=0;
	SpiWrite(CMD);
	while(NUM)
	{	b=*BUF;
		SpiWrite(b);
		BUF++;
		NUM--;
	}
	CSN=1;
}
void SPI_write(uchar CMD,uchar DAT)
{	SCK=0;
	CSN=0;
	SpiWrite(CMD);
    SpiWrite(DAT);
	CSN=1;
}
void SPI_read_some(uchar CMD,uchar *BUF,uchar NUM)
{
	SCK=0;
	CSN=0;
	SpiWrite(CMD);
	while(NUM)
	{   *BUF=SpiRead();
		BUF++;
		NUM--;
	}
	CSN=1;
}

/*uchar SPI_read(void)
{   uchar a;
    SCK=0;
	CSN=0;
    _nop_();_nop_();
	_nop_();_nop_();
	a=SpiRead();
	_nop_();_nop_();
	CSN=1;
	return(a);
}*/

void Send_905(uchar addr,uchar *BUF)
{   EA=0;
   // InitnRF905();
    TRX_CE=0;
    TX_EN=0;
    SPI_write_some(0x20, BUF,4);
    SPI_addrs(addr);
	TRX_CE=1;
	TX_EN=1;
 // delay2(5);
	while(!DR);
    TX_EN=0;
//	InitnRF905();
	EA=1;
}


void serialint(void) interrupt 4 using 3
{uchar idata ir;
 uint aa;
  EA=0;

if(RI)
 {
   getchar();
   if(riflag==0)
      {SM2=1;Asck(Error); EA=1;return;}//
       temp[0]=SBUF;
    if(temp[0]!=P0)//地址
       {SM2=1; Asck(Error);EA=1;return; }//
    SM2=0;    
    for(ir=0;ir<5;ir++)
       {getchar();
	    if(riflag==0)
           {SM2=1;Asck(Error);EA=1;return;}//
	    temp[ir+1]=SBUF;
	   }
   if(temp[1]==0xaa)//同步码
     {aa=temp[2]+temp[3]+temp[4];
	   if((aa%255)==temp[5]) 
        {
		 Asck(Ok);
		// Received_Flag=1;
	     DISPLAY_DATA[0]=temp[2];DISPLAY_DATA[1]=temp[3];DISPLAY_DATA[2]=temp[4];	  
	    }
	   else{Asck(Error); EA=1; return;}
	 }
   else{ EA=1;Asck(Error); return;}//
    
 EA=1; 
 }
EA=1;
}

void Read_nF905(void) interrupt 0 using 1
{
   EA=0;
  if(AM)
   {
    TRX_CE=0;
    TX_EN =0;
    delay2(4);
    SPI_read_some(0x24,Received_buf+18,4);
    while(AM);
	DISPLAY_DATA[0]=Received_buf[18];
	DISPLAY_DATA[1]=Received_buf[18+1];
	DISPLAY_DATA[2]=Received_buf[18+2];
    Received_Flag=1;
    TRX_CE=1;
   // Ask_905();
   }
  EA=1;

}

/*****************************************************
               主程序     
*******************************************************/
void main(void)
{uchar i,j,k,n;
    uint aa=0;   
    SYS_Init();
	DISPLAY_DATA[0]=255;
    DISPLAY_DATA[1]=255;
	DISPLAY_DATA[2]=255;
	DE=0;
	EA=0;
   InitnRF905();

//	InitnRF905();
	for(i=0;i<32;i++){ nF905_Send_buf[i]=i;}

EA=1;

while(1)
 {
//InitnRF905();
//Send_905(0,nF905_Send_buf);
/*
InitnRF905();
if(Received_Flag){ Received_Flag=0;
 TRX_CE=0;
 TX_EN=0;

 SPI_read_some(0x10,Received_buf,10);
 SPI_read_some(0x23,Received_buf+10,4);
 SPI_read_some(0x21,Received_buf+14,4);


 TRX_CE=1;
 TX_EN=0;

 for(i=0;i<22;i++)
 {sndchar(Received_buf[i]);
  Received_buf[i]=0;}
} */
scanRGB(DISPLAY_DATA[0],DISPLAY_DATA[1],DISPLAY_DATA[2]);

}
}

⌨️ 快捷键说明

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