|
#ifdef KEY #define KEY #else #define KEY extern #endif
#define KEY_BUF_SIZE 10 //键盘缓冲区长度
#define KEY_MAX_ROWS 5 //键盘最大行 #define KEY_MAX_COLS 6 //键盘最大列
#define KEY_RPT_DLY 2 //键自动重复的延时 #define KEY_RPT_START_DLY 10 //键自动重复启动时间
#define KEY_SCAN_TASK_DLY 50 //键盘任务的执行周期
#define KEY_SHIFT1_MSK 0x80 //第7列为SHIFT1键 #define KEY_SHIFT1_OFFSET 00 //SHIFT1键的键值移位值
#define KEY_SHIFT2_MSK 0x40 //第6列为SHIFT2键 #define KEY_SHIFT2_OFFSET 00 //SHIFT2键的键值移位值
#define KEY_SHIFT3_MSK 0x20 //第5列为SHIFT2键 #define KEY_SHIFT3_OFFSET 0 //SHIFT2键的键值移位值
#define KEY_ALL_ROWS 0xFF //选择所有行
#define KEY_STATE_UP 1 //键状态,未按下 #define KEY_STATE_DEBOUNCE 2 //键状态,未回弹 #define KEY_STATE_RPT_START_DLY 3 //键状态,等待启动自动重复 #define KEY_STATE_RPT_DLY 4 //键状态,等待下一次重复
KEY xdata unsigned char KeyBuf[KEY_BUF_SIZE]; //键值缓冲区 KEY xdata unsigned char KeyBufInIx; //键值写入的指针 KEY xdata unsigned char KeyBufOutIx; //键值读出的指针 KEY xdata unsigned int KeyDownTmr; //键按下的时间 KEY xdata unsigned char KeyNRead; //缓冲区内键值的个数 KEY xdata unsigned char KeyRptStartDlyCtr; //自动重复启动计时 KEY xdata unsigned char KeyRptDlyCtr; //下一次重复计时 KEY xdata unsigned char KeyScanState; //键状态
void KeyFlush(void); //清空键盘缓冲区 unsigned char KeyGetKey(void); //从缓冲区中读取出一个键值 unsigned int KeyGetKeyDownTime(void); //读取上一次按键的时间 unsigned char KeyHit(void); //判断缓冲区中是否有键值 void KeyInit(void); //键盘模块初始化 unsigned char KeyGetCol(void); //读取列 */ void KeySelRow(unsigned char); //设置行 */ void KeyBufIn(unsigned char); //把一个键值写入缓冲区 unsigned char KeyDecode(void); //键值译码 unsigned char KeyIsKeyDown(void); //判断是否有键按下 void KeyScanTask(void); //键盘扫描任务
|