0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Linux阅码场 来源:互联网 作者:佚名 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();}

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4274

    浏览量

    164031
  • C语言
    +关注

    关注

    180

    文章

    7527

    浏览量

    128250
  • 嵌入式编程
    +关注

    关注

    0

    文章

    26

    浏览量

    10233

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    单片机C语言LCD多级菜单的一种实现方法

    介绍了在C语言环境下,在LCD液晶显示屏实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。
    发表于 03-03 13:10

    怎么使用结构的LCD菜单

    ),};XC8编译器给了我以下errors:LCD_CONTROL.h:18:error:(262)结构/联合“菜单结构”重新定义了LCD_CONTROL.c:32:error:(187)功能参数太少
    发表于 03-11 06:33

    LCD液晶显示屏实现多级嵌套菜单

    摘要: 介绍了在C 语言环境下,在LCD 液晶显示屏实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。关键词: 液晶显示
    发表于 07-14 08:41

    c语言实现面向对象编程 精选资料分享

    差异。在语法C语言支持的oop(面向对象)机制比较薄弱,但完全可以使用c语言写出面向
    发表于 09-02 07:46

    面向对象编程语言的特点

    在工业自动领域,梯形图逻辑仍然是最常用的编程语言之一,但对于更加复杂的控制对象,面向对象编程不失为一种高效率的方式。下面先来谈谈面向对象
    发表于 09-08 07:44

    单片机c语言下如何实现lcd多级菜单

    萌新求助,关于单片机c语言lcd多级菜单的一种实现方法
    发表于 10-15 06:36

    怎样用C语言去实现LCD多级菜单

    LCD菜单实现的功能有哪些?怎样用C语言去实现LCD多级菜单呢?
    发表于 10-19 08:13

    嵌入式编程中C语言的模块和模拟面向对象的相关资料推荐

    模块的划分主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了>相对论), C语言模块程序设计需理解如下概念:(1)
    发表于 12-15 08:51

    解读rtt的c的面向对象对象创建及其启动初始流程

    解读rtt的c的面向对象对象创建及其启动初始流程,最后总结面向对象
    发表于 07-05 11:01

    单片机C语言LCD菜单的方法实现

    由于C语言的结构性和模块化,采用C语言编写的程序容易阅读和维护,还有很好的可移植性。本文介绍一种用C语言实现的LCD多级菜单的方法,该方法已
    发表于 03-14 11:32 399次下载

    单片机C语言LCD菜单的实现

    介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。
    发表于 09-28 13:57 556次下载

    如何使用单片机C语言实现LCD的多级菜单

    介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。
    发表于 12-04 17:15 35次下载
    如何使用单片机C<b class='flag-5'>语言</b>实现<b class='flag-5'>LCD</b>的多级<b class='flag-5'>菜单</b>

    基于单片机及C语言LCD多级菜单

    介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。
    发表于 05-24 11:00 60次下载

    在JavaScript中动态的创建QML对象

    在实际QML应用开发中,我们可以在JavaScript中动态的创建QML对象。这样做可以延迟对象实例化,当我们在需要创建
    的头像 发表于 09-01 10:42 1270次阅读