击上方“嵌入式应用研究院”,选择“置顶/星标公众号”
键盘是我们经常能在嵌入式产品上看到的输入设备之一。
一般情况下,键盘通常会有指定的按键码。根据用户按下的按键来执行一些用户想要执行的功能。因此,这种模式就可以通过switch语句来进行处理。但是,如果当我们设计的应用程序上拥有很多个界面的时候,有些按键只有在特定的界面上才生效的情况下,这时候使用函数指针则会比switch语句更为优雅。在这种情况下,推荐使用函数指针的二维数组的形式来实现,以下是一个很好的例子:
#define PAGE_NUMBER 12
#define KEY_NUMBER 5
int function_f1_op(void);
int function_f2_op(void);
int function_f3_op(void);
int function_f4_op(void);
...
int function_null_op(void);
int function_menu_op(void);
/*跳转表定义*/
static int (*const jump_table[page][key])(void) =
{
{function_f1_op, function_f2_op, function_f3_op, function_f4_op},
{function_f5_op, function_f6_op, function_f7_op, function_f8_op},
...
{function_esc_op, function_enter_op, function_menu_op ..., function_tab_op}
};
/*按键处理函数*/
int key_handler(uint8_t page,uint8_t key)
{
assert (key < KEY_NUMBER);
assert( page < PAGE_NUMBER);
return (*jump_table[page][key])();
}