单片机中映射表在UI设计中的应用

在实际的单片机项目开发中,会设计到LCD的UI设计。如果我们只用if else语句去完成跳转逻辑,那么编写的代码会显得复杂难懂,如果利用映射表,这种弊端就会得到很好的改善。

假设现在有9个场景,分别对应我们小键盘上的9个数字键,另外还有Up Down Left Right 4个控制键,初始状态是小键盘1,那么通过上下左右,我们的场景会来回切换,用代码表示如下:


# 1.定义数据结构 映射表

typedef enum

{

stage1=0,

stage2,

stage3,

stage4,

stage5,

stage6,

stage7,

stage8,

stage9,

}SCENE;


typedef struct {

void (*current_operate)(); #当前场景的处理函数

SCENE Index;                   #当前场景的标签

SCENE Up;                        #按下Up键跳转的场景

SCENE Down; #按下Down键跳转的场景

SCENE Right; #按下Left键跳转的场景

SCENE Left; #按下Right键跳转的场景

}STAGE_TAB;


STAGE_TAB stage_tab[]={

#.    operate       Index    Up     Down    Left   Right   

{Stage1_Handler,  stage1,  stage4,  stage7,  stage3, stage2},

{Stage2_Handler,  stage2,  stage5,  stage8,  stage1, stage3},

{Stage3_Handler,  stage3,  stage6,  stage9,  stage2, stage1},

{Stage4_Handler,  stage4,  stage7,  stage1,  stage6, stage5},

{Stage5_Handler,  stage5,  stage8,  stage2, stage4,  stage6},

{Stage6_Handler,  stage6,  stage9,  stage3, stage5,  stage4},

{Stage7_Handler,  stage7,  stage1,  stage4, stage9,  stage8},

{Stage8_Handler,  stage8,  stage2,  stage5, stage7,  stage9},

{Stage9_Handler,  stage9,  stage3,  stage6, stage8,  stage7},

};

# 2.定义两个变量保存当前场景和上一个场景

char current_stage=stage1;

char prev_stage=current_stage;

# 3.按下Up按键 跳转到指定场景current_stage的值根据映射表改变

current_stage =stage_tab[current_stage].Up;

# 4.场景改变后 根据映射表执行相应的函数Handler

if(current_stage!=prev_stage)

{

stage_tab[current_stage].current_operate();

prev_stage=current_stage;

}


猜你喜欢

转载自blog.csdn.net/appleJanLinux/article/details/78461381