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

📄 remote51.c

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

#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); 

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;
}


int main(void)
{ 
  union myd rdata;  
  unsigned char m,n,i,seg[]={0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x00};
  unsigned char 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.....";
  
  initTimer(D220U); //220us
  IT1=1;
  EX1=1;
  EA=0;rekey=0;
  key=0x10;
  lcd_init();
  lcd_string(str2);
  while(1){  
	  //IRGND =0;
	  k.r = readir();
	  if (k.r ==0xffffffff) rekey++;	  	  
	  else  rekey =0;
      P0 = zxm[key];				  
      P2 = seg[3];
	  m=2;
	  while(m--)
	  {
		  if(k.r)
		  {	
		    if (!rekey) 
			{
			  rdata = k;
			    //k.r=0x12345678;
				str1[6]=0x30 | (k.led[0]&0xf0)>>4;
				str1[7]=k.led[0]&0x0f | 0x30;

				str1[8]=0x30 | (k.led[1]&0xf0)>>4;
				
				str1[9]=k.led[1]&0x0f+0x30;

				str1[10]=0x30 | (k.led[2]&0xf0)>>4;
				str1[11]=k.led[2]&0x0f | 0x30;

				str1[12]=0x30 | (k.led[3]&0xf0)>>4;
				str1[13]=k.led[3]&0x0f | 0x30;
				i=6;
				while(i<14)
				{
				  if(str1[i]>0x39) str1[i] +=('A'-'9'-1);
				  i++;
				}
				str1[24]=str1[6];
				str1[25]=str1[7];
				str1[34]=str1[10];
				str1[35]=str1[11];
				lcd_init();
				lcd_string(str1);
			  }
		  } 
  			i=0;
		    /*while(i<2)
			{
			P2 &= 0xe0;P0 = 0xff;
			P0=zxm[(rdata.led[2*i]>>4 ) & 0x0f];			
			P2 |= seg[i*2];			
			n=100;while(n--);
			P2 &= 0xe0;P0 = 0xff;
		    P0=zxm[rdata.led[2*i]  & 0x0f];
			//P0=zxm[8];			
			//P2 = seg[2*i+1];			
			P2 |= seg[i*2+1];
			i++;
			n=100;while(n--);
			P2 &= 0xe0;P0=0xff;
			}
			*/
			i=0;
			P2 &=0xe0; 
			while(i<16){
			   if(remcode[i]==rdata.led[2]) {
				  //Request(remotekey);//通过串口来查看解码是否正确
				  key=i;
				  i=22;
				}
			   i++;
			}
	      P0 = zxm[key];				  
		  P2 = seg[3];
  		  n=100;while(n--);
		  //P2 &= 0xe0;P0=0xff;
	   } 
	   //IRGND=0;    
  }
}

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

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

void initTimer2() 
{
 TMOD=0x01;
 TH0=0xfc;
 TL0=0x18; 
 TR0=1;
 ET0=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;	   
	   if ((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 + -