drv_kbd.c

来自「基于MSP430FG4618MCU的铭正同创LCD驱动程序。」· C语言 代码 · 共 116 行

C
116
字号
#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 + =
减小字号Ctrl + -
显示快捷键?