📄 keypad.c
字号:
/******************************************************************************
Copyright (c) 2003 MStar Semiconductor, Inc.
All rights reserved.
[Module Name]: Keypad.c
[Date]: 31-Dec-2003
[Comment]:
Keypad control subroutines.
[Reversion History]:
*******************************************************************************/
#define _KEYPAD_C_
// System
#include <intrins.h>
// Common
#include "define.h"
#include "mcu.h"
#include "global.h"
// External
#include "common.h"
#include "uart.h"
#include "userpref.h"
#include "ir.h"
// Internal
#include "keypad.h"
///////////////////////////////////////////////////////////////////////////////
// <Function>: keyScanStatus
//
// <Description>: Scan key status.
//
// <Returns> : Key Status.
///////////////////////////////////////////////////////////////////////////////
#define KeyRange 15
XDATA BYTE g_ucKeyCode;
XDATA BYTE g_ucPreKeyCode;
bit g_bKeyScanEnable = 0;
void keyScanStatus(BYTE KeyPad)
{
BYTE tmp;
if (!g_bKeyScanEnable)
return;
tmp = MADC;
if (KeyPad == Key_AD0)
{
//g_ucKeyCode=IRMAX;
if ((0x88 - KeyRange) < tmp && tmp < (0x88 + KeyRange)) // AD0 OK
{
g_ucKeyCode = IRKEY_VOL_UP;
g_bKeyDetect = TRUE;
return ;
}
else if ((0x59 - KeyRange) < tmp && tmp < (0x59 + KeyRange)) // AD0 OK
{
g_ucKeyCode = IRKEY_VOL_DOWN;
g_bKeyDetect = TRUE;
return ;
}
else if ((0xC7 - KeyRange) < tmp && tmp < (0xC7 + KeyRange)) // AD0 OK
{
g_ucKeyCode = IRKEY_INPUT;
g_bKeyDetect = TRUE;
return ;
}
}
else//Key_AD1
{
if ((0xE3 - KeyRange) < tmp && tmp < (0xE3 + KeyRange)) // AD1 OK
{
g_ucKeyCode = IRKEY_POWER;
g_bKeyDetect = TRUE;
return ;
}
else if ((0x24 - KeyRange) < tmp && tmp < (0x24 + KeyRange)) // AD1 OK
{
g_ucKeyCode = IRKEY_CH_UP;
g_bKeyDetect = TRUE;
return ;
}
else if ((0x64 - KeyRange) < tmp && tmp < (0x64 + KeyRange)) // AD1 OK
{
g_ucKeyCode = IRKEY_CH_DOWN;
g_bKeyDetect = TRUE;
return ;
}
else if ((0xAC - KeyRange) < tmp && tmp < (0xAC + KeyRange)) // AD1 OK
{
g_ucKeyCode = IRKEY_TVMENU;
g_bKeyDetect = TRUE;
return ;
}
}
}
/////////////////////////////////////////
// delay 10 microsecond.
//
// Arguments: wValue - delay counter
////////////////////////////////////////
#ifdef DVDENABLE
void Delay10us(WORD wValue)
{
WORD wCount; // loop counter
while (wValue--)
{
wCount = DELAY_1MS_PERIOD / 100; // reset loop counter
while (wCount--) ;
} // while
}
#endif
///////////////////////////////////////////////////////////////////////////////
// <Function>: keyDetectHandler
//
// <Description>:
///////////////////////////////////////////////////////////////////////////////
void keyDetectHandler(void)
{
g_bKeyScanEnable = 1;
if (!_testbit_(g_bKeyDetect))
{
g_ucPreKeyCode = IRMAX;
g_ucKeyReleaseCounter = 0;
g_bKeyScanEnable = 1;
return;
}
else
{
//printf("\r\nKeyCode=%x",g_ucKeyCode);
if (g_ucKeyReleaseCounter > 0xE000 && g_ucKeyReleaseCounter < 0xEE00)
{// key successfully received before and repeat
//putstr(">");
g_bIrDetect = TRUE;
g_IrCodeParam[5] = TRUE;
g_ucIrCode = g_ucKeyCode;
if (g_ucIrCode == IRKEY_INPUT)
g_ucKeyReleaseCounter = 0xFFFF;
else if (g_ucIrCode == IRKEY_TVMENU)
g_ucKeyReleaseCounter = 0xFFFF;
else//volume channel
g_ucKeyReleaseCounter = 0xEE00;
}
else if (g_ucKeyReleaseCounter == 0)
{// NEW KEY PRESSED
//putstr("-");
if (g_ucPreKeyCode == IRMAX)
{
g_bIrDetect = TRUE;
g_ucIrCode = g_ucKeyCode;
g_IrCodeParam[5] = TRUE;
if (g_ucKeyCode == IRKEY_POWER )
g_ucKeyReleaseCounter = 0x100;
else if (g_ucIrCode == IRKEY_TVMENU)
g_ucKeyReleaseCounter = 0xFFFF;
else if (g_ucIrCode == IRKEY_INPUT)
g_ucKeyReleaseCounter = 0xFFFF;
else//volume chanel input
g_ucKeyReleaseCounter = 0xEF80;
}
}
else if (g_ucKeyReleaseCounter > 0x200 && g_ucKeyReleaseCounter < 0xE000)
{
g_ucPreKeyCode = IRMAX;
g_ucKeyReleaseCounter = 0;
g_bKeyScanEnable = 1;
}
}
g_ucPreKeyCode = g_ucKeyCode;
g_bKeyScanEnable = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -