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】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

C++的这些资源你多知道吗?国外程序员整理的C++资源大全

C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛....

的头像 C语言编程学习 发表于 09-24 09:34 14次 阅读
C++的这些资源你多知道吗?国外程序员整理的C++资源大全

魅蓝note6怎样拆机

魅蓝Note6作为一台千元双摄手机,不仅使用上了高通骁龙625处理器,使用上了高质量的双摄组合,带来....

的头像 牵手一起梦 发表于 09-23 10:01 105次 阅读
魅蓝note6怎样拆机

一文读懂boost库的概念和安装方式

一、boost库简介boost库是一个功能强大,构造精巧,跨平台的免费的C++开源库。它使得C++编....

的头像 C语言专家集中营 发表于 09-23 09:47 43次 阅读
一文读懂boost库的概念和安装方式

oled屏和lcd屏哪个好

至从2017年苹果发布的新一代机型采用OLED屏以后,随着越来越多的手机开始采用OLED屏幕,那么手....

的头像 牵手一起梦 发表于 09-23 08:43 222次 阅读
oled屏和lcd屏哪个好

关于苹果iPhone Xs的性能介绍

苹果正式在秋季新品发布会发布5.8/6.5英寸iPhoneXs/Xs Max。iPhoneXs支持双....

的头像 牵手一起梦 发表于 09-23 07:49 2727次 阅读
关于苹果iPhone Xs的性能介绍

单片机c语言学习步骤教程及心得体会分享

很多想学单片机的人问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机....

的头像 传感器技术 发表于 09-22 17:20 68次 阅读
单片机c语言学习步骤教程及心得体会分享

C语言编程时容易犯的18歌错误 千万要小心哦~

看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位同学以供参....

的头像 C语言编程学习 发表于 09-22 15:42 56次 阅读
C语言编程时容易犯的18歌错误 千万要小心哦~

教你如何用时钟操控电路

时钟是怎么操控电路的,想了解吗?

的头像 电子发烧友网工程师 发表于 09-22 15:32 62次 阅读
教你如何用时钟操控电路

怎么判断MSP430是否适合您的LCD应用

作者:Jennifer Barry, TI MSP430产品事业部 2001 年,MSP430产品线推出第一款具有集成型 LCD 的微控制器。自此,...

发表于 09-21 15:41 68次 阅读
怎么判断MSP430是否适合您的LCD应用

LCD在打电话时不灭屏的解决方法

环境:MSM8909+Android6.0.1+STK3310 1.打开QSensorTest app,用手靠近和远离P-sensor,sensor均能正常上报数据...

发表于 09-21 10:54 327次 阅读
LCD在打电话时不灭屏的解决方法

浅析光学屏下指纹与超声波指纹识别

光学指纹识别其实也有两种路线之分,我们常说的屏下指纹识别的屏下就是Under Display方案,指....

发表于 09-21 10:23 368次 阅读
浅析光学屏下指纹与超声波指纹识别

keil编程软件

发表于 09-21 09:25 213次 阅读
keil编程软件

STM32L4进入STOP2模式后的漏电问题的分析及解决

STM32L4 系列,目前是STM32超低功耗产品中最强大的一个系列。它为我们提供了丰富的低功耗模式....

的头像 电子设计 发表于 09-21 09:02 492次 阅读
STM32L4进入STOP2模式后的漏电问题的分析及解决

启动文件在KEIL中编译时报错

CN0359例程中的程序源码,在KEIL中编译时,startup_ADuCM360.s文件报错。 然后更换启动文件后,编译可能通过,但是下...

发表于 09-20 14:42 18次 阅读
启动文件在KEIL中编译时报错

LCD framebuffer驱动设计文档

内容提要: 1. android display相关的名词 2. 调试LCD驱动需要注意的步骤 3. 关于帧缓冲区及I/O内存 ----------...

发表于 09-19 17:51 32次 阅读
LCD framebuffer驱动设计文档

C语言教程之选择结构程序设计资料概述和设计实例免费下载

本文档的主要内容详细介绍的是C语言教程之选择结构程序设计资料概述和设计实例免费下载包括了:1.if条....

发表于 09-19 17:21 38次 阅读
C语言教程之选择结构程序设计资料概述和设计实例免费下载

C语言教程之顺序结构程序设计的资料概述和设计实例免费下载

本文档的主要内容详细介绍的是C语言教程之顺序结构程序设计的资料概述和设计实例免费下载内容包括了:1.....

发表于 09-19 17:21 24次 阅读
C语言教程之顺序结构程序设计的资料概述和设计实例免费下载

C语言教程之数据类型、运算符与表达式的详细资料介绍免费下载

程序的任务是对数据进行处理,数据是程序处理的对象,而运算符是施加给这些数据的操作,数据和运算符是表达....

发表于 09-19 17:21 28次 阅读
C语言教程之数据类型、运算符与表达式的详细资料介绍免费下载

网站优化新手必须为什么要快速熟悉Python语言?

本文是面向SEO 人群的Python 程序语言入门教程,也适用于其他没有程序基础但想学习些程序,以解....

发表于 09-19 15:28 22次 阅读
网站优化新手必须为什么要快速熟悉Python语言?

iOS开发的Objective-C语言的简介与C语言有什么区别?详细函数说明

自苹果机在国内以迅猛速度发展以来,iOS开发工程师数量明显增多,这是市场的需求,也是iOS开发者的机....

发表于 09-19 14:49 17次 阅读
iOS开发的Objective-C语言的简介与C语言有什么区别?详细函数说明

Objective-C与Runtime的详细资料介绍让你不在问为什么

笔者非常高兴能为Objective-C写写自己的理解和总结,不仅仅因为是笔者是Objective-C....

发表于 09-19 14:49 13次 阅读
Objective-C与Runtime的详细资料介绍让你不在问为什么

长信科技发布了2018年前三季度业绩预告公告

此外,iPhone XR不提供3DT ouch压感触控功能,为此提供了一个可点亮屏幕的“轻点唤醒”功....

的头像 扩展触控快讯 发表于 09-19 09:39 1275次 阅读
长信科技发布了2018年前三季度业绩预告公告

MIPI CSI-2协议的简介CSI-2有什么功能和结构与组成等资料免费下载

DSI协议主要用于LCD显示屏显示,例如DSP利用DSI协议向LCD传输像素点数据从而使LCD显示画....

发表于 09-18 08:00 15次 阅读
MIPI CSI-2协议的简介CSI-2有什么功能和结构与组成等资料免费下载

使用STM32让OV7670摄像头跟随的C语言程序详细资料合集免费下载

本文档的主要内容详细介绍的是使用STM32让OV7670摄像头跟随的C语言程序详细资料合集免费下载

发表于 09-18 08:00 43次 阅读
使用STM32让OV7670摄像头跟随的C语言程序详细资料合集免费下载

高速数据保障交通安全:专用高速视频链路

作者:Andy McLean 德州仪器 基于视觉的安全系统在汽车应用中几乎变得随处可见。多种高清显示屏正在中央控制台、后座靠背...

发表于 09-17 16:10 110次 阅读
高速数据保障交通安全:专用高速视频链路

获取环境光数据调节LCD的光传感器解决方案

亮是如何亮起来的? 明亮度或光的亮度以勒克斯为单位来计算。 直射阳光计为 100,000 勒克斯,而....

的头像 Duke 发表于 09-17 14:34 1070次 阅读
获取环境光数据调节LCD的光传感器解决方案

用于分段LCD控制和使用GPIO引脚提高系统灵活度包括BOM及原理图

描述             The TIDA-00848 reference design provides an innovative ...

发表于 09-17 08:45 90次 阅读
用于分段LCD控制和使用GPIO引脚提高系统灵活度包括BOM及原理图

良好的掌握PCB设计才能更好的学习FPGA

今天的电子技术几乎是数字逻辑的天下,虽然传感器、模拟电路等也非常重要,但从比重上来讲,无疑越来越多的....

发表于 09-17 08:20 110次 阅读
良好的掌握PCB设计才能更好的学习FPGA

Keil C51教程之Keil C51入门使用教程详细图解免费下载

keil uvision2 C51软件是目前功能最强大的单片机c语言集成开发环境。 下面我们通过图....

发表于 09-17 08:00 43次 阅读
Keil C51教程之Keil C51入门使用教程详细图解免费下载

使用C语言设计贪吃蛇的详细资料合集(程序,应用软件,设计思路)免费下载

本文档的主要内容详细介绍的是使用C语言设计贪吃蛇的详细资料合集(程序,应用软件,设计思路)免费下载。

发表于 09-14 17:50 52次 阅读
使用C语言设计贪吃蛇的详细资料合集(程序,应用软件,设计思路)免费下载

51单片机教程之《划时代-51单片机C语言全新教程》电子教材免费下载

21 世纪是信息时代,电子技术的发展日新月异,同时各种新型数据传输接口技术的出现和新器件的出现,例如....

发表于 09-14 15:44 79次 阅读
51单片机教程之《划时代-51单片机C语言全新教程》电子教材免费下载

秋招开始了!你确定不看看这份C语言测试的经典嵌入式面试题?

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

发表于 09-14 14:55 522次 阅读
秋招开始了!你确定不看看这份C语言测试的经典嵌入式面试题?

未来OLED必然成为显示技术的核心!

从传统LCD(液晶显示屏),到LCD的升级版QLED(量子点发光二极管),再到摒弃传统结构的革新技术....

的头像 家电魔方 发表于 09-14 14:33 647次 阅读
未来OLED必然成为显示技术的核心!

《C语言深度解剖》让你快速通过程序员面试详细电子教材免费下载

我遇到过很多程序员和计算机系毕业的学生,也给很多程序员和计算机系毕业的学生讲解过《高级 C 语言程序....

发表于 09-14 10:53 48次 阅读
《C语言深度解剖》让你快速通过程序员面试详细电子教材免费下载

如何提高你的C语言编程能力?带你提升C语言编程能力

  C语言: 1.Windows、Linux、Unix 等操作系统的内核90%以上都使用C语言开发;....

发表于 09-14 10:53 76次 阅读
如何提高你的C语言编程能力?带你提升C语言编程能力

初学STM32是否有推荐的学习方法、教程和开发板

大家好,本人只学过AVR单片机,对C语言没有学过,想学习一下STM32,是否有推荐的学习方法、教程和开发板! 非常感谢...

发表于 09-14 09:40 114次 阅读
初学STM32是否有推荐的学习方法、教程和开发板

电容式触摸屏显示器参考设计包括BOM及原理图

描述 电容式触摸显示屏通常提供比传统电阻式触摸显示屏更高的质量和更好的用户体验。此参考设计显示了如何将电容式触摸显示屏...

发表于 09-14 09:17 697次 阅读
电容式触摸屏显示器参考设计包括BOM及原理图

TOPWAY智能TFT液晶模块的详细介绍和使用说明书资料免费下载

TOPWAY 智能模块(Smart LCD)是专为工业显示应用而设计的 TFT 液晶模块。客户可通过....

发表于 09-14 08:00 33次 阅读
TOPWAY智能TFT液晶模块的详细介绍和使用说明书资料免费下载

蜂鸣器播放音乐C语言程序免费下载

本文档的作用内容详细介绍的是蜂鸣器播放音乐C语音程序免费下载(包含了播放生日快乐歌曲的详细设计资料)

发表于 09-13 15:26 45次 阅读
蜂鸣器播放音乐C语言程序免费下载

学习C语言的应用软件Visual C++6.0完整绿色版应用程序免费下载

本文档的作用内容详细介绍的是学习C语言的应用软件Visual C++6.0完整绿色版应用程序免费下载....

发表于 09-12 15:05 58次 阅读
学习C语言的应用软件Visual C++6.0完整绿色版应用程序免费下载

嵌入式C语言程序有什么常见错误?C语言程序调试技巧方法资料免费下载

程序设计很少能够没有错误一次完成,在编程的过程中由于种种原因,总会出现这样或那样的错误,这些程序的错....

发表于 09-12 11:37 35次 阅读
嵌入式C语言程序有什么常见错误?C语言程序调试技巧方法资料免费下载

Mini LED能否助力LCD成功逆袭OLED实现弯道超车?

Mini LED背光可以缩小LCD和OLED显示器的性能差距,从而有可能使LCD发生改观。Mini ....

的头像 CNLED网 发表于 09-11 18:03 1016次 阅读
Mini LED能否助力LCD成功逆袭OLED实现弯道超车?

51单片机怎么驱动直流电机c语言

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8....

发表于 09-11 08:52 134次 阅读
51单片机怎么驱动直流电机c语言

如何将C语言程序置入单机片中

程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器....

的头像 沈丹 发表于 09-11 08:44 350次 阅读
如何将C语言程序置入单机片中

c++入门教程书籍之《c++PrimerPlus》第六版电子教材免费下载

C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言,是C语言....

发表于 09-11 08:00 61次 阅读
c++入门教程书籍之《c++PrimerPlus》第六版电子教材免费下载

基于S3C44BOX人机交互界面LCD触摸屏系统设计介绍

该模块整合了多项的实用界面,包含内建的10-Bit ADC.提供触控屏接口。OCMJ15X20D(....

发表于 09-10 17:43 148次 阅读
基于S3C44BOX人机交互界面LCD触摸屏系统设计介绍

汇编和C语言相结合的51单片机编程技巧

C语言和汇编语言的区别在于他们之间优缺点几乎是相反的。

发表于 09-10 14:59 190次 阅读
汇编和C语言相结合的51单片机编程技巧

高盛发布投资研究报告,维持苹果公司股票“中性”评级

为了迎接即将到来的iOS 12正式版,现在苹果已经在iOS 11的提示应用中推荐这个全新的系统了,而....

的头像 科技美学 发表于 09-10 14:45 1331次 阅读
高盛发布投资研究报告,维持苹果公司股票“中性”评级

如何进行高质量的C、C++编程?高质量C++、C编程指南详细资料免费下载

本文档的作用内容详细介绍的是如何进行高质量的C、C++编程?高质量C++、C编程指南详细资料免费下载....

发表于 09-10 08:00 49次 阅读
如何进行高质量的C、C++编程?高质量C++、C编程指南详细资料免费下载

c++入门书籍C++ Primer 3rd Edition中文完美版电子教材免费下载

在所有的编程语言中C++可以说是最为复杂的它既是一门传统的编程语言也是一门新的编程语言说它是一门传统....

发表于 09-07 08:00 77次 阅读
c++入门书籍C++ Primer 3rd Edition中文完美版电子教材免费下载

如何使用FPGA进行车牌识别系统的设计与实现?详细资料免费下载

本文对传统的以通用数字信号处理器(dsp)为核心的车牌识别系统进行了改进,介绍了一种新的基于fpga....

发表于 09-06 14:25 64次 阅读
如何使用FPGA进行车牌识别系统的设计与实现?详细资料免费下载

程序员眼中的浪漫,如何用C语言画“心”?

你以为C语言就是提供一种编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编....

的头像 C语言编程设计 发表于 09-06 10:19 291次 阅读
程序员眼中的浪漫,如何用C语言画“心”?

即将推出的iPhone最常见的问题:它什么时候出来?有何改进?

不过,还是会有权衡的。据说低端手机有LCD屏幕,而不是iPhone X上的OLED屏幕,所以显示质量....

的头像 扩展触控快讯 发表于 09-05 09:32 859次 阅读
即将推出的iPhone最常见的问题:它什么时候出来?有何改进?

C语言教程之C语言中级培训教程—何谓表达式

表达式的概念 ALU的构造决定了它只能进行二元运算。那么一个复杂表达式的多次计算如何处理? 只好按优....

发表于 09-04 17:11 63次 阅读
C语言教程之C语言中级培训教程—何谓表达式

C语言教程之C语言中级培训-再论“类型电子课件免费下载

“数据类型”的意义 1.定义了数据占用的内存空间大小; 2.定义了数据在内存中的存储格式; 3....

发表于 09-04 17:11 55次 阅读
C语言教程之C语言中级培训-再论“类型电子课件免费下载

C语言教程之C语言中级培训教程—预处理电子课件免费下载

本文档的主要内容详细介绍的是C语言教程之C语言中级培训教程—预处理电子课件免费下载

发表于 09-04 17:11 83次 阅读
C语言教程之C语言中级培训教程—预处理电子课件免费下载

C语言教程之C语言中级培训教程—再谈数组

数组的概念:是一种初级(语言级)形式的数据结构。另外还有三种形式。

发表于 09-04 17:11 32次 阅读
C语言教程之C语言中级培训教程—再谈数组

实现TFT LCD的测试C语言函数详细资料免费下载

本文档的主要内容详细介绍的是实现TFT LCD的测试C语言函数详细资料免费下载。

发表于 09-04 16:44 31次 阅读
实现TFT LCD的测试C语言函数详细资料免费下载

LCDDRV液晶显示器的详细C语言程序资料免费下载

本文档的主要内容详细介绍的是LCDDRV液晶显示器的详细C语言程序资料免费下载。

发表于 09-04 16:44 45次 阅读
LCDDRV液晶显示器的详细C语言程序资料免费下载