在网上找了一个例子,
这是对结构体的定义部分
#define MENU_SIZE 25 //菜单长度
volatile unsigned char KeyFuncIndex=0; //存放当前的菜单索引
void (*KeyFuncPtr)(); //定义按键功能指针
//定义类型
typedef struct
{
unsigned char KeyStateIndex; //当前的状态索引号
unsigned char KeyUpState; //按下向左键时的状态索引号
unsigned char KeyDownState; //按下向右键时的状态索引号
unsigned char KeyLiftState; //按下向左键时的状态索引号
unsigned char KeyRightState; //按下向右键时的状态索引号
unsigned char KeyEscState; //按下返回键时的状态索引号
unsigned char KeyEnterState; //按下确定键时的状态索引号
void (*CurrentOperate)(); //当前状态应该执行的功能操作
} StateTab;
根据按键操作执行相应的菜单操作,并控制按键计数 用于调节时间,KeyFuncIndex=20的时候调节时间 KeyFuncIndex=20的时候调节日期与星期, 并调用函数Timer_Convt
void MenuOperate(void)
{
if(key_value==ENTER)
{KeyFuncIndex=KeyTab[KeyFuncIndex].KeyEnterState;}
if(key_value==ESC)
{KeyFuncIndex=KeyTab[KeyFuncIndex].KeyEscState;}
if(key_value==LEFT)
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyLiftState;
if(KeyFuncIndex==20)
++hour;
if(KeyFuncIndex==19)
++year;
}
if(key_value==RIGHT)
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyRightState;
if(KeyFuncIndex==20)
++second;
if(KeyFuncIndex==19)
++day;
}
if(key_value==UP)
{KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState;}
if(key_value==DOWN)
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDownState;
if(KeyFuncIndex==19)
++week;
}
if(key_value==SURE)
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDownState;
if(KeyFuncIndex==20)
++minute;
if(KeyFuncIndex==19)
++month;
}
Timer_Convt();
//下面是执行按键的操作
KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate;
(*KeyFuncPtr)(); //执行当前的按键操作
}
这部分红色有些不太明白
我要赚赏金
