📄 key_fk.c
字号:
/*
*********************************************************************************************************
*
* Filename : KEY_HT.C
* Programmer : Haven
*********************************************************************************************************
*/
#define FK_KEY_GLOBALS
#include "..\includes\INCLUDES.H"
#if FK_KEY_EN
#define KEY_STATE_UP 1
#define KEY_STATE_DEBOUNCE 2
#define KEY_STATE_RPT_START_DLY 3
bit Key2S;
INT8U KeyScanState;
INT8U KeyBufFk;
INT8U KeyBufTemp;
INT8U KeyRptStartDlyCtr;
BOOLEAN KeyIsKeyDown (void);
INT8U KeyDecode (void);
void KeyInit (void)
{
KeyScanState = KEY_STATE_UP;
KeyBufFk = 0;
}
INT8U KeyGetKey (void)
{
INT8U ccode;
ccode = KeyBufFk;
if (ccode != 0){
KeyBufFk = 0;
return (ccode);
} else {
return (0);
}
}
BOOLEAN KeyIsKeyDown (void)
{
if ((~KEY_IN_PORT)> 0) {
return (TRUE);
} else {
return (FALSE);
}
}
INT8U KeyDecode (void)
{
return (~KEY_IN_PORT);
}
void KeyScan(void)//带长按功能,输出不同键值来代表某键长按,以使应用程序简单
{
switch (KeyScanState) {
case KEY_STATE_UP:
if (KeyIsKeyDown()) {
KeyScanState = KEY_STATE_DEBOUNCE;
}
break;
case KEY_STATE_DEBOUNCE:
if (KeyIsKeyDown()) {
KeyBufTemp = KeyDecode();
KeyRptStartDlyCtr = KEY_RPT_START_DLY;
KeyScanState = KEY_STATE_RPT_START_DLY;
}else{
KeyScanState = KEY_STATE_UP;
}
break;
case KEY_STATE_RPT_START_DLY:
if (KeyIsKeyDown()) {
if (KeyRptStartDlyCtr > 0){
if ((-- KeyRptStartDlyCtr) == 0){
Key2S = TRUE;
KeyBufFk = KeyBufTemp + KeyValMax;
}
}
}else{
if(Key2S == FALSE){
KeyBufFk = KeyBufTemp;
}else{
Key2S = FALSE;
}
KeyScanState = KEY_STATE_UP;
}
break;
}
if(KeyBufFk != 0){
ActObjEvtPost(1, KEYDOWN_SIG);//1为prio
}
}
/*
void KeyScan(void)
{
switch (KeyScanState) {
case KEY_STATE_UP:
if (KeyIsKeyDown()) {
KeyScanState = KEY_STATE_DEBOUNCE;
KeyDownTmr = 0;
}
break;
case KEY_STATE_DEBOUNCE:
if (KeyIsKeyDown()) {
code = KeyDecode();
KeyBufIn(code);
KeyRptStartDlyCtr = KEY_RPT_START_DLY;
KeyScanState = KEY_STATE_RPT_START_DLY;
} else {
KeySelRow(KEY_ALL_ROWS);
KeyScanState = KEY_STATE_UP;
}
break;
case KEY_STATE_RPT_START_DLY:
if (KeyIsKeyDown()) {
if (KeyRptStartDlyCtr > 0) {
KeyRptStartDlyCtr--;
if (KeyRptStartDlyCtr == 0) {
code = KeyDecode();
KeyBufIn(code);
KeyRptDlyCtr = KEY_RPT_DLY;
KeyScanState = KEY_STATE_RPT_DLY;
}
}
} else {
KeyScanState = KEY_STATE_DEBOUNCE;
}
break;
case KEY_STATE_RPT_DLY:
if (KeyIsKeyDown()) {
if (KeyRptDlyCtr > 0) {
KeyRptDlyCtr--;
if (KeyRptDlyCtr == 0) {
code = KeyDecode();
KeyBufIn(code);
KeyRptDlyCtr = KEY_RPT_DLY;
}
}
} else {
KeyScanState = KEY_STATE_DEBOUNCE;
}
break;
}
}
*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -