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

📄 11.c

📁 数据分组程序
💻 C
字号:

#include<reg52.h>
#include<rom.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit remotein=P0^6;	     //遥控信号输入
sbit remoteout=P0^7;	 //遥控信号输出
sbit P10=P1^0;
sbit P11=P1^1;

uint i,j,n,k,s;
uchar idata arg[192];
uchar idata head_buf[2];
uchar xdata date1[32];
uchar xdata date2[32];
uchar xdata date3[32];
uchar xdata date4[32];
uchar xdata date5[32];
uchar xdata date6[32];
uint head,c,i;					  //存放脉冲宽度数据用
uint remdata;					// 存放起始位用
uchar temp,flag;
/********1ms 延时程序**********/
delay1ms(uint t)
{
for(i=0;i<t;i++)
  for(j=0;j<120;j++);
  
}
 /********初始化程序**********/


void write_address()
{

for(i=0;i<32;i++)
{
  date1[i]=arg[i];
  delay(312);  
  date2[i]=arg[i+32];
  delay(312);
  date3[i]=arg[i+64];
  delay(312);  
  date4[i]=arg[i+96];
  delay(312);
  date5[i]=arg[i+128];
  delay(312);
  date6[i]=arg[i+160];
  delay(312);
  }
WrToFRam(0xa0,0x0000+0x0100*temp,date1,32);
delay(31320);
WrToFRam(0xa0,0x0020+0x0100*temp,date2,32);
delay(31320);
WrToFRam(0xa0,0x0040+0x0100*temp,date3,32);
delay(31320);
WrToFRam(0xa0,0x0060+0x0100*temp,date4,32);
delay(31320);
WrToFRam(0xa0,0x0080+0x0100*temp,date5,32);
delay(31320);
WrToFRam(0xa0,0x00a0+0x0100*temp,date6,32);
delay(31320);
WrToFRam(0xa0,0x00e0+0x0100*temp,head_buf,2);
delay(31320);
}
void read_address()
{
RdFromFRam(0xa1,0x0000+0x0100*temp,date1,32);
delay(31320);
RdFromFRam(0xa1,0x0020+0x0100*temp,date2,32);
delay(31320);
RdFromFRam(0xa1,0x0040+0x0100*temp,date3,32);
delay(31320);
RdFromFRam(0xa1,0x0060+0x0100*temp,date4,32);
delay(31320);
RdFromFRam(0xa1,0x0080+0x0100*temp,date5,32);
delay(31320);
RdFromFRam(0xa1,0x00a0+0x0100*temp,date6,32);
delay(31320);
RdFromFRam(0xa1,0x00e0+0x0100*temp,head_buf,2);
delay(31320);
for(i=0;i<32;i++)
  {
  arg[i]=date1[i];
  delay(312);
  arg[i+32]=date2[i];
  delay(312);
  arg[i+64]=date3[i];
  delay(312);
  arg[i+96]=date4[i];
  delay(312);
  arg[i+128]=date5[i];
  delay(312);
  arg[i+160]=date6[i];
  delay(312);
  }
}
/*******键功能函数*********/
  keywork()
  {			   
               P10=0;
			   temp=temp-0x40;

			   read_address();
			   
			   ET0=1;TR0=1;ES=0;
			   head=head_buf[0];
			   c=head_buf[1];
			   c=c<<8;
			   head=head|c;				  //
			   for(i=head;i>0;i--){;}	  //
			   remoteout=0;ET0=0;TR0=0;
			   n=0;
			   while(1)
			    {
				 if(arg[n]==0x00){delay1ms(10);temp=0;P10=1;ES=1;break;}			//
				 for(i=arg[n];i>0;i--)
				 {
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
			     _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 _nop_();
				 
				 }
				 n++;
				 ET0=1;TR0=1;
				 for(i=arg[n];i>0;i--){;}
				 remoteout=0;ET0=0;TR0=0;n++;
				}
					 
	
  }
  /********主函数**********/

  /********40kHz发生器**********/
  //定时中断T1
  void time_intt1(void) interrupt 1
  {
   remoteout=~remoteout;
  }
  /********学习函数**********/
  //外中断0
  void study()
  {
      P11=0;
	  ET0=0;TR0=0;ES=0;EA=0;head=0;

	  while(remotein==1);
	  head=0;
	  while(remotein==0)
	       {
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 head++;
	        }
		   head_buf[0]=head;
		   head_buf[1]=head>>8;
		   n=0;remdata=0x00;
		   while(1)
		   {
		   	while(remotein==1)
			{
		     _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 remdata++;
			}
			if(remdata>334)
			{arg[n]=0x00;ES=1;EA=1;goto end;}
			arg[n]=remdata;n++;
			remdata=0x00;
			while(remotein==0)
			{
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			 _nop_();
			remdata++;
			}
			arg[n]=remdata;n++;remdata=0x0000;
		   }
		   end: write_address();remotein=1;remoteout=0;temp=0;P11=1;
  }
void main()
{
 P10=1;
 P11=1;
 remoteout=0;					 
 remotein=1;
  	TMOD=0x22;					  
	PCON=0x00;
	TH1=0xfd;
	TL1=0xfd;
  	TH0=0xf3;					  
	TL0=0xf3;
	TR1=1;
	TR0=1;
	SM0=0;
	SM1=1;
	REN=1;
	EA=1;
	ES=1;
	while(1)
	{
		if(flag==1)
		{
			ES=0;
			flag=0;
			SBUF=temp;
			while(!TI);
			TI=0;
			ES=1;
		}
	 if((temp>0x00)&&(temp<0x40))						  //0x01-0x3f为学习键
	    study();			                         
	 else 
	    if ((temp>0x40)&&(temp<0x80)) 					 //0x41-0x7f为发射键
		keywork();	                               
	 else;
	}

}
void serial() interrupt 4
{
	temp=SBUF;
	flag=1;
	RI=0;
} 

⌨️ 快捷键说明

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