📄 drv_kbd.c
字号:
#include "sys_def.h"
#include "mng_tsk.h"
#include "mng_irq.h"
#include "drv_kbd.h"
USHORT usKeyMem = 0;
USHORT usKeyCode = 0;
UCHAR ucKeyFix = 0;
UCHAR ucAgreeCnt = 0;
USHORT usCount = 0;
UCHAR ucState = KEY_IDLE;
USHORT usTimer = 0;
static UCHAR ucSmpCnt;
int SendKeyMsg(USHORT usVtg)
{
UCHAR ucKeyID;
if (400 <= usVtg && usVtg <= 535){
ucKeyID = KEY_ESC;
}
else if (940 <= usVtg && usVtg <= 1000){
ucKeyID = KEY_ENTER;
}
else if (1420 <= usVtg && usVtg <= 1500){
ucKeyID = KEY_LEFT;
}
else if (1900 <= usVtg && usVtg <= 1950){
ucKeyID = KEY_DOWN;
}
else if (2400 <= usVtg && usVtg <= 2450){
ucKeyID = KEY_RIGHT;
}
else if (2900 <= usVtg && usVtg <= 2950){
ucKeyID = KEY_UP;
}
else if (3450 <= usVtg && usVtg <= 3490){
ucKeyID = KEY_POWER;
}
else if (4080 <= usVtg && usVtg <= 4095){
ucKeyID = KEY_MENU;
}
else{
return NG;
}
//发送按键消息
Msg_t stMsg;
stMsg.ucSrcID = 0;
stMsg.ucTgtID = 0;
stMsg.iMsgID = 6;
SendMsg(&stMsg);
return ucKeyID;
}
// Key中断处理函数
int KbdKeyIrq()
{
int iRst = NG;
Msg_t stMsg;
stMsg.ucSrcID = 0;
stMsg.ucTgtID = 0;
stMsg.iMsgID = 1;
SendMsg(&stMsg);
ucSmpCnt = 0;
ADC12CTL0 |= ADC12SC;
iRst = OK;
return iRst;
}
// Adc12中断处理函数
int KbdAdcIrq()
{
int iRst = NG;
Msg_t stMsg;
stMsg.ucSrcID = 0;
stMsg.ucTgtID = 0;
stMsg.iMsgID = 2;
SendMsg(&stMsg);
if (0 == ucSmpCnt){
usKeyMem = ADC12MEM0;
}
if (usKeyMem == ADC12MEM0){
if (2 > ++ucSmpCnt){
ADC12CTL0 |= ADC12SC;;
}
else{
SendKeyMsg(usKeyMem);
}
}
iRst = OK;
return iRst;
}
// Keyboard中初始化函数
void KbdInit()
{
// 初始化Port6
P6DIR = 0x00;
P6SEL = 0xFF;
// 初始化ADC12A
RegIrq(IRQ_PORT1_BIT0, KbdKeyIrq);
RegIrq(IRQ_ADC12_A0, KbdAdcIrq);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -