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(); }

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

Linuxer 技术专区

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

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

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

解析C语言7大编码规范

1 排版规则 1) 程序应采用缩进风格编写,每层缩进使用一个制表位(TAB),类定义、方法都应....

的头像 C语言编程学习 发表于 02-09 15:38 次阅读 0条评论
解析C语言7大编码规范

分享python编程经历

Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的....

的头像 马哥Linux运维 发表于 02-09 15:27 次阅读 0条评论
分享python编程经历

详细剖析C语言编译过程

编译---->形成目标代码,目标代码是在目标机器上运行的代码。 连接---->将目标代码与C函....

的头像 C语言编程学习 发表于 02-08 17:02 次阅读 0条评论
详细剖析C语言编译过程

很全面的嵌入式开发与学习的入门知识

刚刚涉及嵌入式开发者总是先阅读一些指导类型文章,然后就开始对开发语言的选择踌躇不决。是C 还是C++....

的头像 面包板社区 发表于 02-08 16:55 次阅读 0条评论
很全面的嵌入式开发与学习的入门知识

大学c语言必背基础知识_c语言基础知识大全

程序中以 /*开头并且以*/结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序....

的头像 倩倩 发表于 02-08 16:02 次阅读 0条评论
大学c语言必背基础知识_c语言基础知识大全

c语言程序设计知识点

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储....

的头像 倩倩 发表于 02-08 15:39 次阅读 0条评论
c语言程序设计知识点

c语言经典小程序汇总大全

网上有很多的人说编程有多么多么无聊,其实:不要管别人怎么说,别人说什么,做你自己喜欢做的事就好。坚持....

的头像 倩倩 发表于 02-08 14:37 次阅读 0条评论
c语言经典小程序汇总大全

开关控制报警器的程序设计

名称:开关控制报警器 说明:用 K1 开关控制报警器,程序控制 P1.0 输出两种不同频率的声....

的头像 玩转单片机 发表于 02-07 09:23 次阅读 0条评论
开关控制报警器的程序设计

plc与C语言有什么关系_plc可以用c语言编程吗_plc的C语言编程详解

PLC为可编程逻辑控制器(Programmable Logic Controller)的首字母缩写。....

的头像 陈翠 发表于 02-06 14:55 次阅读 0条评论
plc与C语言有什么关系_plc可以用c语言编程吗_plc的C语言编程详解

Java编程和c语言哪一种更有优势_C语言与JAVA的区别是什么

软件开发编程语言多达600余种,每种都有各自的特点和应用领域。目前,在国内,最热的几门编程语言无外乎....

的头像 lhl545545 发表于 02-05 17:23 次阅读 0条评论
Java编程和c语言哪一种更有优势_C语言与JAVA的区别是什么

C语言实现简单的基数排序

本文主要阐述的类容是C语言实现简单的基数排序。基数排序是一种分配排序,其基本思想是:排序过程无须比较....

发表于 02-05 14:57 次阅读 0条评论
C语言实现简单的基数排序

介绍了C语言和机器语言的关系 以及其他类型语言的实现机制

我们知道,任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执行的,无论是编译型语言....

的头像 21ic电子网 发表于 02-05 09:58 次阅读 0条评论
介绍了C语言和机器语言的关系 以及其他类型语言的实现机制

一文深度探究柔性显示技术

柔板显示是非常具有前景的显示技术,通过很多的研究者和工程师的努力开发,柔性显示技术发展迅速。在不久的....

的头像 传感器技术 发表于 02-03 10:32 次阅读 0条评论
一文深度探究柔性显示技术

分享做单片机开发应该知道的几个基本技巧

对于如何减少程序的bug,应该先考虑系统运行中应考虑的超范围管理参数如下。物理参数:这些参数主要是系....

的头像 玩转单片机 发表于 02-03 09:11 次阅读 0条评论
分享做单片机开发应该知道的几个基本技巧

剖析DSP编程优化的7个方法

方法一 把浮点运算改成定点运算 因为C6x DSP板并不支持浮点运算,但我们的原始程序代码是浮....

的头像 畅学单片机 发表于 02-02 14:56 次阅读 0条评论
剖析DSP编程优化的7个方法

lcd与lcm的区别是什么?

LCM英文全称Liquid Crystal Display Module,即LCD显示模组、液晶模块....

发表于 02-02 14:51 次阅读 0条评论
lcd与lcm的区别是什么?

OLED和量子点终究还是败给了LCD

大家都在期待OLED/量子点会带来更多的突破,但是根据目前状况来看,OLED也许表现的根本没那么好,....

发表于 02-02 09:59 次阅读 0条评论
OLED和量子点终究还是败给了LCD

Java程序与串口的通信实现及调试

串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数....

发表于 02-01 14:48 次阅读 0条评论
Java程序与串口的通信实现及调试

C语言的运行环境有哪些_哪些是值得推荐的_C语言常用开发环境详解

C语言是发展比较早的一门编程语言,因而它也是发展比较成熟的一种编程语言。学习过C语言的人都知道,C语....

的头像 lhl545545 发表于 02-01 10:24 次阅读 0条评论
C语言的运行环境有哪些_哪些是值得推荐的_C语言常用开发环境详解

OLED布局成效渐显 京东方将引领中国智造

京东方作为我国供给侧改革创新的典范,推动中国面板产业升级。同时京东方物联网布局提速,与英特尔共同发布....

发表于 02-01 11:06 次阅读 0条评论
OLED布局成效渐显 京东方将引领中国智造