#include <reg52.h>
#include "stdint.h"
sbit KEY_ROW_0 = P2^3;
sbit KEY_ROW_1 = P2^2;
sbit KEY_ROW_2 = P2^1;
sbit KEY_ROW_3 = P2^0;
sbit KEY_COL_0 = P2^4;
sbit KEY_COL_1 = P2^5;
sbit KEY_COL_2 = P2^6;
sbit KEY_COL_3 = P2^7;
code uint8_t keyCodeMap[4][4] = { //矩阵按键编号到标准键盘键码的映射表
{0x31, 0x32, 0x33, 0x26}, //数字键1、数字键2、数字键3、向上键
{0x34, 0x35, 0x36, 0x25}, //数字键4、数字键5、数字键6、向左键
{0x37, 0x38, 0x39, 0x28}, //数字键7、数字键8、数字键9、向下键
{0x30, 0x1B, 0x0D, 0x27} //数字键0、ESC键、 回车键、 向右键
};
pdata uint8_t keyState[4][4] = { //全部矩阵按键的当前状态
{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}
};
extern void keyAction(uint8_t keyCode);
void keyDriver() { //在主循环中调用
uint8_t i, j;
static uint8_t backup[4][4] = { //矩阵按键上一次的状态
{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}
};
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++) //依次判断每