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

📄 remote.c

📁 一个DVD组合机的MCU代码,FM,机芯出入仓,功放的控制及DVD数据通过通信来访问.
💻 C
字号:
/*-TAB=2-------------------------------------------------------------------*/
/**------------------------------------------------------------------------*
 *                                                                         *
 * NAME:REMOTE.C                                                           *
 *                                                                         *
 *                                                                         *
 * UPDATE: 2002/8/15  YCD                                                  *
 *                                                                         *
 *                                                                         *
 *                                                                         *
 *-------------------------------------------------------------------------*/
#include "..\SRC\ZM.H"
#include "..\src\key.h"

#define RMT_HEAD_MAX  14000     /*13.55*/
#define RMT_HEAD_MIN  12600     /*13.315*/

#define RMT_END_MAX   12000     /*11.3*/
#define RMT_END_MIN   10500     /*11.0*/

#define RMT_1_MAX     2800      /*2.290*/
#define RMT_1_MIN     1700      /*2.200*/

#define RMT_0_MAX     1660      /*1.160*/
#define RMT_0_MIN      570      /*1.070*/

#define RMT_ADDR0     0X00
#define RMT_ADDR1     0XFF

bit  gStartBit;
bit  gboolRmtContinueKey;
BYTE gEx1BitBuf[4];
BYTE gEx1BitSize=0;
WORD gEx1TmCount;
BYTE gEx1QueueFront=0;
BYTE gEx1QueueRear=0;
BYTE gRemoteKeyBuf[4];
BYTE gRmtLastKey=0xff;
BYTE gRmtCountinueKeyCount;


/*-------------------------------------------------------------------------*/
const BYTE kRemoteKeyTabl[53][2]={
{0x45,RMT_KEY_0_10	   },
{0x09,KEY_1            },
{0x05,KEY_2            },
{0x01,KEY_3            },
{0x4B,KEY_4            },
{0x47,KEY_5            },
{0x43,KEY_6            },
{0x4A,KEY_7            },
{0x46,KEY_8            },
{0x42,KEY_9            },
{0x0E,KEY_LEFT         },
{0x0A,KEY_RIGHT        },
{0x07,KEY_UP           },
{0x0B,KEY_DOWN         },
{0x06,KEY_ENTER        },
{0x0C,RMT_KEY_POWER			   },
{0x08,RMT_KEY_OSD          },
{0x00,RMT_KEY_OPEN_CLOSE   },
{0x0D,RMT_KEY_LANGUAGE     },
{0x4F,RMT_KEY_SUBTITLE     },
{0x4E,RMT_KEY_ANGLE        },
{0x4D,RMT_KEY_PROG         },
{0x49,RMT_KEY_10ADD        },
{0x45,RMT_KEY_0_10         },
{0x41,RMT_KEY_CLEAR_EQ     },
{0x4C,RMT_KEY_MUTE         },
{0x48,RMT_KEY_3D           },
{0x44,RMT_KEY_TIME         },
{0x40,RMT_KEY_ZOOM         },
{0x0F,RMT_KEY_MENU_WIEW    },
{0x03,RMT_KEY_TITLE        },
{0x1F,RMT_KEY_SETUP        },
{0x13,RMT_KEY_PBC          },
{0x5C,RMT_KEY_ECH_SUB      },
{0x58,RMT_KEY_ECH_ADD      },
{0x50,RMT_KEY_VOL_UP       },
{0x54,RMT_KEY_VOL_DOWN     },
{0x5D,RMT_KEY_B            },
{0x59,RMT_KEY_JING         },
{0x55,RMT_KEY_L_R          },
{0x51,RMT_KEY_RETURN       },
{0x5E,RMT_KEY_AB           },
{0x5A,RMT_KEY_PREV			   },
{0x56,RMT_KEY_STEP         },
{0x52,RMT_KEY_GOTO         },
{0x5F,RMT_KEY_LEFT_END     },
{0x5B,RMT_KEY_RIGHT_END    },
{0X57,RMT_KEY_LEFT_LEFT    },
{0X53,RMT_KEY_RIGHT_RIGHT  },
{0X1C,RMT_KEY_STOP         },
{0X18,RMT_KEY_PLAY_PAUSE   },
{0X14,RMT_KEY_FAST         },
{0X10,RMT_KEY_MARK         }};

const BYTE kRmtContinueKeyTab[]={
0x0E,/*KEY_LEFT */
0x0A,/*KEY_RIGHT*/
0x50,/*RMT_KEY_VOL_UP*/
0x54 /*RMT_KEY_VOL_DOWN*/
};


/*-------------------------------------------------------------------------*/
/*  remote key process                                                     */
/*-------------------------------------------------------------------------*/
/**
 *@void EX0_int (void)
 *@update 2002/9/19
 */
#define RMT_KEY_DELAY    255
interrupt [0x13] void EX1_int (void)	  /* External Interrupt 1 */
{
	gEx1TmCount=TH1<<8;
	gEx1TmCount|=TL1;

	if(TF1==0){
		if( gEx1TmCount>RMT_HEAD_MIN && gEx1TmCount<RMT_HEAD_MAX ){
			gStartBit=1;
			gEx1BitSize=0;
		}
		else if( gEx1TmCount>RMT_END_MIN && gEx1TmCount<RMT_END_MAX ){
			if(gRmtCountinueKeyCount) gRmtCountinueKeyCount--;
			if(kRmtContinueKeyTab[0]==gRmtLastKey||
				 kRmtContinueKeyTab[1]==gRmtLastKey||
				 kRmtContinueKeyTab[2]==gRmtLastKey||
				 kRmtContinueKeyTab[3]==gRmtLastKey){
				 if(gRmtCountinueKeyCount==0){
					gRemoteKeyBuf[gEx1QueueFront++]=gRmtLastKey;
					gEx1QueueFront&=0x03;
					gboolRmtContinueKey=1;
					gRmtCountinueKeyCount=3;
				}
			}
			gStartBit=0;
			gEx1BitSize=0;
		}
		else if(gStartBit){
			if(gEx1TmCount>RMT_1_MIN && gEx1TmCount<RMT_1_MAX ){
				CY=1;
				Lsb_ShiftEx1Bit();
				gEx1BitSize++;
			}
			else if(gEx1TmCount>RMT_0_MIN && gEx1TmCount<RMT_0_MAX){
				CY=0;
				Lsb_ShiftEx1Bit();
				gEx1BitSize++;
			}

			if(gEx1BitSize==24){
				if(gEx1BitBuf[2]==RMT_ADDR0 && gEx1BitBuf[1]==RMT_ADDR1) {
					gRemoteKeyBuf[gEx1QueueFront++]=gEx1BitBuf[0];
					gEx1QueueFront&=0x03;
					gRmtLastKey=gEx1BitBuf[0];
				}
				gboolRmtContinueKey=0;
				gRmtCountinueKeyCount=6;
				gStartBit=0;
				gEx1BitSize=0;
			}
		}
	}

	TL1=0;
	TH1=0;
	TF1=0;
}


/**
 *@void ClrRmtKey(void)
 *@update 2002/8/10
 */
void ClrRmtKey(void)
{
	gEx1QueueRear=gEx1QueueFront;
}

/**
 *@void InitRemote(void)
 *@update 2002/8/10
 */
void InitRemote(void)
{
	gStartBit=0;
}

/**
 *@BYTE RemoteKbHit(void)
 *@update 2002/8/10
 */
BYTE RemoteKbHit(void)
{
	return(gEx1QueueRear!=gEx1QueueFront);
}

void ShowHex(BYTE i,BYTE aByte);
/**
 *@unsigned char GetKey(void)
 *@update 2002/8/10
 */
BYTE RemoteGetKey(void)
{
	BYTE i,KeyCode=0;
	if(RemoteKbHit()){
		KeyCode=gRemoteKeyBuf[gEx1QueueRear++];
		gEx1QueueRear&=0x03;
		for(i=0;i<REMOTE_KEY_TOTAL;i++){
			if(KeyCode==kRemoteKeyTabl[i][0]){
				 KeyCode=kRemoteKeyTabl[i][1];
				 break;
			}
		}
	}
	return(KeyCode);
}

/*-------------------------------------------------------------------------*/
/*  debug  remote key                                                      */
/*-------------------------------------------------------------------------*/

⌨️ 快捷键说明

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