📄 key.c
字号:
#include "fx2.h"
#include "fx2regs.h"
#include "io.h"
#include "key.h"
/*********************宏定义***************************/
#define OKey_Macro_MaxKeyNum 9 /*最大键码数*/
#define OKey_Macro_ClearTrembleLength 100 /*消颤队列长度*/
#define OKey_Macro_NoKey 0xFF
BYTE OKey_RD_OldKey ;
BYTE OKey_RD_CountKey ;
WORD OKey_RD_Counter ;
BYTE OKey_Value;
struct OKey_RD_KeyTable_Struct
{
BYTE ScanCode;
BYTE KeyEventID;
};
code struct OKey_RD_KeyTable_Struct OKey_RD_KeyTable [OKey_Macro_MaxKeyNum+1] = /*键码表 OKey_Macro_MaxKeyNum + 1 */
{
{Macro_ScanS1, 1}, {Macro_ScanS2, 2},
{Macro_ScanS3, 3}, {Macro_ScanS4, 4},
{Macro_ScanS5, 5}, {Macro_ScanS6, 6},
{Macro_ScanS7, 7}, {Macro_ScanS8, 8},
{Macro_ScanUnhand,0x7F}, {Macro_ScanNoKey, 0xFF}
};
BYTE OKey_MD_TransKey (BYTE in_key)
{
BYTE i ;
i = 0;
while ((in_key != OKey_RD_KeyTable[i].ScanCode) && (i < OKey_Macro_MaxKeyNum))
i ++ ;
return (OKey_RD_KeyTable[i].KeyEventID) ;
}
/*********************** 公有函数 **********************/
/*************************************************/
/* Name: OKey_RP_Scan */
/* Descrip: 键盘扫描 */
/* Input: 无 */
/* Output: 无 */
/*************************************************/
BYTE OKey_RP_Scan()
{
BYTE temp_code ,temp_scan;
temp_code = *KEY; /* 读键盘 */
if (temp_code == Macro_ScanUnhand) /*没有键按下*/
{
if (OKey_RD_OldKey == Macro_ScanUnhand) /* 上次也没按下 */
{
return (OKey_Macro_NoKey); /*无键*/
}
}
else /* 本次有键按下 */
{
if (OKey_RD_OldKey != Macro_ScanUnhand) /* 上次没按下 */
{
return (OKey_Macro_NoKey); /*无键*/
}
}
if (temp_code == OKey_RD_CountKey)
{
OKey_RD_Counter ++ ;
if (OKey_RD_Counter >= OKey_Macro_ClearTrembleLength)
{
OKey_RD_Counter = 0 ;
temp_scan = OKey_MD_TransKey(temp_code);
if (temp_scan != Macro_ScanNoKey)
{
if (OKey_RD_CountKey == OKey_RD_OldKey)
return (OKey_Macro_NoKey);
else
{
OKey_RD_OldKey = OKey_RD_CountKey;
return (temp_scan) ;
}
}
else
return (OKey_Macro_NoKey);
}
else
return (OKey_Macro_NoKey);
}
else
{
OKey_RD_Counter = 0;
OKey_RD_CountKey = temp_code;
return (OKey_Macro_NoKey);
}
}
/*************************************************/
/* Name: OKey_RP_Init */
/* Descrip: 初始化 */
/* Input: 无 */
/* Output: 无 */
/*************************************************/
void OKey_RP_Init()
{
OKey_RD_OldKey = OKey_Macro_NoKey;
OKey_RD_CountKey = OKey_Macro_NoKey;
OKey_RD_Counter = 0;
OKey_Value = 0xFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -