wudonghua的笔记 https://bbs.21ic.com/?137946 [收藏] [复制] [RSS] 单片机,嵌入式,上位机软件(VC,BCB)交流学习!

日志

人机界面设计方法

已有 886 次阅读2011-7-5 01:49 |系统分类:嵌入式系统| 人机界面智能化的方法讲解

人机界面设计方法


 


1、            结构体内容定义


typedef struct


{


u8     MeunIndex;         


u8     EscFlag;            


u8     UpFlag;            


     u8     DownFlag;          


     u8     LeftFlag;           


     u8     RightFlag;          


     u8     AddFlag;           


     u8     DecFlag;           


     u8     EnterFlag;         


u8     Modify;           


u8     DataMax;         


     u8     MoveMax;        


     void   (*CurrentOperate)();


}MEUNSTRUCT;


 




























































结构内容


说明


备注


MeunIndex


菜单索引


要求唯一


EscFlag


返回索引


 


UpFlag


向上索引


 


DownFlag


向下索引


 


LeftFlag


向左索引


 


RightFlag


向右索引


 


AddFlag


增加索引


 


DecFlag


减小索引


 


EnterFlag


确认索引


 


Modify


修改样式


0:菜单切换


1:金手指切换


2:密码菜单


3:数据修改菜单


DataMax


子菜单/数据个数


 


MoveMax


移动最大位数


 


CurrentOperate


执行函数指针


 


 


 


 


 


2、            使用细节介绍


 


//定义菜单数量为N


#define  MaxIndex    N                   


 


//定义函数指针


static void (*KeyFuncPtr)(void);


 


//函数声明


Void  MeunNo1(void);


Void  MeunNo2(void);


Void  MeunNo3(void);


Void  MeunNo10(void);


Void  MeunNo20(void);


Void  MeunNo30(void);


 


//菜单索引0保留给开机界面使用


 


//结构体赋值


const MEUNSTRUCT MeunStruct[MaxIndex] =


{


//中文定义


{  1, 1, 3, 2, 1, 1, 1, 1, 10, 0, 36, MeunNo1},


{  2, 1, 3, 2, 2, 2, 2, 2, 20, 0, 36, MeunNo2},


{  3, 1, 3, 2, 3, 3, 3, 3, 30, 0, 36, MeunNo3},


…//


{  10, 1, 3, 2, 0, 0, 0, 0, 10, 1, 36, MeunNo10},


…//


{  20, 2, 3, 2, 0, 0, 0, 0, 20, 2, 36, MeunNo20},


…//


{  30, 3, 3, 2, 0, 0, 0, 0, 30, 3, 36, MeunNo30},


//英文定义


{  31, 31, 33, 32, 31, 31, 31, 31, 40, 0, 36, MeunNo1},


{  32, 31, 33, 32, 32, 32, 32, 32, 50, 0, 36, MeunNo2},


{  33, 31, 33, 32, 33, 33, 33, 33, 60, 0, 36, MeunNo3},


…//


{  40, 31, 3, 2, 0, 0, 0, 0, 40, 1, 36, MeunNo10},


.//


{  50, 32, 3, 2, 0, 0, 0, 0, 50, 2, 36, MeunNo20},


…//


{  60, 33, 3, 2, 0, 0, 0, 0, 60, 3, 36, MeunNo30},


}; 


 


//函数定义


Void  MeunNo1(void)


{



}


Void  MeunNo2(void)


{



}


Void  MeunNo3(void)


{



}


Void  MeunNo10(void)


{



}


Void  MeunNo20(void)


{



}


Void  MeunNo30(void)


{



}


 


//使用处理


void  KeyService(void)


{


     //定义索引号


Static u8 Index;


//根据菜单的修改样式执行相应操作


Switch(MeunStruct[Index-1].Modify)


{


    Case 0 ://界面切换


       Switch(KeyVal)


       {


           Case F1: Index = MeunStruct[Index-1].EscFlag; break;


           Case F2: Index = MeunStruct[Index-1].UpFlag;  break;


           ...


           Default: break;


}


Case 1 :// 金手指切换


Case 2 ://密码菜单


Case 3 ://数据修改菜单


Default: break;


}


//取当前函数地址


KeyFuncPtr=MeunStruct[Index-1].CurrentOperate; 


//执行函数


(*KeyFuncPtr)();


//清指针                               


KeyFuncPtr = NULL;


//清键值                         


KeyVal = 0;


}


备注:在中英文切换时只修改菜单索引偏移量即可,


金手指切换:是指子菜单选择


 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)