单片机中映射表在UI设计中的应用
2019-04-15 19:28 发布
生成海报
在实际的单片机项目开发中,会设计到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},
{ S tage2_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;
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮