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

📄 remote51_new.c

📁 最近开发的51单片机多功能 实验板
💻 C
字号:
#include <REGX52.H>
#define  D45MS 2500
#define  D09MS 450
#define  D220U 0x90
#define  D250U 0x06

//#define IRIN  P2_0 //红外输入引脚的定义
#define IRIN  P1_4 //红外输入引脚的定义
//#define IRIN  P2_7
//#define IRGND P2_6

union myd{
  	 unsigned long r;
	 unsigned char led[4];    
  }	;
union myd k;
unsigned long readir(void);
void delay1(unsigned int nms);
void initTimer(unsigned char st0);
void initTimer1(void); 
unsigned long readir2(void);
extern void lcd_init(void);
extern void lcd_string(char *strpoint); /*在当前显示位置显示LCD 字符串*/


unsigned char code remcode[]={0x12,0x90,0xb8,0xf8,0x98,0xd8,0x88,0xe8,0x48,0x68,//0,1-9
                              0xb0,0xa8,0x99,0x00,0x08,0x60,0x02,0x20,
							//VOL+,VOL-,CH+,CH-,POWER,mute,recall,-/--
							  0x40,0xa0,0x2a,0xb2,0x50,0x78,0x70,0x58,0x38,0x30};
								//  最后3排AV。。。Freeze。。。video。。。hide。。。panel等

void int1(void) interrupt 2
{ EA = 0;
  k.r = readir();
  IE1 = 0;  
  EA = 1;
  IE1 = 0;
}

//UART init
void initUart(void)
{
 TMOD|=0x20;
 SCON=0x50;
// PCON|=0x80;
 TH1=0xfd;
 TL1=0xfd;
 TR1=1;
 ET1=0;
}

int main(void)
{ 
  union myd rdata; 
  bit IROLD=0; 
  bit IRNEW=0; 
  unsigned char m,n,i;
  unsigned char code seg[]={0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x00};
  unsigned char code zxm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
              0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff, };
  unsigned int rekey;
  unsigned char key, str1[]="Code: --------      SYS:--   USER:--";
  unsigned char code str2[]="Please press any    key.....";
  unsigned char idata irdb[128];
  unsigned char leader[4];
  initTimer(0);
  initUart();
   TI=0;
   P1=0xff;
   SBUF = 0xee;while(!TI);TI=0;
   SBUF= 0x55;
   while(!TI);TI=0;  
  IT1=1;
  EX1=1;
  EA=0;rekey=0;
  key=0x10;
  //lcd_init();
  //lcd_string(str2);
  while(1){  
   IROLD=1;	TR0=0;
   while(IRIN);
   while(IROLD){
     IRIN =1;
     rekey=0;
     TR0=0;
	 TH0=0;TL0=0;TR0=1;	 
     while(!IRIN){rekey++;}
	 TR0=0;leader[0]=TH0;leader[1]=TL0;
	 TH0=0;TL0=0;TR0=1;
   	 if(rekey>500) {
	    IROLD=0;
		} 	  
   }
 		while(IRIN);   //高电平
		TR0=0;
		leader[3]=TH0;leader[4]=TL0;
		TL0=0x00; TH0=0x00; 
		TR0=1;
   m=0;
   while(m<127){    	 
		IRIN =1;
		while(IRIN==0); //低电平
		TR0=0;
		irdb[m++]=TH0;
		irdb[m++]=TL0;
		TL0=0x00;TH0=0x00; 
		TR0=1;
		while(IRIN);   //高电平
		TR0=0;
		irdb[m++]=TH0;
		irdb[m++]=TL0;   	  
		TL0=0x00; TH0=0x00; 
		TR0=1;
   }
		  
   TR0=0;
   
   rekey=0;
   	m=0;
	while(m<4){	      

	  SBUF=leader[m++];while(!TI);TI=0;
	  SBUF=leader[m++];while(!TI);TI=0;  

	} 
   	m=0;
	while(m<127){	      

	  SBUF=irdb[m++];while(!TI);TI=0;
	  SBUF=irdb[m++];while(!TI);TI=0;  

	}
   
   IROLD=0;
   while(IROLD){
     IRIN =1;
     rekey=0;
     while(IRIN){IRIN =1;rekey++;}
   	 if(rekey>500) IROLD=0; 
   } 
   	  TI=0;
   	  SBUF=0xaa;while(!TI);TI=0;
	  SBUF=0xbb;while(!TI);TI=0;   
   rekey=0;

		  k.r=0;
  }
}

unsigned long readir2(void)
{  static bit IROLD=0; 
   bit IRNEW;
   union myd rem;
   IRIN =1;
   IRNEW = IRIN; 
   if(IRNEW != IROLD)
   {
      rem.led[0]=TL0;
	  rem.led[2]=TH0;
   	  TL0=0x00;
	  TH0=0x00; 
	  TR1=1;  
   }
   else
   {
   	  rem.r=0;
   }
   IROLD =IRNEW; 
   return rem.r;
}

void delay1(unsigned int nms)
{
  while(nms--); 
}

// 24---220us, 06---250us
void initTimer(unsigned char st0) 
{
 TMOD=0x01;
 TH0=st0;
 TL0=st0; 
 TR0=0;
 ET0=0;
 ET1=0; 
}

void initTimer1(void) 
{
 TMOD =0x10;
 TH1=0x00;
 TL1=0x00; 
 TR1=0;
 ET1=0;
 //ET1=0; 
}

unsigned long readir(void)
{  unsigned char i;
   unsigned int delay;
   unsigned long rdata=0;
   union myd rem;
   IRIN = 1;   
   if(IRIN) return 0;
   EA=0;i=0;
   initTimer2();TF0=0;
   while(IRIN==0); 
 /*    {
		  while(TF0==0);
		  TF0=0;i++;
		  TH0=0xfc;TL0=0x18;  
	 }
   TR0=0;
   if (i<6) return i;*/
   i=32;
   while(i--) //始接收
   {  
      delay =80;
	  initTimer(D220U);
	  while(delay--)  // 延时4.5ms~6.0ms
	    { 
		  while(TF0==0);
		  TF0=0;if(IRIN==0) delay = 0;
		}
	  TR0=0;		  
	  while(IRIN==0) IRIN = 1; //等待高电平
      // 延时0.9ms	begin
	  initTimer(D220U);
	  delay=6;
	  while(delay--)  
	    {while(TF0==0);TF0=0;}	  	  
	  TR0=0;
	  // 延时0.9ms end
      rdata <<=1;
	  IRIN =1;
	  if(IRIN)
	     rdata |= 0x1;
   }
   rem.r = rdata;
   if(rem.r+1) {
       if (((rem.led[0]+ rem.led[1])== 0xff) &&((rem.led[2]+ rem.led[3])== 0xff)) return rdata;	   
	   else return 0;
   }
   else return rdata;
}

⌨️ 快捷键说明

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