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

📄 t100.c.bak

📁 TFT 驱动 T100DEMO程序.做protable DVD的朋友可以参考一下.
💻 BAK
📖 第 1 页 / 共 2 页
字号:
		_nop_();
		_nop_();
		r|=INT1;
	}
	if(r==le)
		return 1;
	else
		return 0;
}
/*遥控接收在此中断程序内完成
  数据放在ir_data内*/
/************************************/
/*  Interrupt for IR subroutine     */
/*  external interrupt source INT0  */
/************************************/
void int1Remote(void) interrupt 2
{
	register BYTE i;
	unsigned int count;		/*计时变量*/
	unsigned int  temp0,temp1,ir_code=0;
	ir_enable=TRUE;
	TMOD=0x11;             /*timer 0 operate in 16 bit mode*/
	EX1=0;
	TL0=0;
	TH0=0;
	TR0=1;
	/************************************/
	/*   Detect IR Head                 */
	/************************************/
	do                /*Detect IR head 9mS*/
	{
		count=(TL0+TH0*256);   /*count :us unit */
		if(Filter13(1)==1) break;
	}while(count<=(IR_HEAD+DELTA));
	TR0=0;			/*停止计时*/

	if(Filter13(0)==1||count<(IR_HEAD-DELTA*25))       /*for some noise disturb IR*/
		{
		ir_enable=FALSE; /* no IR head or not suitable for Ir head*/
		EX1=1;
		TR0=1;
		return;
		}
	/************************************/
	/*   Detect OFF CODE     4.5mS      */
	/************************************/
	while(Filter13(0)==1);
	TR0=0;
	TL0=0;
	TH0=0;
	TR0=1;
	do                /*Detect IR OFF CODE*/
	{
		count=(TL0+TH0*256);   /*count :us unit */
		if(Filter13(0)==1) break;
	}while(count<(OFF_CODE+DELTA));
	TR0=0;
	count=(TL0+TH0*256);   /*count :us unit */
	if(count<=(OFF_CODE-DELTA*4))
	{
		/*重复码OFF=2.25*/
		if((count>(OFF_REP-DELTA)&&count<(OFF_REP+DELTA)))
		{     TR0=0;
		      TL0=0;
	              TH0=0;
		      TR0=1;

			do
			{
				count=(TL0+TH0*256);   /*count :us unit */
				if(Filter13(1)==1) break;
			}while(count<=(REP_CODE+DELTA));
			TR0=0;
			count=(TL0+TH0*256);   /*count :us unit */
			if(INT1==1)
			{
				TR0=0;
				if(
//#ifdef SINAI_REMOTE
				ir_data==REMOTE_KEY_VO_DEC||ir_data==REMOTE_KEY_VO_INC||
//#endif
				ir_data==REMOTE_KEY_DECR||ir_data==REMOTE_KEY_INCR )

				{

				ir_enable=TRUE;	/*注意:ir_data不变*/
				EX1=0;
				}
				else
				{
				ir_data=0;
				ir_enable=FALSE;
				EX1=1;
				TR0=1;
				}
				return;
			}
		}
                else if(count>(OFF_REP+DELTA))
                {

                 ir_enable=TRUE;	/*注意:ir_data不变*/
	         EX1=0;

                }
		else
		{
			ir_enable=FALSE;   /*not suitable for off code*/
			EX1=1;
			TR0=1;
			return;
		}
	}

	/************************************/
	/*   Detect 16 bit address code     */
	/************************************/
	if(ir_enable==TRUE)
	{
		TMOD=0x11;           /*counter start with INT0 and TR0*/
		ir_code=0;		/*初始化变量*/
		for(i=0;i<16;i++)
		{
			while(INT1==0);
			TL0=0;
			TH0=0;
			TR0=1;
			do
			{
				count=(TL0+TH0*256);   /*count :us unit */
				if(Filter13(0)==1) break;
			}while(count<=(CODE_1_TIME+DELTA));	/*INT0为高电平时计时*/
			TR0=0;
			ir_code<<=1;
			if((count>(CODE_1_TIME-DELTA))&&(count<=(CODE_1_TIME+DELTA)))  /*detect 1 code  2.24mS-0.56mS=1.68mS*/
				ir_code++;
			else if((count>(CODE_0_TIME-DELTA))&&(count<=(CODE_0_TIME+DELTA)));  /*detect 0 code 1.12mS-0.56mS=0.56mS*/
			else
			{
			 	ir_enable=FALSE;
				TR0=1;
				break;           /*not suitable for address code */
			}
		}                /*end for*/
	}
	/************************************/
	/*   Detect 16 bit data code        */
	/************************************/
	if(ir_enable==TRUE&&ir_code==IR_SYSTEM_CODE)/**/
	{
		TMOD=0x11;           /*counter start with INT0 and TR0*/
		ir_code=0;
		for(i=0;i<16;i++)
		{
			while(INT1==0);
			TL0=0;
			TH0=0;
			TR0=1;
			do
			{
				count=(TL0+TH0*256);
				if(Filter13(0)==1) break;
			}while(count<=(CODE_1_TIME+DELTA));	/*INT0为高电平时计时*/
			TR0=0;
			//count=(TL0+TH0*256);   /*count :us unit */
			ir_code<<=1;
			if((count>(CODE_1_TIME-DELTA))&&(count<=(CODE_1_TIME+DELTA)))  /*detect 1 code 1.68mS*/
				ir_code++;
			else if((count>(CODE_0_TIME-DELTA)&&count<=(CODE_0_TIME+DELTA)));  /*detect 0 code 0.56mS*/
			else
			{
				ir_enable=FALSE;
				TR0=1;
				break;           /*not suitable for address code */
			}
		}                /*end for*/
		if(ir_enable==TRUE)
		{

			temp0=ir_code&0xff00;
			temp0=~temp0;
			temp0>>=8;
			temp1=ir_code&0x00ff;
			if(temp0!=temp1)
				ir_enable=FALSE;
			else
			{
				ir_data=(BYTE)(temp1);     /*true code effective*/
				ir_enable=TRUE;            /*set ir flag*/
				EX1=0;
				return;
			}
		}
	}
	else
	{	ir_enable=FALSE;
	EX1=1;}
}
void RemoteEvent(void)
{
	bit bTemp=0;
	switch(ir_data)
	{
	//	case REMOTE_KEY_POWER:
	//	     bTemp=kyPOWEREvent();
	//	     break;
		case REMOTE_KEY_SOURCE:
		     IRSourceSelCtrl();
		     break;
		case REMOTE_KEY_SCALER:
                      IRSCALEREvent();
                     break;
                case REMOTE_KEY_AIRCABLE:
                      IRDismodeEvent();
                     break;

	/*	case REMOTE_KEY_DECR:
		     bTemp=kyDECREASEEvent();
		     break;
		case REMOTE_KEY_INCR:
	             bTemp=kyINCREASEEvent();
		     break;
		case REMOTE_KEY_MENU:
		      bTemp=kyMENUEvent();
		     break;
		case REMOTE_KEY_VO_INC:
		     bTemp=IRVolDownKeyCtrl();
		     break;
		case REMOTE_KEY_VO_DEC:
		     bTemp=IRVolUpKeyCtrl();
		     break;
		case REMOTE_KEY_DEC_P:
		     bTemp=IRDownKeyCtrl();
		     break;*/


        }
		if(bTemp)
			OSDEventMgr();


	EX1=1;
}
void IRSourceSelCtrl(void)
{

        if(cSource>=5)cSource = 1; //Kuo
        cSource++;
        ClosePanel();
	//I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_SOURCE_INDEX,m_cSource);
	SetSource();
	Delay_ms(25);
	OpenPanel();
	//OSDShowSource();
//	return 1;
}
void IRSCALEREvent(void)
{
       bFULL_43=!bFULL_43;
       SetMode();
       Delay_ms(25);
       OpenPanel();
//   OSDShowRatio();
   //return 1;
}
void IRDismodeEvent(void)
{
        uCHAR cTemp;
	if(bUP_DOWN&bLEFT_RIGHT)
	{
	  bUP_DOWN= 1;      //0:Down to Up 	1:Up to Down
          bLEFT_RIGHT= 0;      //0:Right to Left     1:Left to Right
	  cTemp=UD_LR;
	}
	else if(bUP_DOWN&!bLEFT_RIGHT)
	{
	   bUP_DOWN= 0;      //0:Down to Up 	1:Up to Down
           bLEFT_RIGHT= 1;
	   cTemp=UD_RL;
	}
	else if(!bUP_DOWN&bLEFT_RIGHT)
	{
	   bUP_DOWN= 0;      //0:Down to Up 	1:Up to Down
           bLEFT_RIGHT= 0;
	   cTemp=DU_LR;
	}
	else if(!bUP_DOWN&!bLEFT_RIGHT)
	{  bUP_DOWN= 1;      //0:Down to Up 	1:Up to Down
           bLEFT_RIGHT= 1;
	   cTemp=DU_RL;
	}
	I2CWriteByte(TW100,0xe1,cTemp);
}
//****************************************************************
#ifdef OSD_EN
void OSDShowLine(uCHAR *string,uCHAR x,uCHAR y,uCHAR cColor);
void OSDDrawGauge(uCHAR cVal, uCHAR x, uCHAR y, uCHAR cColor);
void LoadFont(void);
void LoadMenu(void);
void ShowOSDData(void);
void LoadData(void);
void SaveData(void);
void InitOSD(void)
{
    LoadFont();
    LoadMenu();
    LoadData();
    ShowOSDData();
    OSDDisable();
}
void LoadFont(void)
{
	unsigned int i;
        StartCondition();
        Send_Byte(0x50);
        Send_Byte(0xA4);
        for(i=0; i<35*18; i++){
        	Send_Byte(font_00[2*i]);
   	        Send_Byte(font_00[2*i+1]);
	       }
   //0xc00==1024*3;
	for(; i<0x360; i++){
   	        Send_Byte(0x00);
                Send_Byte(0x00);
	}//*/
 	StopCondition();
}
void LoadMenu(void)
{
    uCHAR i;
    for(i=0;i<4;i++)
    {
        OSDShowLine(iBlankLine,0,i,COL_NORMAL);
    }
        OSDShowLine(iBright_ICON,0,0,COL_NORMAL);

        OSDShowLine(iColor_ICON,0,1,COL_NORMAL);

        OSDShowLine(iScreen_ICON,0,2,COL_NORMAL);

        OSDShowLine(iScreen_ICON,0,3,COL_NORMAL);

        OSDShowLine(iFULL_ICON,LINE_LENGTH-2,3,COL_NORMAL);

        OSDShowLine(i4_3_ICON,LINE_LENGTH-3,2,COL_NORMAL);
                  OSDDrawGauge(cColor,3,1,COL_GAUGE);
                  OSDDrawGauge(cBright,3,0,COL_GAUGE);
}
void ShowOSDData(void)
{
    switch(cOSDFunc)
    {
        case 1:
                  OSDDrawGauge(cBright,3,0,COL_GAUGE);
                break;
        case 2:
                  OSDDrawGauge(cColor,3,1,COL_GAUGE);
                break;
        case 3: break;
        }
}

void OSDSetRamAddr(int address)
{
	I2CWriteByte(TW100,0xA3,(uCHAR)(address>>8));
  	I2CWriteByte(TW100,0xA2,(uCHAR)(address & 0xff));
}
void OSDShowLine(uCHAR *string,uCHAR x,uCHAR y,uCHAR cColor)
{
	if((x < 30) && ( y < 0x28))
  	{
	OSDSetRamAddr(MENU_START_ADDR+((int)y << 5)+x);
        StartCondition();
        Send_Byte(0x50);
        Send_Byte(0xA4);
     	while((*string) != EOL && (x < LINE_LENGTH))
     	{
     		Send_Byte(*string++);
        	Send_Byte(cColor );
        	x++;
  		}
   	StopCondition();
	}
}

void OSDDrawGauge(uCHAR cVal,  uCHAR x, uCHAR y, uCHAR cColor)
{
     uCHAR cTemp1,cTemp2,i=8;
     cTemp1=cVal/2;
     cTemp2=cVal%2;
     OSDSetRamAddr(MENU_START_ADDR+((int)y << 5)+x);
        StartCondition();
        Send_Byte(0x50);
        Send_Byte(0xA4);
     while(i)
     {
        if(cTemp1==0)
        {
          if(i==8)Send_Byte(0x0A+cTemp2);
          else if(i==1)Send_Byte(0x10+cTemp2);
          else Send_Byte(0x0D+cTemp2);
         Send_Byte(cColor);
          i--;
          break;
         }
         else
         {
          if(i==8)Send_Byte(0x0C);
          else if(i==1)Send_Byte(0x12);
          else Send_Byte(0x0F);
         }
         Send_Byte(cColor);
         cTemp1--;
         i--;
      }
      while(i)
      {
         if(i>1)Send_Byte(0x0D);
         else   Send_Byte(0x10);
         Send_Byte(cColor);
         i--;
      }
      StopCondition();
      //Num
     cTemp1=cVal/10;
     cTemp2=cVal%10;
     i=cVal/10;
/*     cTemp1=(cVal%100)/10;
     cTemp2=cVal%10;//*/
        OSDSetRamAddr(MENU_START_ADDR+((int)(y) << 5)+(LINE_LENGTH-2));
        StartCondition();
        Send_Byte(0x50);
        Send_Byte(0xA4);
        if(i)Send_Byte(i+0x13);
        else Send_Byte(BLANK);
         Send_Byte(cColor);
        Send_Byte(cTemp2+0x13);
         Send_Byte(cColor);
      StopCondition();

}
void  OSDDisable(void)
{
   I2CWriteTbl(OSDDisableTbl);
}
void OSDEnable(void)
{
   uCHAR cTemp[8];
   cTemp[0]=TW100;
   cTemp[1]=5;
   cTemp[2]=0xa0;
   cTemp[3]=3;
   cTemp[4]=Y_INC;
   cTemp[5]=0x05;
   cTemp[6]=23+(cOSDFunc-1);
   if((cOSDFunc==3)&&bFULL_43)cTemp[6]+=1;
   cTemp[7]=EOT;
   I2CWriteTbl(cTemp);
   cTemp[5]=0x1E;
   I2CWriteTbl(cTemp);
   I2CWriteTbl(OSDEnableTbl);
}
void OSDCtrl(char cDir)
{
	uCHAR cTemp;
        switch(cOSDFunc)
        {
                case 0: OSDDisable();return;
                case 1:
                      if((cBright==0x10)&&(cDir==1))return;
                      if((cBright==0x00)&&(cDir==-1))return;
                      cBright+=cDir;
					 if(cBright<16)cTemp=cBright*16;
					 else cTemp=0xff;
                      I2CWriteByte(TW100,0x69,cTemp);
                      break;
                case 2:
                      if((cColor==0xfc)&&(cDir==1))return;
                      if((cColor==0x00)&&(cDir==-1))return;
                      cColor+=cDir*4;
					 if(cColor<16)cTemp=cColor*16;
					 else cTemp=0xff;
                      I2CWriteByte(TW100,0x6c,cTemp);
                      break;
                case 3:
                      if(Repeat_Times==0)return;
                      if(cDir)
                      {
                          bFULL_43=!bFULL_43;
                          SetMode();
                       }
                      break;
        }
        SaveData();
        ShowOSDData();
        OSDEnable();
}


void LoadData(void)
{
#ifdef NVRAM

#else
        cBright=BRIGHT;
        cColor=COLOR;
#endif
}
void SaveData(void)
{
#ifdef NVRAM

#endif
}
#endif
bit m_bBKPowerOn		=1;
bit m_bKyPowerOn 		=1;
bit m_bChipPowerOn		=1;
void PowerManage(void)
{
 	if(m_bKyPowerOn) //Power on
	{
		I2CWriteByte(TW100, 0xE0, I2CReadByte(TW100, 0xE0)|0x80);
		//When power on chip, force to reset chip
		m_bChipPowerOn=1;
		Delay_ms(50);
		OpenPanel();
 			if(!m_bBKPowerOn)
					BL_EN=0;
// 				BKPower();
	}
	else 	//Forced Power Off
	{
		if(m_bChipPowerOn)
		{
			Delay_ms(50);
 			if(m_bBKPowerOn)
				BL_EN=1;
// 				BKPower();
			ClosePanel();
			Delay_ms(100);
			I2CWriteByte(TW100, 0xE0, I2CReadByte(TW100, 0xE0)&0x7F);
			m_bChipPowerOn=0;
		}
	}
}

⌨️ 快捷键说明

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