键盘是我们经常能在嵌入式产品上看到的输入设备之一。
一般情况下,键盘通常会有指定的按键码。根据用户按下的按键来执行一些用户想要执行的功能。因此,这种模式就可以通过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])(); }