1. lcd
    lcd
    +关注
    关注 5
    文章 866
    浏览量 92660
  2. C语言
    +关注
    关注 63
    文章 2745
    浏览量 51742
  3. 嵌入式编程
    +关注
    关注 0
    文章 7
    浏览量 6565

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. 基于gcc将C语言变量与指令操作数相关联
  2. 在Ubuntu 14.04上面进行的meltdown漏洞的亲测
  3. 朱辉:Linux Kernel iowait 时间的代码原理以及内核拓展文章介绍
  4. 建立一个方法和套路来对 Load 高问题排查
  5. C语言设计学习,教你如何将LCD菜单对象化
原文标题:C语言对象化设计的实例——LCD菜单 文章出处:【微信号:LinuxDev,微信公众号:Linuxer】欢迎添加关注!文章转载请注明出处。
关注88lifa利发国际娱乐微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

基于FPGA的LCD显示的远程更新的优越性分析

LCD显示屏的应用越来越广,数量越来越多。LCD显示屏应用广泛,无处不在。小到家庭各种电器设备,大到....
发表于 01-23 16:20 次阅读 0条评论
基于FPGA的LCD显示的远程更新的优越性分析

基于FPGA的彩色TFT-LCD控制电路设计及其ASIC实现

通过彩色液晶显示器(LCD)取景是数码相机优于传统相机的重要特性之一,它解决了使用取景框取景带来的各....
发表于 01-23 16:15 次阅读 0条评论
基于FPGA的彩色TFT-LCD控制电路设计及其ASIC实现

基于STM32F4x9的LCD显示系统架构设计

随着人机界面(GUI)在医疗、工业以及消费电子各应用领域需求的日益增长,高集成度、高性能的TFT液晶....
发表于 01-23 16:13 次阅读 0条评论
基于STM32F4x9的LCD显示系统架构设计

基于Xilinx Virtex-4 FPGA开发平台验证并完成LCD大屏幕拼接系统的设计

随着各种图形、图像内容质量的不断提升以及系统运行实时显示的需要,金融、通信、交通、能源、安全、军事等....
发表于 01-23 16:13 次阅读 0条评论
基于Xilinx Virtex-4 FPGA开发平台验证并完成LCD大屏幕拼接系统的设计

解析C语言与ARM汇编与的相互调用以及与 C++ 相互调用

全局变量只能通过地址间接调用,为了访问C++语言中全局变量,首先要通过extern伪指令引入全局变量....
的头像 畅学单片机 发表于 01-23 10:29 次阅读 0条评论
解析C语言与ARM汇编与的相互调用以及与 C++ 相互调用

基于C语言中scanf函数的3种常见问题的原因分析和解决方法

在写代码时总是不小心在这里犯错,所以特意查了一下这个函数,并且做以整理,现分享给大家。
的头像 嵌入式资讯精选 发表于 01-22 12:34 次阅读 0条评论
基于C语言中scanf函数的3种常见问题的原因分析和解决方法

LCD与LED的区别之背光原理与优缺点对比介绍

LCD一般就指液晶显示器,是目前市场上的绝对主流产品。液晶显示器可以分为传统CCFL背光、LED背光....
发表于 01-22 09:00 次阅读 0条评论
LCD与LED的区别之背光原理与优缺点对比介绍

LCD与LED拆解对比测试:价格差在哪

不差钱差在哪 LED与LCD拆解对比测试 本周三我们PChome电脑之家推出了围绕在LCD与LED两....
的头像 alpha007 发表于 01-23 01:00 次阅读 0条评论
LCD与LED拆解对比测试:价格差在哪

如何成为嵌入式高手的学习路线解析

了解linux系统;区分各种版本的Linux系统,以便于拓展 Linux视野。 1、Linux....
的头像 EDN电子技术设计 发表于 01-19 11:01 次阅读 0条评论
如何成为嵌入式高手的学习路线解析

电路板排列问题 回溯(C语言)

本文为大家带来用C语言实现的回溯法电路板排列程序。
发表于 01-18 17:06 次阅读 0条评论
电路板排列问题 回溯(C语言)

最全点阵LCD的显示原理与使用方法详解

在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对....
发表于 01-18 14:58 次阅读 0条评论
最全点阵LCD的显示原理与使用方法详解

关于单片机和c语言的10个问题和解答

1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令....
的头像 玩转单片机 发表于 01-18 14:51 次阅读 0条评论
关于单片机和c语言的10个问题和解答

基于gcc将C语言变量与指令操作数相关联

在C中嵌入汇编的最大问题是如何将C语言变量与指令操作数相关联。当然,gcc都帮我们想好了。下面是是一....
的头像 Linuxer 发表于 01-16 14:55 次阅读 0条评论
基于gcc将C语言变量与指令操作数相关联

oled为什么可以弯曲_lcd 为什么不能弯曲

OLED具有可弯曲的特点,很多人认为OLED电视将是电视产业的未来之星而不是液晶电视或等离子电视。但....
发表于 01-15 14:43 次阅读 0条评论
oled为什么可以弯曲_lcd 为什么不能弯曲

利用C语言创建windows窗口的程序解析

C语言创建windows窗口
的头像 C语言编程学习 发表于 01-15 10:42 次阅读 0条评论
利用C语言创建windows窗口的程序解析

从DGUS II的功耗构成看如何实现低功耗LCD

现在国家对家用的电器产品的功耗要求很严格,对功耗的要求还分为了正常工作下的功耗和待机功耗。以目前市场....
的头像 陈春妮 发表于 01-15 16:43 次阅读 0条评论
从DGUS II的功耗构成看如何实现低功耗LCD

用C 语言描述AES256 加密算法

高级加密标准 (AES) 已经成为很多应用(诸如嵌入式系统中的应用等)中日渐流行的密码规范。自从 2....
发表于 01-10 20:59 次阅读 0条评论
用C 语言描述AES256 加密算法

小波去噪c语言程序

主要介绍了小波去噪c语言程序,小波阈值去噪就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重....
发表于 01-10 16:11 次阅读 0条评论
小波去噪c语言程序

了解多线程并深入分析CreateThread与_beginthreadex本质区别

本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreade....
的头像 C语言专家集中营 发表于 01-09 17:08 次阅读 0条评论
了解多线程并深入分析CreateThread与_beginthreadex本质区别

基于C语言中指针的基本用法解析

我C语言中其它的知识都学得可以,唯独指针搞不懂。如果是这样,我可以很负责的告诉你,对于这门编程语言,....
的头像 玩转单片机 发表于 01-09 15:12 次阅读 0条评论
基于C语言中指针的基本用法解析

88lifa利发国际娱乐

百度360搜索搜狗搜索