一种通用嵌入式LCD页面切换方法
一种通用嵌入式LCD页面切换方法
在资源较匮乏的嵌入式系统上,无法运行操作系统,此种情形下,通过按键控制LCD界面的切换时,若不采取一定的逻辑框架,在需求变动时,程序逻辑改动较大。页面逐渐增多时,前期若未设计好框架通过性,后期发动成本和难度呈指数级别上升,这时介绍一种较通用的界面切换框架,在需求改动时,只要更改数组中的部分变量值便可满达到要求。
以我之前做完的一个产品为例该产品有一块小屏幕,显示系统信息,以数字和图片的方式显示,外部按键有上、下、左、右、确定、返回六个。界面部分包括主界面和内部菜单,内部菜单最深为三级。开始只能确定部分内部菜单,剩下需要后期根据实际使用情况再确定。设计一种类似于查表的方式,确定相应按键按下后需要切换至的页面。
流程非常简单,代码逻辑也很简单,把主要工作都放在页面切换的数据结构体中了。核心代码如下:
typedef void (*pfn_page)();
Int g_curPage = PAGE_MAIN;
struct sPAGE_SWITCH
{
int iCurPageIndex;//当前显示页面
int iKeyIndex;//接收到的按键
pfn_page fnNewPage;//将要切换至的页面
};
const sPAGE_SWITCH s_page_info[] =
{//以主页面为例
{PAGE_MAIN, KEY_UP, page_1},
{PAGE_MAIN, KEY_DOWN, page_2},
{PAGE_MAIN, KEY_LEFT, page_3},
{PAGE_MAIN, KEY_RIGHT, page_4},
{PAGE_MAIN, KEY_ESC, page_5},
{PAGE_MAIN, KEY_ENTER, page_6},
...
};
//页面切换函数,两个参数分别为当前页面与按键编号
void switch_page(int cur_page, int key_index)
{
for(int i = 0; i < array_num(s_page_info); i++)
{
if(cur_page == s_page_info[i].iCurPageIndex
&& key_index == s_page_info[i].iKeyIndex)
{
s_page_info[i].fnNewPage();
break;
}
}
}
//页面响应函数
void page_1()
{
...一些显示页面信息的操作
g_curPage = PAGE_1;
}
由当前页面,按键的编号,可以惟一确定将要切换至的页面。结构体数组中存储了所有页面在按下按键消息后,页面切换信息。如果系统有20个页面和6个按键,则结构体数组最多情况下会有20*6=120个成员。
页面切换函数在按键消息发生后被调用,函数从结构体数组中查找该切换到哪个页面,并执行相应的切换函数,自动完成页面切换。
本种方式实现的切换优势在增加、减少页面、修改页面切换顺序或机制后,不需要修改任何代码,只修改结构体数组的信息即可。可以很好应对需求变更,具有较好的通用性。
一种通用嵌入式LCD页面切换方法相关推荐
- android epg界面实现,一种EPG引擎及页面解析方法与流程
本发明涉及浏览器页面解析领域,更具体的说是涉及一种EPG引擎及页面解析方法. 背景技术: 传统的浏览器客户端当中,需要消耗相当大的资源和文档对象模型接口进行交互,通常是用JS库.参照图1,浏览器解析页 ...
- SQL之一种通用的连续性问题处理方法【重分组算法】--HiveSQL面试题33
目录 0 需求分析 1 数据准备 2 数据分析 3 小 结 0 需求分析 数据如下: wang 2020-05-01 wang 2020-05-01 wang 2020-05-01 wang 2020 ...
- Makefile之大型工程项目子目录Makefile的一种通用写法
原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8902133,作者:gqb666 管理Linux环境下的C ...
- 一种通用递归深度检测技术 - 基于栈帧内容的检测 - Golang语言描述
背景 在递归处理的调用中,在具体的工程实践中一般会引入递归深度检测,防止因为错误的数据造成系统的资源极大的消耗,本方法定义了一种通用简单的递归检查方法. 步骤 实现函数RecursiveDepthCh ...
- 导航栏不变,切换局部页面的方法
前言: 在写项目的时候,一直让我很头疼的问题,就是我的项目的导航栏不需要改变,但是点击导航栏需要切换页面.接下来我总结一下我能够想到的方法! 目录: 1.iframe标签嵌入页面+自定义属性 2.利用 ...
- 嵌入式linux 无线网卡,一种基于嵌入式Linux的无线网卡的制作方法
本实用新型涉及无线网卡技术领域,具体为一种基于嵌入式Linux的无线网卡. 背景技术: 随着移动通信和便携通信的发展,无线局域网WLAN应用而生,日渐普及,嵌入式系统的无线局域网接入可以实现对嵌入式系 ...
- 一种通用的数据仓库分层方法
0x00 概述 数据分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更易理解和使用.而目前网络中大部分可以被检索到相关文章只是简单地提及数据分层的设计,或缺少明确而详细的说明, ...
- 嵌入式linux仪器,一种基于嵌入式Linux设备双系统的启动方法
一种基于嵌入式Linux设备双系统的启动方法 [技术领域] [0001]本发明涉及一种基于嵌入式Linux设备双系统的启动方法. [背景技术] [0002]Linux操作系统特别是其嵌入式系统由于其源 ...
- python爬虫如何从一个页面进入另一个页面-Python爬虫信息输入及页面的切换方法...
实现网页的键盘输入操作 from selenium.webdriver.common.keys import Keys 动态网页有时需要将鼠标悬停在某个元素上,相应的列表选项才能显示出来. 而爬虫在工 ...
最新文章
- muduo之channel
- Effective C++ --2 构造/析构/赋值运算
- 计算机无法开机按了f2,Win7系统开机需要按F2怎么解决?
- 实验九 根据材料编程
- 【linux 06】 linux中的用户权限、文件权限与目录权限
- python中string数据库_python – 将字节字符串保存到数据库中的v...
- P2084 进制转换
- 2016年第9本:系统之美
- 深圳数字人民币专项资金至3月末已累计发放1.96亿元
- (超简单)Nginx状态统计模块
- 蓝桥杯 ALGO-98 算法训练 数位分离
- jenkins教程_4 Docker+SpringCloud
- 单片机中断交通灯c语言程序设计,基于c语言单片机交通灯
- Android MDM 参考资料
- 计算机桌面不同步,电脑时间不同步怎么回事 电脑时间不能自动更新如何修复...
- 英语的计算机求职回信,2020年计算机英文求职信范文模板
- 猜价格游戏java_猜商品价格游戏程序.java
- ddmmyy日期格式是多少_如何用SAS读取月份为英文缩写并且格式为ddmmyy的日期数据...
- Composure获取子层级图像:使用变换通道
- UEFI EDK2 遇到的问题集合
热门文章
- V-Ray渲染教程:又快又好的V-Ray渲染参数!
- 手机AR APP开发之性能优化
- JAVA版B2B2C商城源码 多商家入驻商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 直播商城 短视频商城 springboot商城 spring boot商城
- 地图web开发技术选型
- 【每日知识】计时器方法
- 对希拉里泄露邮件进行简单分析的结果
- PowerDesigner 使用教程
- Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法
- 解决RecyclerView中多个EditText无法长按复制粘贴的问题
- 安卓期末大作业——手账本