📄 ir_nec.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 + -