📄 key.c
字号:
void delay(unsigned char time)
{
for (;time != 0;time--){
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
}
}
unsigned char PollingKey (void)
{
unsigned char i;
unsigned char j;
unsigned char key;
KEY_OUTPUT &= (~OUTPUT_MASK);
delay(20);
key = (~KEY_INPUT) & INPUT_MASK;
if (key != 0){
for (i = 0;i < KEY_MAX_X;i++){
key = KEY_OUTPUT & (~OUTPUT_MASK);
KEY_OUTPUT =(((~Num2Bit[i])&OUTPUT_MASK)|key);
delay(20);
key = (~KEY_INPUT) & INPUT_MASK;
if (key != 0){
for (j = 0;j < KEY_MAX_Y;j++){
if (key & 0x80) break;
key <<= 1;
}
return TransKey[(i * 4) + j];
}
}
}else{
return KEY_NONE;
}
}
void ClearKeyFlag(void)
{
KeyDebounce = 0;
KeyRelease = 0;
KeyCnt = 0;
KeyCode = KEY_NONE;
}
void ScanKey(void)
{ if(Time1m == 0 ) return;
Time1m = 0;
KeyCode = PollingKey();
if (KeyCode != KEY_NONE){
if (KeyDebounce){
if (DebounceCnt < DEBOUNCE_TIME){
KeyCode = KEY_NONE;
}else{
if (KeyCode != OldKey){
ClearKeyFlag();
}else{
KeyDebounce = 0;
KeyRelease = 1;
}
}
}else{
if (KeyRelease){
if (KeyCode != OldKey){
ClearKeyFlag();
// Flag = 0;
}
else{ ///当按键一直按着着码不变
KeyCode = KEY_NONE;
// Flag = 1;
// if (DebounceCnt > DEBOUNCE_TIME) KeyCnt++;
}
}else{
KeyDebounce = 1;
OldKey = KeyCode;
DebounceCnt = 0;
// KeyCnt = 0;
KeyCode = KEY_NONE;
}
}
}else{
ClearKeyFlag();
}
}
#pragma optsize+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -