分类:
2008-10-31 09:44:58
3220_KeyPad 规划(3个GPIO 实现9 个key)
修改原因:
因客户经常有提出添加部分按键功能的要求,故直接调用硬件实现的 3*3 或 4*4 并不方便修改。另外也浪费了一些IO,所以我们设计了一用 3 个 GPIO 实现 9 个KEY 的电路,应该可以满足大部分用户的要求。
修改配置:
目前的修改,是直接替换掉了原先的KmiKey,所以要先打开 dpf\Config.h 中的 #define SMTK_KEY_MM220 才能生效。(现在保留了其他很多杂七杂八的客户的键盘扫描程序,如果此版本能够稳定,建议后续将其他程序砍掉,精简代码)
有修改到的文件:
\sdk\include\up\queue.h
\ dpf\ key.h
\ dpf\type.h
\ dpf\state.c
\ dpf\main.c
\ dpf\key.c
附档里有以上文件,是在
l 打开 \sdk\include\up\queue.h,找到 /* Key code definition */,将原先的
/* Key code definition */
#define PAL_KEYPAD_0 0x30
#define PAL_KEYPAD_1 0x31
#define PAL_KEYPAD_2 0x32
#define PAL_KEYPAD_3 0x33
#define PAL_KEYPAD_4 0x34
#define PAL_KEYPAD_5 0x35
#define PAL_KEYPAD_6 0x56
改成:
/* Key code definition */
//Refer to dpf\key.c smtkKeyTable
#define PAL_KEYPAD_0 0x30 //PAL_KEYPAD_UP
#define PAL_KEYPAD_1 0x31 //PAL_KEYPAD_DOWN
#define PAL_KEYPAD_2 0x32 //PAL_KEYPAD_LEFT
#define PAL_KEYPAD_3 0x33 //PAL_KEYPAD_RIGHT
#define PAL_KEYPAD_4 0x34 //PAL_KEYPAD_ENTER
#define PAL_KEYPAD_5 0x35 //PAL_KEYPAD_MENU
#define PAL_KEYPAD_6 0x4b //PAL_KEYPAD_VOL_UP
#define PAL_KEYPAD_7 0x
#define PAL_KEYPAD_8 0x5b //PAL_KEYPAD_SLIDE
特别注意:对这些 Key 值的定义,可以在dpf\key.c 中的smtkKeyTable 找到具体含义并随自己意愿设置。如果用户想增加自己的按键 PAL_KEYPAD_USER1,则可将PAL_KEYPAD_MENU 下的 “0,” 改成 “PAL_KEYPAD_USER1,”。然后在 \sdk\include\up\queue.h 中,讲 PAL_KEYPAD_8 定义为 0x36,这样用户就可以在自己的程序里面,使用 PAL_KEYPAD_USER1 去做自己的一系列操作。
l 打开\ dpf\ key.h
将//MM220 Key Code definitions
#define KEY_220_0 0xEE
#define KEY_220_1 0xED
#define KEY_220_2 0xEB
#define KEY_220_3 0xDE
#define KEY_220_4 0xDD
#define KEY_220_5 0xDB
#define KEY_220_6 0xDC
改成//MM220 Key Code definitions
#define KEY_220_0 0xEE
#define KEY_220_1 0xED
#define KEY_220_2 0xEB
#define KEY_220_3 0xDE
#define KEY_220_4 0xDD
#define KEY_220_5 0xDB
#define KEY_220_6 0xDA
#define KEY_220_7 0xD9
#define KEY_220_8 0xD8
#define KEY_220_9 0xD7
l 打开\ dpf\type.h
在 #define SMTK_MSG_ID_POWER_ON 0x5 后加上
#define SMTK_MSG_ID_KEY_UP 0x6
l 打开\ dpf\state.c
将 if (id == SMTK_MSG_ID_KEY_DOWN)
改成 if (id == SMTK_MSG_ID_KEY_DOWN || id == SMTK_MSG_ID_KEY_UP)
l 打开 \ dpf\main.c
将
if (keyNumber)
{
result = smtkStateMgrProcessMsg(SMTK_MSG_ID_KEY_DOWN, keyNumber, msgId);
if (result)
goto end;
}
改成:
if (keyNumber)
{
result = smtkStateMgrProcessMsg(SMTK_MSG_ID_KEY_DOWN, keyNumber, msgId);
if (result)
goto end;
holdKeyNumber = keyNumber;
lastKeyTime = PalGetClock();
}
else if (holdKeyNumber && PalGetDuration(lastKeyTime) > 550)
{
result = smtkStateMgrProcessMsg(SMTK_MSG_ID_KEY_UP, holdKeyNumber, msgId);
if (result)
goto end;
holdKeyNumber = 0;
lastKeyTime = PalGetClock();
}
l 因为 \ dpf\key.c 的改动较大,建议直接用附件覆盖!
文件:
220KeyPad規劃.rar
大小:
87KB
下载:
下载