单片机中映射表在UI设计中的应用
来源:互联网 发布:测试端口通不通命令 编辑:程序博客网 时间:2024/06/01 09:09
在实际的单片机项目开发中,会设计到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;
}
- 单片机中映射表在UI设计中的应用
- Hibernate中的inverse在表关系映射中经常应用
- Hibernate中的inverse在表关系映射中经常应用,
- 单片机在计算器中的应用
- 联合体在单片机中的应用
- 联合体在单片机中的应用
- 明亮的色彩如何应用在UI设计中?
- F0位在单片机编程中的应用
- 状态机思路在单片机程序设计中的应用
- 单片机在工业应用中的前景
- 时分多线程在单片机系统中的应用
- 状态机思路在单片机程序设计中的应用
- 状态机思路在单片机程序设计中的应用
- Appium 在 Android UI 测试中的应用
- 如何在Ubuntu QML应用中设计像微信对话那样的UI
- C语言在单片机开发过程中的应用
- 时间片轮询模式在构建单片机实时系统中的应用
- 时间片轮转算法在单片机程序设计中的应用
- Modo教程合集44部
- Lua基础之字符串
- 用CSS3设计响应式导航菜单
- SQL Server,MySQL,Oracle三者的区别
- 数组排序和常用类
- 单片机中映射表在UI设计中的应用
- MySQL 输入密码闪退
- java 异常
- Android睡眠唤醒机制--Kernel态
- Hive 字符串函数
- 史上最简单清晰的红黑树讲解
- java.util.zip.ZipException: invalid LOC header (bad signature)
- pom.xml报错:web.xml is missing and <failOnMissingWebXml> is set to true
- NYOJ 首字母变大写