在网上找了一个例子,
	
这是对结构体的定义部分
#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)();     //执行当前的按键操作
}
	
这部分红色有些不太明白
	

 
					
				
 
			
			
			
						
			 额好吧,我还以为有人回贴讨论关于结构体在单片机菜单中的应用呢,版主
额好吧,我还以为有人回贴讨论关于结构体在单片机菜单中的应用呢,版主										 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

