一、新建一个结构体,需要什么按键,加入对应内容。
typedef struct
{
  unsigned char current;
  unsigned char up;
  unsigned char down;
  unsigned char enter;
  ussigned char back;
  void (*current_operation)();
} key_table;
二、定义。菜单的按键连接。
key_table const table[7]=
{
 {0,1,1,1,1,(*fun0)},
 {1,(*fun1)},
 {2,(*fun2)},
 {3,(*fun3)},
 {4,(*fun4)},
 {5,(*fun5)}, 
 {6,(*fun6)},  
};
三、定义变量
INT8U func_index=0;
void (*current_operation_index)();
四、
主菜单中的
while(1)
{
    key_temp=keyscan(key()); 
    switch(key_temp)
    {
      case 10:func_index=table[func_index].enter;break;
      case 11:showtime();func_index=table[func_index].back;break; 
      default:func_index=table[func_index].current;break;
    } 
current_operation_index=table[func_index].current_operation;
(*current_operation_index)();
}
五、注意:
在CVAVR或某些编译器中:不需要星号。如下。
key_table const table[7]=
{
 {0,1,1,1,6,(fun0)},
 {1,1,2,2,0,(fun1)},
 {2,1,3,3,1,(fun2)},
 {3,1,4,4,2,(fun3)},
 {4,1,5,5,3,(fun4)},
 {5,1,6,6,4,(fun5)}, 
 {6,1,0,0,5,(fun6)},  
};