📄 key.c
字号:
//----------------------------------------------------------------------------------------------------
// ID Code : Key.c No.0001
// Update Note :
//
//----------------------------------------------------------------------------------------------------
#define __KEY__
#include "Header\Include.h"
//--------------------------------------------------
// Description : Key scan process
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CKeyHandler(void)
{
// Clear the key message
ucKeyMessage = _NONE_KEY_MESSAGE;
if(1)//CKeyScanReady())
{
// Store previous key state
ucKeyStatePrev = ucKeyStateCurr;
// Get current key state
ucKeyStateCurr = CKeyScan();
// Convert key state to key message, store in (ucKeyNotify)
CKeyMessageProc();
}
}
//--------------------------------------------------
// Description : Initial key status
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CKeyInitial(void)
{
CLR_KEYSCANREADY();
CLR_KEYSCANSTART();
}
//--------------------------------------------------
// Description : Key scan ready process. We wait 0.02 sec in order to keep the keypad debounce
// Input Value : None
// Output Value : None
//--------------------------------------------------
bit CKeyScanReady(void)
{
if(GET_KEYSCANSTART() && GET_KEYSCANREADY())
{
CLR_KEYSCANSTART();
CLR_KEYSCANREADY();
return _TRUE;
}
else if(!GET_KEYSCANSTART())
{
// Wait 0.02 sec in order to keep the keypad debounce
SET_KEYSCANSTART();
//CTimerReactiveTimerEvent(SEC(0.02), CKeyScanReadyTimerEvent);
SET_KEYSCANREADY();
return _FALSE;
}
else
{
return _FALSE;
}
}
//--------------------------------------------------
// Description : Key scan ready timer event
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CKeyScanReadyTimerEvent(void)
{
SET_KEYSCANREADY();
if(!GET_KEYSCANREADY()) //V335
SET_KEYSCANREADY();
}
//--------------------------------------------------
// Description : Key repeat enable timer event
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CKeyRepeatEnableTimerEvent(void)
{
SET_KEYREPEATSTART();
}
//--------------------------------------------------
// Description : Key message translation
// Input Value : ucKeyMask --> Key mask
// ucKeyMsg --> Key message
// Output Value : None
//--------------------------------------------------
void CKeyMessageConvert(BYTE ucKeyMask, BYTE ucKeyMsg)
{
if((ucKeyStatePrev ^ ucKeyStateCurr) & ucKeyMask)
{
ucKeyMessage = ucKeyMsg;
}
else
{
if(GET_KEYREPEATENABLE())
{
if(GET_KEYREPEATSTART())
{
ucKeyMessage = ucKeyMsg;
}
else
{
CTimerActiveTimerEvent(SEC(_KEY_REPEAT_START_TIME),CKeyRepeatEnableTimerEvent);
}
}
}
}
//--------------------------------------------------
// Description : Get key status
// Input Value : None
// Output Value : Return Key status
//--------------------------------------------------
BYTE CKeyScan(void)
{
BYTE ucKeyState,m;
ucKeyState = 0;
if(!bKEY1)
{
for(m=0;m<120;m++)
{
if (bKEY1)
return ucKeyState;
BitDly();
}
ucKeyState = ucKeyState | _KEY1_MASK;
}
if(!bKEY2)
{
for(m=0;m<120;m++)
{
if (bKEY2)
return ucKeyState;
BitDly();
}
ucKeyState = ucKeyState | _KEY2_MASK;
}
return ucKeyState;
}
//--------------------------------------------------
// Description : Convert keypad status into key message, stores in ucKeyNotify
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CKeyMessageProc(void)
{
switch(ucKeyStateCurr)
{
case _KEY1_MASK:
CKeyMessageConvert(_KEY1_MASK, _KEY1_MESSAGE);
break;
case _KEY2_MASK:
CKeyMessageConvert(_KEY2_MASK, _KEY2_MESSAGE);
break;
case _KEY3_MASK:
CKeyMessageConvert(_KEY3_MASK, _KEY3_MESSAGE);
break;
default:
CLR_KEYREPEATSTART();
CLR_KEYREPEATENABLE(); //VYYY
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -