1. C语言
    +关注
    C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
    关注 58
    文章 2622
    浏览量 49186
  2. lcd
    lcd
    +关注
    LCD ( Liquid Crystal Display 的简称)液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。
    关注 4
    文章 819
    浏览量 88166
  3. 嵌入式编程
    +关注
    关注 0
    文章 7
    浏览量 6300

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技术专区

  1. C语言设计学习,教你如何将LCD菜单对象化
  2. linux经典的rcu如何实现?
原文标题:C语言对象化设计的实例——LCD菜单 文章出处:【微信号:LinuxDev,微信公众号:Linuxer】欢迎添加关注!文章转载请注明出处。
关注88lifa利发国际娱乐微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

韩厂退出LCD面板聚焦OLED,国产厂商机遇和挑战并存

韩国LGDisplay继关闭3.5代厂后,近期再关闭五代厂,四代厂也将在年底歇业,全力发展AMOLE....
发表于 11-20 10:35 次阅读 0条评论
韩厂退出LCD面板聚焦OLED,国产厂商机遇和挑战并存

结构体的定义、初始化和赋值

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。 在C语言中,....
发表于 11-20 09:29 次阅读 0条评论
结构体的定义、初始化和赋值

c51特殊功能寄存器定义及作用

单片机C51语言是由C语言继承而来的。和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于....
发表于 11-17 15:31 次阅读 0条评论
c51特殊功能寄存器定义及作用

机器视觉开源代码集合(转载)

特征提取Feature Extraction: SIFT [1] [Demo program][SI....
发表于 11-17 15:03 次阅读 0条评论
机器视觉开源代码集合(转载)

LGD聚焦OLED显示屏,OLED完败LCD

据韩国商报报道,LG最近关闭了位于Gumi(龟尾市)的5代线P4工厂,这是继3.5代线P2工厂后又一....
发表于 11-17 13:48 次阅读 0条评论
LGD聚焦OLED显示屏,OLED完败LCD

C语言设计学习,教你如何将LCD菜单对象化

这是我十三年前读研究生的时候写的系列文章《C语言嵌入式系统编程修炼》系列文章中的一小节,是一个用面向....
的头像 Linuxer 发表于 11-17 06:11 次阅读 0条评论
C语言设计学习,教你如何将LCD菜单对象化

51单片机C语言延时函数怎么定义和使用

C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。下面给出一个经典的延时函数。C程序中可使....
发表于 11-16 17:06 次阅读 0条评论
51单片机C语言延时函数怎么定义和使用

条件运算符是什么_条件运算符有哪些

件运算符优先级高于赋值、逗号运算符,低于其他运算符。关系运算实际上是逻辑比较运算,它是逻辑运算中的一....
发表于 11-16 16:02 次阅读 0条评论
条件运算符是什么_条件运算符有哪些

可挠式AMOLED面板推上迎风口,2018年预计增长69.9%

IHS Markit统计指出,2018年柔性AMOLED面板净面积产能有望达到440万平方米,较20....
发表于 11-16 10:27 次阅读 0条评论
可挠式AMOLED面板推上迎风口,2018年预计增长69.9%

在C/C++初次求职中怎么学习

知识在于总结,根据自己多家面试,和自己的学习,进行了如下总结。 C语言的学习:结构体、联合体和枚举的....
发表于 11-16 10:24 次阅读 0条评论
在C/C++初次求职中怎么学习

c语言二维数组如何初始化为0

c语言二维数组如何初始化: 有两种方法:1.在定义时可以直接赋值来初始化2.在定义后可以为其元素一个....
发表于 11-16 09:43 次阅读 0条评论
c语言二维数组如何初始化为0

单片机C语言延迟程序时间怎么算

 用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也....
发表于 11-16 09:16 次阅读 0条评论
单片机C语言延迟程序时间怎么算

c语言二维数组初始化及使用

二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。 数组....
发表于 11-16 09:15 次阅读 0条评论
c语言二维数组初始化及使用

c语言二维数组定义及其规则详解

一维数组只有一个下标,,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维....
发表于 11-16 08:49 次阅读 0条评论
c语言二维数组定义及其规则详解

c语言中的转义字符

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加“\”来表....
发表于 11-15 14:34 次阅读 0条评论
c语言中的转义字符

C语言字符串操作总结大全(超详细)

本文对c语言字符串的操作进行了详细的总结分析,需要的朋友可以参考。
发表于 11-15 14:19 次阅读 0条评论
C语言字符串操作总结大全(超详细)

小波分析算法的公式与C语言实现

在小波理论中,多分辨率分析是一个重要的组成部分。多分辨率分析是一种对信号的空间分解方法,分解的最终目....
发表于 11-15 12:04 次阅读 0条评论
小波分析算法的公式与C语言实现

c#数据类型转换-数值字符串和数值之间的转换

c#将数值转换成字符串非常简单,因为每一个类都有一个 void ToString() 方法。所有数值....
发表于 11-14 18:06 次阅读 0条评论
c#数据类型转换-数值字符串和数值之间的转换

C语言字符串转数字实现方法

在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串。字符串是以“\0”作为结束符。C....
发表于 11-14 17:50 次阅读 0条评论
C语言字符串转数字实现方法

单片机C语言几种内存泄露总结

堆内存泄漏(Heap leak)。堆内存指的是程序运行中根据需要分配通过malloc,realloc....
发表于 11-14 10:09 次阅读 0条评论
单片机C语言几种内存泄露总结

88lifa利发国际娱乐

百度360搜索搜狗搜索