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

📄 main.h

📁 PHILIPS fmd1216高频头 C51 i2c通信程序
💻 H
字号:
#define REPEAT_DELAY   3
#define g_ir_system_code 0xff

bit RMDTSET;      // 1:received    
bit KEYUP;
bit TxbEmpty;
unsigned char tick_count;
unsigned char RMDATA;
unsigned char count;
unsigned char RECDATA;	//key code signal
unsigned char SRecData;	//key code signal

extern unsigned char togglebit;

/*
void delay(int i)
{ 
  int j; 
  for(j=0;j<i;j++);
}
*/

void timer0handle() interrupt 1 using 1
{       
	IE = 0x0b1;//0x8d;//1(EA)0(X)1(ET2)1(ES) - 0(ET1)0(EX1)0(ET0)1(EX0)
	RECDATA=1;
    KEYUP=1;
}

void serialporthandler() interrupt 4  using 2
{   
   if(TI!=0)  
   {
      TI  = 0;
	  TxbEmpty = 1;
   };

   if(RI!=0) 
   {
	  RI = 0 ;
      SRecData = SBUF;    
   }
}

void timer2handler() interrupt 5  using 3
{
    T2CON = 0x04;//0(TF2)1(EXF2)0(RCLK)0(TCLK) - 0(EXEN2)1(TR2)0(C_T2)0(CP_RL2)
	tick_count++;
}

void main_init()
{
 RMDTSET=0;
 count=0;
 RECDATA=0;
 TxbEmpty = 1;
}

void ir_init()
{
	TMOD = 0x21;//0x11;   //TIMER0: 16 BIT TIMER MODE;timer1:MODE 2
    TH1 = 0x0fd;
	TL1 = 0x0fd;
	TH2 = 0x3c;
	TL2 = 0x0b0;
	RCAP2H = 0x3c;
	RCAP2L = 0x0b0;
	IP = 0x00;       
    TCON  = 0x41; //0x41; //0(TF1)1(TR1)0(TF0)0(TR0)-0(IE1)0(IT1)0(IE0)1(IT0)    
	T2CON = 0x04; // 0(TF2)1(EXF2)0(RCLK)0(TCLK)-0(EXEN2)0(TR2)0(C/T2)1(CP/RL2)    
	SCON  = 0x70; // 0(SM0)1(SM1)1(SM2)1(REN)-0(TB8)0(RB8)0(TI)0(RI)
	IE = 0x0b1;   //0x0a1;//0x89;//1(EA)0(X)1(ET2)0(ES)-1(ET1)0(EX1)0(ET0)1(EX0)
}

void updowncode(unsigned  char *codevalue)
{
unsigned int temp;
int i;
temp=*codevalue;
*codevalue = 0;
for(i=0;i<8;i++)
{
    if(temp&0x01)
	{
    	*codevalue=(*codevalue)<<1;
    	*codevalue=(*codevalue)|0x1;
    }
    else
    {        	
       	*codevalue=(*codevalue)<<1;
    }
     temp=temp>>1;  	
 }	
}

void int0handle( void )   interrupt 0 using 0
{
	static unsigned char keycode;
	static unsigned char  count;       //bit count 
	static unsigned char leader;      //remote leader
    static unsigned char custom_ok;   //judge the custom code
	static char repeat_delay;
	static char repeat_enable;
	static unsigned long custom;	//store the data
	unsigned int timer;
	TCON=0X41;//0x45; //0(TF1)1(TR1)0(TF0)1(TR0)-0(IE1)1(IT1)0(IE0)1(IT0)

   if(RECDATA==0)
   {
   	RECDATA=1;
   }	
   else
   {    
   	TR0=0;
	timer=TH0;             
	timer&=0x0ff;
		 
//	if( (timer >0x30 ) &&(timer < 0x39) )	//leader code
	if( (timer >0x2c ) &&(timer < 0x35) )	//leader code
	 {
		leader = 1;
		custom_ok = 0;
		repeat_delay = REPEAT_DELAY;
		count = 0;
		repeat_enable = 0;                
	 }
//	else if( timer >0x2a  && timer <0x30  )	//repeat code
	else if( timer >0x26  && timer <0x2c  )	//repeat code
	  {	  	
		if( repeat_delay )
			repeat_delay --;
		else if( repeat_enable )
		{
	           if(RECDATA==1)	//{KEYUP=0;RMDTSET=1;}
                 {
                   if(RMDATA==0x5C||RMDATA==0x58||RMDATA==0x40||RMDATA==0x45||RMDATA==0x1b||RMDATA==0X09||RMDATA==0X04||RMDATA==0X0C)
	                 {
	                  togglebit=!togglebit;
	                  KEYUP=0;RMDTSET=1;
	                 }
	             }
		}
		
	  }
   	else 	//data code
	  {
//		if( timer >1&& timer <6 )	//0 
		if( timer >1&& timer <5 )	//0 
		{
			custom <<= 1;
			count ++;
			
		}
//		else if( timer >6 &&timer < 12 )       //1
		else if( timer >5 &&timer < 11 )       //1
		{
			custom = (custom << 1) | 1;
			count ++;
			
		}
		else	//not the correct remote controller,reset it
		{
			count = custom = custom_ok = leader = 0;KEYUP=1;RMDTSET=0;
		}
		if( count ==16&& leader )	//custom code
		{
			count = 0;
			
			if( ! custom_ok )	//check custom code or first time press the key
			{   
				if( custom == g_ir_system_code )
					custom_ok = 1;					
				else
				{
					leader = 0;	//reset;
				}					
			}
			else	//data code		
				{
				 keycode = (custom >> 8);
				 updowncode(&keycode);
										
				 repeat_enable = 1;
				 KEYUP=0;
				 RMDTSET=1;
                 RMDATA=keycode;
                 leader = 0;//johnson             
                 RECDATA=0;
                }
			
		}
	 }
	
    }
   
	TH0=0;
	TL0=0;
	ET0=1;
	TR0=1;
      
}

void tcom_data(unsigned char cdata)
{  
    unsigned char i;
    i =0;
    while(TxbEmpty!=1 && i < 200)
	{		
		_nop_();
	    i++;
	}
	SBUF = cdata;
	TxbEmpty = 0;
}

void dis_data(unsigned char d_data)
{
  unsigned char x_data;

//   tcom_data(0x20); 
   tcom_data(0x30); 
   tcom_data(0x58); 
  
   x_data = (d_data&0xf0)>>4;
   if(x_data > 9) 
	 x_data = x_data-10 + 0x41;
   else
	 x_data = x_data + 0x30;
   tcom_data(x_data); 

   x_data = d_data&0x0f;
   if(x_data > 9) 
	 x_data = x_data-10 + 0x41;
   else
	 x_data = x_data + 0x30;
   tcom_data(x_data); 
}

⌨️ 快捷键说明

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