?? keypad.c
字號:
/*
****************************************************
鍵盤
****************************************************
*/
#include <reg52.H>
#include "Typedef.H"
#include "UserDef.H"
#include "Keypad.h"
/* 按鍵對照表 */
static INT32U code KeyMap[][2] = {
// 掃描碼 虛鍵碼
0xFFFF, VK_NULL,
0xFFEF, VK_0,
0xFFFD, VK_1,
0xFFDF, VK_2,
0xFDFF, VK_3,
0xFFFB, VK_4,
0xFFBF, VK_5,
0xFBFF, VK_6,
0xFFF7, VK_7,
0xFF7F, VK_8,
0xF7FF, VK_9,
0xEFFF, VK_ADD,
0xDFFF, VK_SUB,
0xBFFF, VK_MUL,
0x7FFF, VK_DIV,
0xFEFF, VK_EQU,
0xFFFE, VK_CLR,
};
/* 端口定義 */
sbit KP_Col0 = P1^0;
sbit KP_Col1 = P1^1;
sbit KP_Col2 = P1^2;
sbit KP_Col3 = P1^3;
sbit KP_Row0 = P1^4;
sbit KP_Row1 = P1^5;
sbit KP_Row2 = P1^6;
sbit KP_Row3 = P1^7;
/* 全局變量 */
/***************************************************
按鍵掃描程序
****************************************************/
INT8U Keypad_GetKey(void)
{
static INT8U cnt = 0; //按鍵消抖計數器
static INT16U PrevImg = 0x0FFF; //上次的掃描碼
static INT8U PrevKey = VK_NULL; //上次有效按鍵的虛鍵碼
INT16U img;
INT8U n;
BOOLEAN find;
img = 0;
find = FALSE;
//獲取掃描碼
P1 = 0xFF;
KP_Col0 = 0;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 1;
img |= (P1>>4); img <<= 4;
KP_Col0 = 1;KP_Col1 = 0;KP_Col2 = 1;KP_Col3 = 1;
img |= (P1>>4); img <<= 4;
KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 0;KP_Col3 = 1;
img |= (P1>>4); img <<= 4;
KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 0;
img |= (P1>>4);
//消抖
if (PrevImg != img)
{
cnt = 0;
PrevImg = img;
return VK_NULL;
}
PrevImg = img;
cnt ++;
if (cnt < 5)
{
return VK_NULL;
}
//本次消抖完畢,計數器清零,為下次消抖做準備
cnt = 0;
//獲取按鍵的虛鍵碼
for (n=0;n<(sizeof(KeyMap)/8);n++)
{
if (KeyMap[n][0] == img)
{
find = TRUE;
break;
}
}
if (find == TRUE)
{
if (KeyMap[n][1] != PrevKey) //只識別改變的按鍵動作
{
PrevKey = KeyMap[n][1];
return KeyMap[n][1];
}
else
return VK_NULL;
}
else
return VK_INVALID;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -