C语言lcd上创建菜单的对象化实例分享

Linuxer 2017-11-14 05:23 次阅读

 这是我十三年前读研究生的时候写的系列文章《C语言嵌入式系统编程修炼》系列文章中的一小节,是一个用面向对象,把LCD上面菜单,对象化的例子。

 菜单操作  无数人为之绞尽脑汁的问题终于出现了,在这一节里,我们将看到,在C语言中哪怕用到一丁点的面向对象思想,软件结构将会有何等的改观!  笔者曾经是个笨蛋,被菜单搞晕了,给出这样的一个系统:

  要求以键盘上的"← →"键切换菜单焦点,当用户在焦点处于某菜单时,若敲击键盘上的OK、CANCEL键则调用该焦点菜单对应之处理函数。我曾经傻傻地这样做着:

/* 按下OK键 */void onOkKey(){ /* 判断在什么焦点菜单上按下Ok键,调用相应处理函数 */ Switch(currentFocus) {  case MENU1:   menu1OnOk();   break;  case MENU2:   menu2OnOk();   break;  … }}/* 按下Cancel键 */void onCancelKey(){ /* 判断在什么焦点菜单上按下Cancel键,调用相应处理函数 */ Switch(currentFocus) {  case MENU1:   menu1OnCancel();   break;  case MENU2:   menu2OnCancel();   break;  … }}

  终于有一天,我这样做了:

/* 将菜单的属性和操作"封装"在一起 */typedef struct tagSysMenu{ char *text; /* 菜单的文本 */ BYTE xPos; /* 菜单在LCD上的x坐标 */ BYTE yPos; /* 菜单在LCD上的y坐标 */ void (*onOkFun)(); /* 在该菜单上按下ok键的处理函数指针 */ void (*onCancelFun)(); /* 在该菜单上按下cancel键的处理函数指针 */}SysMenu, *LPSysMenu;

  当我定义菜单时,只需要这样:

static SysMenu menu[MENU_NUM] ={ {  "menu1", 0, 48, menu1OnOk, menu1OnCancel } , {  " menu2", 7, 48, menu2OnOk, menu2OnCancel } , {  " menu3", 7, 48, menu3OnOk, menu3OnCancel } , {  " menu4", 7, 48, menu4OnOk, menu4OnCancel } …};

  OK键和CANCEL键的处理变成:

/* 按下OK键 */void onOkKey(){  menu[currentFocusMenu].onOkFun(); }/* 按下Cancel键 */void onCancelKey(){ menu[currentFocusMenu].onCancelFun(); }

  程序被大大简化了,也开始具有很好的可扩展性!我们仅仅利用了面向对象中的封装思想,就让程序结构清晰,其结果是几乎可以在无需修改程序的情况下在系统中添加更多的菜单,而系统的按键处理函数保持不变。  面向对象,真神了!

热门推荐

原文标题:C语言对象化设计的实例——LCD菜单

文章出处:【微信号:LinuxDev,微信公众号:Linuxer】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

OPPO最新旗舰Find X发布,OLED中国市场潜力有多大

目前,OLED屏幕制造市场以三星和LG两家坐拥龙头,LG所生产OLED屏主要以大尺寸为主,为下游大屏....

发表于 06-23 10:12 110次 阅读
OPPO最新旗舰Find X发布,OLED中国市场潜力有多大

预计2021年AMOLED产能相比2018年翻倍,三星成最大受益者

2018年全面屏手机越来越多,中低端全面屏手机往往会使用LCD面板或者国产AMOLED面板,高端手机....

发表于 06-22 16:04 75次 阅读
预计2021年AMOLED产能相比2018年翻倍,三星成最大受益者

解决这五大问题后 中国OLED产线将会明显提升

在不到一个月的时间内,维信诺6代线、柔宇类6代线、天马6代线先后启动运行、点亮投产和量产出货,而去年....

的头像 芯智讯 发表于 06-22 15:17 329次 阅读
解决这五大问题后 中国OLED产线将会明显提升

教你如何编写优质的嵌入式C程序?

市面上介绍C语言以及编程方法的书数目繁多,但对如何编写优质嵌入式C程序却鲜有介绍,特别是对应用于单片....

的头像 玩转单片机 发表于 06-22 14:23 166次 阅读
教你如何编写优质的嵌入式C程序?

VKS232静态扫描型LCD控制驱动电路中文资料详细

VKS232是116 SEG×2 COM 点阵式存储器映射双模式 LCD驱动电路。是一款静态扫描型L....

发表于 06-22 08:00 23次 阅读
VKS232静态扫描型LCD控制驱动电路中文资料详细

VKS118双模式LCD驱动电路中文资料下载

VKS118 是 118 SEG×2 COM点阵式存储器映射双模式 LCD驱动电路。是一款静态扫描型....

发表于 06-22 08:00 25次 阅读
VKS118双模式LCD驱动电路中文资料下载

如何创建 UEFI LCD与运行 LCD 应用程序(1)

创建 UEFI LCD 应用程序、运行 LCD 应用程序(第一部分)

的头像 英特尔 Altera视频 发表于 06-22 04:24 99次 观看
如何创建 UEFI LCD与运行 LCD 应用程序(1)

请问为什么TMS320DM36x TI官方开发板 LCD不响应USB鼠标?

发表于 06-22 03:10 22次 阅读
请问为什么TMS320DM36x TI官方开发板 LCD不响应USB鼠标?

如何创建 UEFI LCD与运行 LCD 应用程序(2)

创建 UEFI LCD 应用程序、运行 LCD 应用程序(第二部分)

的头像 英特尔 Altera视频 发表于 06-22 01:50 80次 观看
如何创建 UEFI LCD与运行 LCD 应用程序(2)

请问6467T Raw capture mode应用在什么场合?

发表于 06-22 00:19 18次 阅读
请问6467T Raw capture mode应用在什么场合?

请问使用if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2)==1)和if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2))的区别?

发表于 06-21 19:11 19次 阅读
请问使用if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2)==1)和if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2))的区别?

程序员对内存的清晰理解

在C和C++语言开发中,指针、内存一直是学习的重点。因为C语言作为一种偏底层的中低级语言,提供了大量....

的头像 嵌入式ARM 发表于 06-21 15:17 212次 阅读
程序员对内存的清晰理解

飞思卡尔最新汽车LCD仪表板

观看采用飞思卡尔9S08LG32设计的最酷汽车LCD仪表板

的头像 Freescale视频 发表于 06-21 14:50 130次 观看
飞思卡尔最新汽车LCD仪表板

苹果OLED新机面板采购量约7000万台!LCD机型出货延迟

CINNO外媒资讯 苹果将于今年秋季推出3款新型iPhone手机,其中搭载6.46吋OLED面板的大....

的头像 CINNO 发表于 06-21 09:07 1152次 阅读
苹果OLED新机面板采购量约7000万台!LCD机型出货延迟

请问am3358 pru的“16-Bit Parallel Capture”功能可以配置为只捕捉1位吗?

发表于 06-21 02:27 20次 阅读
请问am3358 pru的“16-Bit Parallel Capture”功能可以配置为只捕捉1位吗?

请问为什么三个虚拟导航按键没有被显示?

发表于 06-21 02:10 40次 阅读
请问为什么三个虚拟导航按键没有被显示?

用FPGA DIY开发板控制LCD1602滚动显示

wang1113的作业LCD1602滚动显示视频。

的头像 英特尔 Altera视频 发表于 06-20 13:16 107次 观看
用FPGA DIY开发板控制LCD1602滚动显示

富士康在美买楼建LCD面板生产线的计划

据外媒近日报道,代工巨头富士康近日在美国威斯康星州密尔沃基买下一栋大楼,未来这里将成为富士康北美总部....

的头像 芯智讯 发表于 06-20 11:46 487次 阅读
富士康在美买楼建LCD面板生产线的计划

LGD坡州10.5代线(P10)工厂将全线打造OLED生产线

而且京东方、华星光电等10.5代线的OLED决策也对LGD有所影响。中国企业在发布WOLED、印刷显....

的头像 CINNO 发表于 06-20 09:39 415次 阅读
LGD坡州10.5代线(P10)工厂将全线打造OLED生产线

数字钟的proteus仿真电路及C语言程序设计的详细中文资料概述

数字钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无....

发表于 06-20 08:00 37次 阅读
数字钟的proteus仿真电路及C语言程序设计的详细中文资料概述

全球LCD供应瓶颈局面下,LGD将生产线转变成OLED生产线

LG Display最初计划在该新工厂生产10.5代LCD,但是随后将生产线转变成了OLED生产线。....

发表于 06-19 11:00 58次 阅读
全球LCD供应瓶颈局面下,LGD将生产线转变成OLED生产线

C语言测试的经典嵌入式面试题详细中文概述

C 语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在....

发表于 06-19 08:00 111次 阅读
C语言测试的经典嵌入式面试题详细中文概述

嵌入式软件可靠性设计三方面的考虑:防错,判错,容错的详细概述

设备的可靠性涉及多个方面:稳定的硬件、优秀的软件架构、严格的测试以及市场和时间的检验等等。这里着重谈....

的头像 玩转单片机 发表于 06-18 12:40 217次 阅读
嵌入式软件可靠性设计三方面的考虑:防错,判错,容错的详细概述

请问l138 的dsp的c语言中嵌入asm 出错的原因是什么?

发表于 06-15 06:21 284次 阅读
请问l138 的dsp的c语言中嵌入asm 出错的原因是什么?

介绍LCD驱动+RTC实现显示

利用RL78/G13内部RTC,在nokia5110LCD上显示。

的头像 Renesas视频 发表于 06-14 11:13 169次 观看
介绍LCD驱动+RTC实现显示

实现LCD显示RTC实时时钟

还有优化的余地 比如说 其实大部分情况下都是只更新秒时钟的显示 液晶屏有问题 有些地方显示不....

的头像 Renesas视频 发表于 06-14 08:13 263次 观看
实现LCD显示RTC实时时钟

介绍了解LCD直接驱动

瑞萨电子公司MCU产品中心吴频吉为大家讲述:LCD直接驱动解决方案。

的头像 Renesas视频 发表于 06-14 05:14 195次 观看
介绍了解LCD直接驱动

请问28335 C语言和汇编混合编程时从汇编返回C语言的方法是怎样的?

发表于 06-14 02:13 37次 阅读
请问28335  C语言和汇编混合编程时从汇编返回C语言的方法是怎样的?

请问C#的WinForn程序如何打包?

发表于 06-13 15:59 210次 阅读
请问C#的WinForn程序如何打包?

京东方CEO:中美贸易战对京东方显示事业没有太大影响

陈炎顺称,中美贸易战对京东方显示事业的稳定和市场均没有太大影响,京东方目前所涉及的产线有两个大类,一....

发表于 06-13 14:49 456次 阅读
京东方CEO:中美贸易战对京东方显示事业没有太大影响

OLED似乎供应过剩,预计2019年OLED支出将下滑31%

现在问题来了,OLED似乎供应过剩,可能价格会下降。iPhone X没有像三星预料的那样畅销,而三星....

发表于 06-13 14:47 112次 阅读
OLED似乎供应过剩,预计2019年OLED支出将下滑31%

推出的Uflex,其重复精度达8µm精度达50µm,

在工具方面,环球仪器本身具备庞大的工具库,如各种吸嘴,厂家不用担心找不到合适的工具。若果现有的工具不....

的头像 环仪精密设备制造上海 发表于 06-13 11:16 298次 阅读
推出的Uflex,其重复精度达8µm精度达50µm,

苹果预计今年秋季发布的6.1英寸iPhone将使用MLCD+显示屏,或是苹果首款配备LCD全面屏的产品

据韩国媒体报道,苹果公司预计今年秋季发布的6.1英寸iPhone将使用LG最新G7 ThinQ手机相....

的头像 39度创意研究所 发表于 06-13 10:46 901次 阅读
苹果预计今年秋季发布的6.1英寸iPhone将使用MLCD+显示屏,或是苹果首款配备LCD全面屏的产品

微球:仅微电子领域中国每年就要进口几百亿元人民币

微球,现代工业的基础材料,被国外企业垄断。仅微电子领域,中国每年就要进口价值几百亿元人民币的微球。

发表于 06-13 10:41 89次 阅读
微球:仅微电子领域中国每年就要进口几百亿元人民币

为何MLCD+ 显示技术会被捧为神坛?MLCD+ 技术究竟是什么?

在智能手机领域中,机友们对于 OLED 和 LCD 的争论似乎是一场永无休止的战争。有意思的是,LG....

的头像 39度创意研究所 发表于 06-13 09:46 471次 阅读
为何MLCD+ 显示技术会被捧为神坛?MLCD+ 技术究竟是什么?

如何对一个大的项目进行模块化编程

当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干。你需要和你的小组成员分工合作,一起....

的头像 玩转单片机 发表于 06-11 17:06 552次 阅读
如何对一个大的项目进行模块化编程

C语言里的铁布衫——const

相传在C的世界里出现了一件极品装备(铁布衫)const、它的出现,让天下的所有刺客和黑客都闻风丧胆,....

的头像 嵌入式ARM 发表于 06-11 16:26 325次 阅读
C语言里的铁布衫——const

C语言入门经典(第四版)

发表于 06-11 12:58 441次 阅读
C语言入门经典(第四版)

C语言深入理解系列之专一王子:volatile

每个变量和其名字一样善变,有时候它善变是发自内心的,有时候是外部因素决定的,只有volatile变量....

的头像 嵌入式ARM 发表于 06-11 11:13 299次 阅读
C语言深入理解系列之专一王子:volatile

LCD仿真控制的详细介绍和程序资料概述

本文档的主要内容详细介绍了LCD仿真控制和程序的资料概述

发表于 06-11 08:00 41次 阅读
LCD仿真控制的详细介绍和程序资料概述

请问哪里能找到C2000的C语言的指令集?

发表于 06-11 04:53 78次 阅读
请问哪里能找到C2000的C语言的指令集?

4个重要算法C语言实现源代码

4个重要算法C语言实现源代码

发表于 06-10 08:00 112次 阅读
4个重要算法C语言实现源代码

初学C语言 先搞懂这些基础知识再谈深度学习吧!

很多初学者都会问我“我想学C,该怎么开始呢?”今天我们就来聊一聊属于初学者必须懂的知识希望小伙伴们能....

的头像 C语言编程学习 发表于 06-09 10:41 926次 阅读
初学C语言 先搞懂这些基础知识再谈深度学习吧!

C语言模块化程序设计需理解概念

等类似问题。面对这些问题,我们只能发出由衷的感慨:世界上还有很多有意义的事情等着我们去消化摄入的食物....

的头像 嵌入式ARM 发表于 06-08 14:49 409次 阅读
C语言模块化程序设计需理解概念

华硕 ROG 手机上手体验:名副其实的游戏手机

当华硕宣布将推出 ROG 品牌的游戏手机时,包括我自己在内,不少用户担心华硕究竟能不能做出一款配得上....

的头像 39度创意研究所 发表于 06-08 09:33 1183次 阅读
华硕 ROG 手机上手体验:名副其实的游戏手机

单片机C语言程序设计的20例基础程序设计详细资料概述

本文档介绍的主要内容是20例基于单片机C语言的基础程序设计详细资料概述

发表于 06-08 08:00 151次 阅读
单片机C语言程序设计的20例基础程序设计详细资料概述

DLP拼接屏与LCD拼接屏有什么区别

DLP是"Digital Light Processing"的缩写,即为数字光处理,也就是说这种技术....

的头像 讯维官方公众号 发表于 06-07 11:16 466次 阅读
DLP拼接屏与LCD拼接屏有什么区别

通过AT89S52单片机来实现俄罗斯方块游戏的设计详细中文概述

本设计是通过AT89S52单片机来实现俄罗斯方块游戏的设计,使用C语言进行编程,并通过Proteus....

发表于 06-07 08:00 61次 阅读
通过AT89S52单片机来实现俄罗斯方块游戏的设计详细中文概述

基于51单片机的激光雕刻机资料的详细资料概述

基于51单片机的激光雕刻机c语言程序设计及相应电路图的设计详细资料概述

发表于 06-07 08:00 62次 阅读
基于51单片机的激光雕刻机资料的详细资料概述

C语言的指针的详细学习资料(中文版)

对C语言部分的指针写的很细,值得学习中文版免费下载

发表于 06-06 08:00 77次 阅读
C语言的指针的详细学习资料(中文版)

ILI9341V LCD单片机驱动介绍的详细资料概述

ILI9341V是一种具有240RGBX320点分辨率的A TFT液晶显示器的262144色单片SO....

发表于 06-06 08:00 66次 阅读
ILI9341V LCD单片机驱动介绍的详细资料概述

JDI/LGD正面临面板「漏光」问题,6.1吋iPhone传11月才开卖

另外,日本网站CoRRiENTE.top报导,俄罗斯情报网站Wylsa公开了据称是预计今年开卖的次代....

的头像 CINNO 发表于 06-05 09:59 490次 阅读
JDI/LGD正面临面板「漏光」问题,6.1吋iPhone传11月才开卖

OLED技术新突破 OLED寿命延长15%

近日,德国和西班牙的科学家在OLED技术上又有了新的突破,找到了让OLED屏幕更节能,寿命更长的方法....

的头像 高工LED 发表于 06-04 17:03 495次 阅读
OLED技术新突破 OLED寿命延长15%

廉价版iPhone X可能延期发售,屏幕遇到‘漏光’的技术问题

此前的消息指出,苹果将在今年推出一款廉价版iPhone X,采用统一的‘刘海屏’造型,但屏幕并非三星....

发表于 06-04 09:50 204次 阅读
廉价版iPhone X可能延期发售,屏幕遇到‘漏光’的技术问题

iPhone6.1 英寸“特惠机”将采用LCD屏幕,推迟到十一月上市

另外,要知道目前的 iPhone X 的“刘海”全面屏可以和其他厂家的产生差异化,外观上看主要是下巴....

的头像 ZEALER订阅号 发表于 06-04 09:12 724次 阅读
iPhone6.1 英寸“特惠机”将采用LCD屏幕,推迟到十一月上市

C语言的经典算法大全包括了51个算法的详细中文概述

C语言的经典算法大全包括了51个算法的详细中文概述

发表于 06-04 08:13 165次 阅读
C语言的经典算法大全包括了51个算法的详细中文概述

C语言函数手册详细资料大全(免费下载)

C语言函数手册详细资料大全(免费下载) 包括了各种C语言函数的:功能,用法,程序例

发表于 06-04 08:07 78次 阅读
C语言函数手册详细资料大全(免费下载)

10个C语言技巧供硬件工程师参考

除代码的可读性之外,程序的执行时间还主要依赖于做决定时所选择的条件结构类型。许多硬件工程师都熟悉简单....

的头像 EDN电子技术设计 发表于 06-03 09:21 512次 阅读
10个C语言技巧供硬件工程师参考

友达LTPS LCD阵容将亮相SID显示周

友达LTPS LCD阵容将亮相SID显示周。友达光电(AUO)宣布将在5月22日至24日在洛杉矶举行....

发表于 06-02 10:01 102次 阅读
友达LTPS LCD阵容将亮相SID显示周

ARM汇编语言和C语言混合编程

ATPCS规则体现了一种模块化设计的思想,其基本内容是C模块(函数)和汇编模块(函数)相互调用的一套....

的头像 单片机精讲吴鉴鹰 发表于 06-01 09:13 1259次 阅读
ARM汇编语言和C语言混合编程