📄 t100.c.bak
字号:
_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 + -