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

📄 ir_toshiba.c

📁 使用于克隆器
💻 C
字号:
#if(IR_TYPE==IR_TOSHIBA)

#if 0
void timer1(void) interrupt 3
{
    // Int Vector at 001BH, Reg Bank 1
    EA = 0;
    ET1 = 0; // inhibit timer1 interrupt
    TR1 = 0; // stop timer1
    //if (!g_ucIR_ErrTimeCount)
    {
      Set_IR_ResetFlag();
    }

	//g_ucIR_ErrTimeCount=20;
	//Set_IR_ResetFlag();   //if (!g_ucIR_ErrTimeCount) Set_IR_ResetFlag();
#if 1
   if (slopecount ==2&& enableRepeat) //
   	{
	  g_bIrRepeat	=1;
	  Set_IR_Data_OKFlag();
	  IR_DelayTimers=IR_RepeatDelay;
   	}
   else IR_DelayTimers=IR_NoRepeatDelay;
#endif
//-------------------------------------------------------------------------
   	{
	    TMOD = (TMOD & 0x0f) | 0x20; //change timer1 mode to baud generator
	    TH1= TIMER1_MODE2_TH1;//BaudRatePeriod	//TIMER1_MODE2_TH1;//br_cnt;9600
   	}
    TR1=1;
//----------
    EA = 1;
}

void irInitialize(void)//
{
    IT0 = 1; // set INT0 type(falling edge)
    PX0 = 1; // set INT0 priority high
    EX0 = 1; // enable INT0 interrupt
    Set_IR_ResetFlag();
    Clr_IR_Data_OKFlag();
    g_bIR_Debug_OK=0;
    g_ucIR_TmpData = 0;
    g_ucIrCommand=IR_NOTHING;
    g_ucIrCode=IR_NOTHING;
    slopecount = 0;
    g_ucIR_ErrTimeCount = 0;
     //g_ucIR_delayCount=4;

#if (IR_CODE_DEBUG_EN)
    Clr_IR_DebugCustomerCode0_OKFlag();
    Clr_IR_DebugCustomerCode1_OKFlag();
    Clr_IR_DebugData_OKFlag();
#endif
}


BYTE irScanStatus(void)
{
    BYTE tmp;
    tmp = IR_NOTHING;
    if (IR_Data_OKFlag)
      {
      	tmp = g_ucIrCommand;
      Clr_IR_Data_OKFlag();
      }
//----------------------------------
    return tmp;
}

BOOL irDecodedetect()
{
   BYTE  ircodetemp;

   if(g_ucIR_ErrTimeCount)
     {
         ircodetemp= irScanStatus();
        if (ircodetemp==IR_NOTHING)   return  0;

         if(g_bIrRepeat)
            {
                //if (g_ucIR_delayCount) --g_ucIR_delayCount;
	         //g_bIrRepeat = 0;
            //printf("-->%x", g_ucIrCommand);
	        if(enableRepeat)//&&!g_ucIR_delayCount)
	          {
		        g_ucIrCode=ircodetemp;
	                return 1;
                 }
             }
        else
	    {
		g_ucIrCode=	ircodetemp;
	       return 1;
           }
      }
    return 0;

}

void irDetectTimer0( void )
{
}
#endif

BYTE code ChangeIrCode[] =
{

	//LCDTVPART : 20060117, Haier IR model: HYF-35G
    0x09, //IRKEY_0                0x09
    0x00, //IRKEY_1                0x00
    0x01, //IRKEY_2                0x01
    0x02, //IRKEY_3                0x02
    0x03, //IRKEY_4                0x03
    0x04, //IRKEY_5                0x04
    0x05, //IRKEY_6                0x05
    0x06, //IRKEY_7                0x06
    0x07, //IRKEY_8                0x07
    0x08, //IRKEY_9                0x08
    //0xA0,//IRKEY_100------------------nouse
    0x0b, //IRKEY_POWER            0x0b
    0x0f, //IRKEY_INPUT            0x0c
    0x1c, //IRKEY_TVMENU           0x0d
    0x1b, //IRKEY_VOL_UP           0x0e
    0x1a, //IRKEY_VOL_DOWN         0x0f
    0x19, //IRKEY_CH_UP            0x10
    0x18, //IRKEY_CH_DOWN          0x11

    0x17, //IRKEY_CH_RECALL        0x12
    0x14, //IRKEY_MUTE             0x13
    //=======================================
    0x16, //IRKEY_MTS              0x14
    0x0A, //IRKEY_CC               0x15  // ???
   //===================================
    0x1d, //IRKEY_PMODE            0x2c
    0x1e, //IRKEY_SMODE            0x33
    0x27, //IRKEY_STILL            0x32
    0x20, //IRKEY_DISPLAY          0X3B
    0x28, //IRKEY_SLEEP            0X3C----------------
    0x15, //IRKEY_ASPECT_RATIO     0X3D----------------------------ZOOM
    0x10, //IRKEY_NAVI             0X3F----------------------
    0x0C, //IRKEY_LOCK        	= 0x2A,-----------------------------VCHIP
    0x29, //IRKEY_ATSC

#if 1
    0x80,//IRKEY_AV_FAC
    0x81,//IRKEY_YUV_FAC
    0x82,//IRKEY_VGA_FAC

    0x84,//IRKEY_WR_INC
    0x85,//IRKEY_WR_DEC
    0x86,//IRKEY_WG_INC
    0x87,//IRKEY_WG_DEC
    0x88,//IRKEY_WB_INC
    0x89,//IRKEY_WB_DEC

    0x8A,//IRKEY_BR_INC
    0x8B,//IRKEY_BR_DEC
    0x8C,//IRKEY_BG_INC
    0x8D,//IRKEY_BG_DEC
    0x8E,//IRKEY_BB_INC
    0x8F,//IRKEY_BB_DEC
#endif


#if 1
	0xFF,    	//IRKEY_TRACK     = 声道切换
	0xFF,  		//IRKEY_DV         	=  主从画面切换
	0xFF,	//IRKEY_PIP           =
	0xFF,   	//IRKEY_AAA         	= /
	0x21,//IRKEY_C_SYS     = 0x24,
	0x23,//IRKEY_S_SYS     = 0x26,
	//-------------------no use
	0x22,//IRKEY_22     =
	0x24,//IRKEY_24     =
	0x0E,//IRKEY_0E     =
	0x11,//IRKEY_11     =
	0x29,//IRKEY_29     =
	0x2A,//IRKEY_2A     =
	   // vir
	0xA1,//    IRKEY_FAC
#endif

};

void irInterruptProcess(BYTE ucHeaderCode0, BYTE ucHeaderCode1)
{
    static bit g_ucIrPioltReceived = 0;  // Indicate a Ir "Start" have got.
    static BYTE g_ucIrDataBITCounter;    // Counter bit7-bit0 now received.
    static BYTE g_ucIrCodeBuffer;
    WORD timetemp;  // Temp time for pulse rises space
    BYTE i;

    EA = 0;

    timetemp = g_ucIrClocker; // Note: Step = 0.5ms
    g_ucIrClocker = 0;


    //if((timetemp1)&&(timetemp<4))
    if (timetemp < 4)
    { // 3x0.5ms = 1.5ms
        g_ucIrDataBITCounter++;
        g_ucIrCodeBuffer >>= 1;
        g_ucIrCodeBuffer &= 0x7f;//Get bit=0 (Standard '0' = 1.13ms)
    }
    else if (timetemp > 3 && timetemp < 6)
    {//                 2ms                 3ms
        g_ucIrDataBITCounter++;
        g_ucIrCodeBuffer >>= 1;
        g_ucIrCodeBuffer |= 0x80;//Get bit=1 (Standard '1' = 2.25ms)
    }
    else if (timetemp > 16 && timetemp < 20)
    {//                 8ms                10ms
        g_ucIrPioltReceived = 1;//Get 'Start' (Standard 'Start' = 9ms)
        g_ucIrDataBITCounter = 0;
        //g_bIrDetect=FALSE;
    }
#if 0
    else if (timetemp > 15 && timetemp < 25)
    {//                 8ms                12ms
        if (g_ucIrReleaseCounter > 0)
            g_ucIrDataBITCounter = 0xaa;//Get 'Repeat' (Standard 'Repeat' = 11.25ms)
        else
            g_ucIrDataBITCounter = 0;
    }
#endif
    else if (timetemp > 200 && timetemp < 210)//||(timetemp>134&&timetemp<145))//Repeat 108ms two drop,one is 73,one is 139
    {//                 (108-9-2.25=96.75   96.75*2=193.5)   203--204
        //g_ucIrDataBITCounter=0;
        if (g_ucIrReleaseCounter > 0)
        {// only when Repeat is valid
            if (g_ucIrRepeatCounter == 0 && g_ucIrDataBITCounter == 1)
            { // Repeat valid & Get a 'Repeat'
                if ((g_ucIrCode == IRKEY_INPUT)
                 || (g_ucIrCode == IRKEY_VOL_UP)
                 || (g_ucIrCode == IRKEY_VOL_DOWN)
                 || (g_ucIrCode == IRKEY_CH_UP)
                 || (g_ucIrCode == IRKEY_CH_DOWN))
                {
                    g_bIrDetect = TRUE;
                    g_bIrRepeat = TRUE;
                    g_ucIrPioltReceived = 0;
                    g_IrCodeParam[5] = TRUE;
    	            g_ucIrReleaseCounter = IR_RELEASE_TIME * 2; //8x2x16ms = 256ms
    	            g_ucIrRepeatCounter = IR_DELAY_TIME; ///10x16ms = 160ms
                }
            }
        }
        g_ucIrDataBITCounter = 0;
    }
    else
    {
        g_ucIrPioltReceived = 0;
        g_ucIrDataBITCounter = 0;
    }

    if (g_bIrDetect == FALSE)
    {
        if (g_ucIrDataBITCounter == 8)
        {
            if (g_ucIrCodeBuffer != ucHeaderCode0)
                g_ucIrDataBITCounter = 0;
        #if 0//(IR_CODE_DEBUG_EN)
            g_ucIRDebugCode0 = g_ucIrCodeBuffer;
            Set_IR_DebugCustomerCode0_OKFlag();
        #endif
        }
        else if (g_ucIrDataBITCounter == 16)
        {
            if (g_ucIrCodeBuffer != ucHeaderCode1)
                g_ucIrDataBITCounter = 0;
        #if 0//(IR_CODE_DEBUG_EN)
            g_ucIRDebugCode1 = g_ucIrCodeBuffer;
            Set_IR_DebugCustomerCode1_OKFlag();
        #endif
        }
        else if (g_ucIrDataBITCounter == 24)
        {
            g_IrCodeParam[4] = g_ucIrCodeBuffer;
        }
        else if (g_ucIrDataBITCounter == 32)
        {
            g_ucIrDataBITCounter = 0;
            if ((g_IrCodeParam[4] != ~g_ucIrCodeBuffer) || (g_ucIrPioltReceived == 0))
            {// Get valid 'Code' & '/Code'
                g_ucIrCodeBuffer = 0;
                g_ucIrCode = 0xff;
                g_ucIrReleaseCounter = 0;
            }
            else
            {
            #if 1
                // Check if in the ChangIrCode[] table or not
                for (i = 0; i < IRMAX; i++)
                {
                    if (ChangeIrCode[i] == g_IrCodeParam[4])
                        break;
                }
                if (i == IRMAX)
                {// Not right
                    g_ucIrCodeBuffer = 0;
                    g_ucIrCode = 0xff;
                    g_ucIrReleaseCounter = 0;
                }
                else
            #endif
                {// Get a right Ir 'code'
                    g_ucIrCode = i;
                    g_bIrDetect = TRUE;
                    g_ucIrPioltReceived = 0;
                    g_ucIrRepeatCounter = IR_DELAY_TIME; ///10x16ms = 160ms
                    g_ucIrReleaseCounter = IR_RELEASE_TIME * 2; //8x2x16ms = 256ms
                    g_IrCodeParam[5] = TRUE;
                #if 0//IR_CODE_DEBUG_EN
                    Set_IR_DebugData_OKFlag();
                    g_ucIRDebugData=g_ucIrCode;
                #endif
                }
            }
        }
    }

    EA = 1;
}

#endif

⌨️ 快捷键说明

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