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

📄 intctrl.c

📁 philip RTC 芯片的驱动程序 8563
💻 C
字号:
#include "reg52.h"
#include "intrins.h"
#include "globedef.h"
#include "intctrl.h"
#include "keyproc.h"
#include "keydef.h"
#include "Lcd.h"

extern unsigned char ff_key_flag;
extern unsigned char fb_key_flag;
 
void RemoteInt(void) interrupt 0
{
	WORD IRTimeCount;
	BYTE temp1,temp2;
	IRTimeCount = (WORD)Timer0_CntH*256+(WORD)Timer0_CntL;
	Timer0_CntH =0;
	Timer0_CntL = 0;
	Start_Timer0;	//中断后timer0开始定时,定时数值放到IRTimeCount
	switch(IrState)
	{
		case  IR_READY:	
			  IRDataTemp=0;
			  IRDataCount=0;
			  IrState=IR_HEAD;	//进入NEC码头低电平段
			  break;
		case  IR_HEAD:
			  if((IRTimeCount<IR_HEAD_MAX) && (IRTimeCount>IR_HEAD_MIN))	//NEC码头9ms+4.5ms=13.5ms
			  {
				  IRDataCount=0;
				  IrState=IR_OFFCODE;	//NEC码头完毕
				  IRDataTemp=0;
				  RepCount = 0;
				  Current_Remote_In = 0;
			  }
			  else if((IRTimeCount > IR_REP_MIN) && (IRTimeCount < IR_REP_MAX))	//重复码9ms+2.5ms=11.5ms
			  {

#ifdef	IRRepEnable
				  if(1 == Current_Remote_In)
				  {
				  	if((Remote_value == 0x0b) || (Remote_value == 0x1b))
					      FF_FB_Active = 1;
					  if( (Remote_value  == 0x0a) ||	//音量+
					    (Remote_value == 0x0e) ||  //音量-
                         (Remote_value == 0x0b) ||	//NEXT_KEY
					     (Remote_value == 0x1b)||//PREVIOUS_KEY
						 (Remote_value == 0x0f))   //PLAY/PAUSE_KEY					 
					  {
						  RepCount++;
						  if(RepCount > 3)
						  {
							  if( (Remote_value  == 0x0a) || 
									(Remote_value == 0x0e))  //如果按住的是音量键                                   	
							  	{
  							  		IR_KeyAct = 1;
									Remote_Key = Remote_value;
							  	}
							 /* if((Remote_value  == 0x0b)||(Remote_value == 0x1b))
							  {  							  	  
								  Remote_Key = Remote_value + 1;//FF_KEY OR FB_KEY
								  IR_KeyAct = 1;//遥控有效标志位
							  }*/
							if(Remote_value == 0x0b)
							ff_key_flag = 1;
							if(Remote_value == 0x1b)
							fb_key_flag = 1;
						  }
						  
						  if(RepCount > 10)	
						  {
  							  if(Remote_value  == 0x0f)	//如果常按住play键则关ipod
							  {
								  Remote_Key = 0x13;//IPOD_OFF_KEY
								  Current_Remote_In = 0;												
							  }	  							  
							  IR_KeyAct = 1;
						  }
					  }
				  }
#endif
				IrState = IR_READY;
			} 
			else
			{
				IR_KeyAct = 0;
				IrState = IR_READY;
				Current_Remote_In = 0;
			}
			break;
		case  IR_OFFCODE:
			IRDataTemp<<=1;
			if(((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
				|| ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
			{
				IRDataCount++;
				if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
					IRDataTemp |= 0x1;
				if(IRDataCount >= 16)
				{
					IRDataCount=0;
					
					if((IRDataTemp==IR_SYSTEM_CODE))
					{
						IrState=IR_ADDRESS;
						IRDataTemp=0;
					}
					else
					{
						IR_KeyAct=0;
						Current_Remote_In = 0;
						IrState=IR_READY;
					}
				}
			}
			else
			{
				IR_KeyAct = 0;
				Current_Remote_In = 0;
				IrState = IR_READY;
			}
			break;
		case  IR_ADDRESS:
			IRDataTemp>>=1;
			if(((IRTimeCount < CODE_1_MAX)&&(IRTimeCount > CODE_1_MIN))
				|| ((IRTimeCount < CODE_0_MAX) && (IRTimeCount > CODE_0_MIN)))
			{
				IRDataCount++;
				if((IRTimeCount < CODE_1_MAX) && (IRTimeCount > CODE_1_MIN))
					IRDataTemp |= 0x8000;
					
			    if(IRDataCount >= 16)
				{
					IRDataCount=0;
					temp1 = (BYTE)(IRDataTemp%256);
					temp2 = (BYTE)(IRDataTemp/256);
					temp2 = ~temp2;
					
					if(temp1 == temp2)
					{
						Remote_value = temp1;					
						
						Remote_Key = Remote_value;
						Current_Remote_In = 1;
						if((Remote_value == 0x0b) || (Remote_value == 0x1b))
								FF_FB_Active = 1;
							else
								IR_KeyAct = 1;				
					}
					IrState = IR_READY;
					IRDataCount = 0;
				}
		    }
			else
			{
					IR_KeyAct = 0;
					Current_Remote_In = 0;
					IrState = IR_READY;
			}
			break;
	}
}

void TIMER2Int(void) interrupt INT_Timer2
{	
   	TF2 = 0;
	if(FF_FB_Active >= 1)
   	{
   		FF_FB_Active++;
		if(FF_FB_Active > 40)
		{
			if(RepCount < 4)
			{
				Remote_Key = Remote_value;				
			}
			else
			{
				Remote_value = 0x7;
				Remote_Key = Remote_value;
			}
			IR_KeyAct    = 1;
			FF_FB_Active = 0;
		}
			
   	}
	
	display_counter++;
	flash_counter++;

	if((Key_LongTimer >=1) && (Key_LongTimer < 130))
	{
		Key_LongTimer++;
	}
	
	if((Key_ShortTimer >=1) && (Key_ShortTimer < 25))
	{
		Key_ShortTimer++;
	}
	
	if(ReadKey_Timer < 5)
		ReadKey_Timer++;   


}

void NotUsing(void) interrupt INT_EXT1 //外部中断1
{
	_nop_();
	_nop_();
}

void TIMER0Int(void) interrupt INT_Timer0
{
	Stop_Timer0;
	IrState = IR_READY;
	Timer0_CntH = 0;
	Timer0_CntL = 0;
	ET0 = 1;
}

void TIMER1Int(void) interrupt INT_Timer1
{
}

void SerialInt(void) interrupt INT_Serial
{
		if(RI)
		RI = 0;
}

⌨️ 快捷键说明

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