其实很简单,希望你耐心看再看数再仔细想再实践下
你明白指向函数的指针就会写了,其实并不难的,核心的就是下面两个数据结构。 /* 菜单结构体 1. 2. 3. 键值处理函数 内核 */ typedef struct { void (* Key1Function) (void); void (* Key2Function) (void); void (* Key3Function) (void); void (* CoreFunction) (void); }StateDef;
//结构体数组 StateDef code State[31]= { /*0*/ { NULL , NULL , NULL , NULL }, /*1*/ .{ Key1State1 , Key2State1 , Key3State1 , CoreState1 }, . . /*30*/............................. }; 按照上面的数据结构,多少状态都放的下(MCU ROM范围内),注意两点,一状态切换时候变量,标志的清零,以及外部函数的调用,另外使用上面的结构以后程序增加新的函数也很方便的,写好的函数只要往结构体数组添加就可以了。
main函数执行的时候象下面这样写就可以了。 void main (void) { GetKey();
switch(KeyValue) { case Key1 : if(State[CurrentState].Key1Function != NULL) State[CurrentState].Key1Function(); break; case Key2 : if(State[CurrentState].Key2Function != NULL) State[CurrentState].Key2Function(); break; case Key3 : if(State[CurrentState].Key3Function != NULL) State[CurrentState].Key3Function(); break; } } |
|