单片机中映射表在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;

}


  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值