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

📄 ir_nec.c

📁 使用于克隆器
💻 C
字号:

#if(IR_TYPE==IR_NEC)

/////////////////////////////////////////////////////////////////////////////////////////////////////////
#if (IR_NEC_TL10S)
BYTE code ChangeIrCode[] =
{
	//LCDTVPART : 20060402, Haier IR model: CR-TL10S
    0x1E, //IRKEY_0                0x00
    0x1D, //IRKEY_1                0x01
    0x1C, //IRKEY_2                0x02
    0x46, //IRKEY_3                0x03
    0x15, //IRKEY_4                0x04
    0x14, //IRKEY_5                0x05
    0x45, //IRKEY_6                0x06
    0x00, //IRKEY_7                0x07
    0x1F, //IRKEY_8                0x08
    0x1B, //IRKEY_9                0x09
    0x11, //IRKEY_POWER            0x0b
    0x19, //IRKEY_INPUT            0x0c
    0x04, //IRKEY_TVMENU           0x0d
    0X53, //IRKEY_VOL_UP           0x0e
    0X57, //IRKEY_VOL_DOWN         0x0f
    0X47, //IRKEY_CH_UP            0x10
    0X4B, //IRKEY_CH_DOWN          0x11
    0xFF, //IRKEY_CH_RECALL        0x12  // ???
    0x13, //IRKEY_MUTE             0x13
    0xFF, //IRKEY_MTS              0x14  // ???
    0x59, //IRKEY_CC               0x15

    0x54, //IRKEY_PMODE            0x2c
    0x5C, //IRKEY_SMODE            0x33
    0x50, //IRKEY_STILL            0x32
    0x43, //IRKEY_DISPLAY          0X3B
    0x0D, //IRKEY_SLEEP            0X3C
    0x4F, //IRKEY_ASPECT_RATIO     0X3D
    0x4D, //IRKEY_NAVI             0X3F
    0xFF, //IRKEY_ATSC             0X40  // ???
};
#else
BYTE code ChangeIrCode[] =
{
	//LCDTVPART : 20060117, Haier IR model: HYF-33M
    0x55, //IRKEY_0                0x00
    0x48, //IRKEY_1                0x01
    0x49, //IRKEY_2                0x02
    0x4a, //IRKEY_3                0x03
    0x4c, //IRKEY_4                0x04
    0x4d, //IRKEY_5                0x05
    0x4e, //IRKEY_6                0x06
    0x50, //IRKEY_7                0x07
    0x51, //IRKEY_8                0x08
    0x52, //IRKEY_9                0x09
    0x02, //IRKEY_POWER            0x0b
    0x09, //IRKEY_INPUT            0x0c
    0x11, //IRKEY_TVMENU           0x0d
    0X12, //IRKEY_VOL_UP           0x0e
    0X10, //IRKEY_VOL_DOWN         0x0f
    0X0C, //IRKEY_CH_UP            0x10
    0X0d, //IRKEY_CH_DOWN          0x11
    0x01, //IRKEY_CH_RECALL        0x12
    0x56, //IRKEY_MUTE             0x13
    0x75, //IRKEY_MTS              0x14
    0xff, //IRKEY_CC               0x15  // ???

    0x16, //IRKEY_PMODE            0x2c
    0x17, //IRKEY_SMODE            0x33
    0x40, //IRKEY_STILL            0x32
    0x44, //IRKEY_DISPLAY          0X3B
    0x00, //IRKEY_SLEEP            0X3C
    0x73, //IRKEY_ASPECT_RATIO     0X3D
    0x42, //IRKEY_NAVI             0X3F
    0xFF, //IRKEY_ATSC             0X40

/*  //below IR code not in use yet. Haier IR model: HYF-33M
    IRKEY_QUICKBACK                                     = 0x01,
    IRKEY_COLORSYS                                      = 0x04,
    IRKEY_AUDIOSYS                                      = 0x05,
    IRKEY_LOCK                                          = 0x06,
    IRKEY_3DNR_MODE                                     = 0x08,
    IRKEY_SVM_MODE                                      = 0x0a,
    IRKEY_HDM                                           = 0x46,
    IRKEY_CALENDAR                                      = 0x54,
    IRKEY_FACTORY                                       = 0x17,
    IRKEY_BUS                                           = 0x70,
    IRKEY_SCAN_MODE                                     = 0x74,
*/

    //DVD PART : 20060117, Not care
    0X4E, //DVD_OSD                0x1c
    0X10, //DVD_OPEN               0x1d
    0x14, //DVD_PLAY               0x1e
    0x13, //DVD_PAUSE              0x1f
    0x0F, //DVD_STOP               0x20
    0X07, //IRKEY_DVD_TITLE        0x21
    0X0C, //DVD_MENU               0x22
    0X1E, //DVD_SKIP_LEFT          0x23
    0X5B, //DVD_SKIP_RIGHT         0x24

    0X87, //DVD_SEARCH_LEFT        0x25
    0X1A, //DVD_SEARCH_RIGHT       0x26
    0X55, //DVD_ZOOM               0x27
    0X00, //DVD_SLOW               0x28
    0X4D, //DVD_SETUP              0x29
    0xff, //DVD_RETURN             0x2a
    0X00, //DVD_PMODE              0x2b
    0X04, //DVD_WIDE               0x2d
    0X18, //DVD_AMODE              0x2e
    0X53, //DVD_AUDIO              0x2f
    0X56, //DVD_SUBTITLE           0x30
    0X54, //DVD_ANGLE              0x31
    0X42, //IRKEY_TV               0X34
    0X45, //IRKEY_DVD              0X35
};
#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)
    { // 4x0.5ms = 2ms
        g_ucIrDataBITCounter++;
        g_ucIrCodeBuffer >>= 1;
        g_ucIrCodeBuffer &= 0x7f;//Get bit=0 (Standard '0' = 1.12ms)
    }
    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 > 25 && timetemp < 30)
    {//                 13ms                15ms
        g_ucIrPioltReceived = 1;//Get 'Start' (Standard 'Start' = 13.5ms)
        g_ucIrDataBITCounter = 0;
        //g_bIrDetect=FALSE;
    }
    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;
    }
    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)   <Real Value:203--204>
        //g_ucIrDataBITCounter=0;
        if (g_ucIrReleaseCounter > 0)
        {// only when Repeat is valid
            if (g_ucIrRepeatCounter == 0 && g_ucIrDataBITCounter == 0xaa)
            { // 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))
            {
                g_ucIrCodeBuffer = 0;
                g_ucIrCode = 0xff;
                g_ucIrReleaseCounter = 0;
            }
            else
            {// Get valid 'Code' & '/Code'
                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
                {// Get a right Ir 'code'
                    g_ucIrCode = i;
                    g_bIrDetect = TRUE;
                    g_ucIrPioltReceived = 0;
                    g_IrCodeParam[5] = TRUE;
                    g_ucIrRepeatCounter = IR_DELAY_TIME; ///10x16ms = 160ms
                    g_ucIrReleaseCounter = IR_RELEASE_TIME * 2; //8x2x16ms = 256ms
	             #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 + -