📄 telecontrol.c
字号:
#include <reg52.h>
#include "INITIAL.H"
#include "SYS_FUN.H"
#include "KEY.H"
#include "OSD_MENU.H"
#include "TELECONTROL.H"
_TeleCon TeleCon;
/////////////////////////////////////////////////
void InitialExternInterrupt(void)
{
TeleCon.mOver=0;
TeleCon.mKeyValue = IR_N0_CODER;
TeleCon.mInterruptTimes=0;
TeleCon.mSendCount=0;
TeleCon.mBitStart=0;
}
////////////////////////////////////////////////////
void InterruptTime1(void) interrupt 3
{
TL1=0;
TH1=0;
}
////////////////////////////////////////////////////////
void IsrInterrupt(void) interrupt 0
{
if(TeleCon.mBitStart==0)
{
TH1=0; TL1=0;
TR1=1;
TeleCon.mtemp=0;
while(TeleCon.mtemp==0)
{
TeleCon.mtemp=P3;
TeleCon.mtemp&=0x04;
}
TR1=0;
TeleCon.mPulse=TH1;
TeleCon.mPulse<<=8;
TeleCon.mPulse+=TL1;
TH1=0; TL1=0;
if(TeleCon.mPulse>8000)
TeleCon.mBitStart=1;
}
else
{
TeleCon.mInterruptTimes++;
if(TeleCon.mInterruptTimes==1)
{
TH1=0; TL1=0;
TR1=1;
TeleCon.mBitValue=0;
}
if(TeleCon.mInterruptTimes>1&&TeleCon.mInterruptTimes<=33)
{
TR1=0;
TeleCon.mPulse=TH1;
TeleCon.mPulse<<=8;
TeleCon.mPulse+=TL1;
TH1=0; TL1=0;
TR1=1;
TeleCon.mBitValue<<=1;
if(TeleCon.mPulse>1450)
TeleCon.mBitValue+=1;
if(TeleCon.mInterruptTimes==33)
{
TR1=0; TH1=0; TL1=0;
TeleCon.mOver=1;
EX0=0;
}
}
}
IT0=1;
}
////////////////////////////////////////////////////////////////////////////////////
BYTE TeleHandleData(void)
{
BYTE temp;
TeleCon.mResult[3]=TeleCon.mBitValue;
TeleCon.mResult[2]=TeleCon.mBitValue>>8;
TeleCon.mResult[1]=TeleCon.mBitValue>>16;
TeleCon.mResult[0]=TeleCon.mBitValue>>24;
temp=TeleCon.mResult[3];
temp=~temp;
if(temp!=TeleCon.mResult[2])
{
TeleCon.mKeyValue=IR_N0_CODER;
return 0;
}
else
{
TeleCon.mKeyValue=TeleCon.mResult[2];
return 1;
}
}
//////////////////////////////////////////////////////////////////////////////
void PanelOSDHandle(void)
{
switch(TeleCon.mKeyValue)
{
case IR_POWER:
IRPowerHandle();
break;
case IR_MENU:
KeyMenuHandle();
break;
case IR_UP:
KeyUpHandle();
break;
case IR_DOWN:
KeyDownHandle();
break;
case IR_LEFT:
KeyLeftHandle();
break;
case IR_RIGHT:
KeyRightHandle();
break;
case IR_VIDEO_SELECT:
IRChannelSelectHandle();
break;
case IR_ENTER:
KeyEnterHandle();
break;
case IR_EXIT:
KeyExitHandle();
break;
default:break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void TeleControlHandle(void)
{
if(TeleCon.mOver)
{
if(TeleHandleData()&&TeleCon.mKeyValue!=IR_OSD_CHANGE)
{
if(TeleCon.mPanelOSDFlag==DECODE_OSD)
SendTeleHandle();
else
PanelOSDHandle();
}
if(TeleCon.mKeyValue==IR_OSD_CHANGE)
{
if(Glogal.mSignalMode==_LibSignalMode)
{
if(TeleCon.mPanelOSDFlag==DECODE_OSD)
TeleCon.mPanelOSDFlag=PANEL_OSD;
else
TeleCon.mPanelOSDFlag=DECODE_OSD;
DisplayOSDChange();
}
}
DelayXms(100);
TeleCon.mOver=0;
TeleCon.mInterruptTimes=0;
TeleCon.mBitValue=0;
TeleCon.mBitStart=0;
EX0=1;
}
}
//////////////////////////////////////////////////////////////////////////////////////////
/*
以下为遥控器按键向外发送出去子程序
/////////////////////////////////////////////////////////////////////////////////////////*/
void SendTeleHandle(void)
{
BYTE i,j;
BYTE Resend;
EX0=0;
IR_OUT=IR_OUT_HIGH;
TeleCon.mSendCount=0;
TH1=0;TL1=0;
TR1=1;
while(TeleCon.mSendCount<9000)
{
IR_OUT=IR_OUT_LOW;
TeleCon.mSendCount=TH1;
TeleCon.mSendCount<<=8;
TeleCon.mSendCount+=TL1;
}
TeleCon.mSendCount=0;
TH1=0;TL1=0;
while(TeleCon.mSendCount<4500)
{
IR_OUT=IR_OUT_HIGH;
TeleCon.mSendCount=TH1;
TeleCon.mSendCount<<=8;
TeleCon.mSendCount+=TL1;
}
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
TeleCon.mSendCount=0;
IR_OUT=IR_OUT_LOW;
TH1=0;TL1=0;
while(TeleCon.mSendCount<560)
{
TeleCon.mSendCount=TH1;
TeleCon.mSendCount<<=8;
TeleCon.mSendCount+=TL1;
}
Resend=TeleCon.mResult[i]&0x80;
TeleCon.mSendCount=0;
IR_OUT=IR_OUT_HIGH;
TH1=0;TL1=0;
if(Resend==0)
{
while(TeleCon.mSendCount<560)
{
IR_OUT=IR_OUT_HIGH;
TeleCon.mSendCount=TH1;
TeleCon.mSendCount<<=8;
TeleCon.mSendCount+=TL1;
}
}
else
{
while(TeleCon.mSendCount<1600)
{
IR_OUT=IR_OUT_HIGH;
TeleCon.mSendCount=TH1;
TeleCon.mSendCount<<=8;
TeleCon.mSendCount+=TL1;
}
}
TeleCon.mResult[i]<<=1;
}
}
TeleCon.mSendCount=0;
TH1=0;TL1=0;
while(TeleCon.mSendCount<560)
{
IR_OUT=IR_OUT_LOW;
TeleCon.mSendCount=TH1;
TeleCon.mSendCount<<=8;
TeleCon.mSendCount+=TL1;
}
IR_OUT=IR_OUT_HIGH;
TR1=0;
TH1=0;TL1=0;
// EX0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -