打印

多级菜单索引号跳转不正常的问题

[复制链接]
1823|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
diaoguorong|  楼主 | 2012-5-9 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST, se, TE, ISP, ps
/*-------------------------定义结构体------------------------------*/
typedef struct
{
    uint8    KeyStateIndex;        //当前状态索引号
    uint8    KeyDownState;         //按下"向下"键时转向的状态索引号
    uint8    KeyUpState;           //按下"向上"键时转向的状态索引号
    uint8    KeySetState;          //按下"回车"键时转向的状态索引号
    void    (*CurrentOperate)();   //当前状态应该执行的功能操作
}KbdTabStruct;
/**********************************菜单结构数组***********************************/
KbdTabStruct const KeyTab[SIZE_OF_KEYBD_MENU] =
{   
   //Index  Down   Up    Set
       { 0,      0,      0,      1,      (*Display_Work)}, //(工作界面)
   
       { 1,      1,      1,      2,      (*Display_ALAr) }, //(AL.AR)
       { 2,      2,      2,      3,      (*One_Alr)        }, //(YES/NO第一路报警标志)
       { 3,      3,      3,      4,      (*ALr1_State0)  }, //(ALr1第一路报警值)
       { 4,      4,      4,      0,      (*Display_END)  } //(End设置结束)
};
报警标志按UP/DOWN键进行YES/NO选择,选择YES是能正常运行,选择NO时跳出当前状态,进入END设置结束,但是选择NO有时正常,有时先跳到索引号3再按SET键才跳到END设置结束,跳转程序如下:
/*----------------按Up或Down键设置第一路是否报警---------------*/
void One_Alr()
{
AlrControl[0].AlrEN = Flash_Read_Byte(0x06);
while(1)
{
  Y_N_Key_Scan(AlrControl[0].AlrEN);
  if (Flag == HIGH)         
  {
   DispStr(0x01,MenuStr[5]); //YES
   DispStr(0x05,MenuStr[20]);//ALr.1
   AlrControl[0].AlrEN = ENABLE;      
  }
  else         
  {
   DispStr(0x01,MenuStr[6]); //No
   DispStr(0x05,MenuStr[20]);//ALr.1
   AlrControl[0].AlrEN = DISABLE;
  }
  Set_Flag = Set_En();
  if(Set_Flag == 1)
   break;
  Time_Out_Flag = Process_Menu_Return();
  if(Time_Out_Flag == 1)
   break;
  OSWait(K_TMO,MS100); //延时100MS
}
if(Time_Out_Flag == 1)  KeyFuncIndex = 0;//超时时间到跳出菜单回到工作界面
else
{
  if (Flag == LOW)  KeyFuncIndex = 3; //当选择NO时执行索引号3所对应的SET键的操作
  else{} //否则,程序正常跳转
}   
Flash_Write_Byte(0x06,AlrControl[0].AlrEN);
}

不知道菜单操作过程中,这样跳转有没有问题?

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝