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

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

3天内不再提示

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

Linux阅码场 来源:未知 作者:佚名 2017-11-17 06:11 次阅读

这是我十三年前读研究生的时候写的系列文章《C语言嵌入式系统编程修炼》系列文章中的一小节,是一个用面向对象,把LCD上面菜单,对象化的例子。该文章原始出处:

http://soft.yesky.com/lesson/188/2023188.shtml

菜单操作无数人为之绞尽脑汁的问题终于出现了,在这一节里,我们将看到,在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语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136121
  • LCD菜单
    +关注

    关注

    0

    文章

    2

    浏览量

    6330

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    如何将LCD与STM32F103C8T6 STM32开发板连接并编程

    在本教程中,我们学习如何将16×2 LCD显示器与STM32F103C8T6 STM32开发板连接,并使用Arduino IDE对其进行编
    的头像 发表于 11-09 16:18 1.3w次阅读
    <b class='flag-5'>如何将</b><b class='flag-5'>LCD</b>与STM32F103<b class='flag-5'>C</b>8T6 STM32开发板连接并编程

    如何将柔性传感器与树莓派连接并在LCD屏幕上显示其值

    在这个项目中,我们学习如何将柔性传感器与树莓派连接并在LCD屏幕上显示其值。
    的头像 发表于 12-31 09:33 3846次阅读
    <b class='flag-5'>如何将</b>柔性传感器与树莓派连接并在<b class='flag-5'>LCD</b>屏幕上显示其值

    求教如何将Labview的程序转换为C语言

    求教如何将Labview的程序转换为C语言啊,申请软件著作权要用
    发表于 12-24 13:04

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

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

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

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

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

    模块嵌入式编程中需要对程序进行模块划分的"划"是规划的意思,意指怎样合理的一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构
    发表于 12-15 08:51

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

    由于C语言的结构性和模块,采用C语言编写的程序容易阅读和维护,还有很好的可移植性。本文介绍一种用C
    发表于 03-14 11:32 400次下载

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

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

    使用C语言实现LCD多级菜单的方法资料和程序免费下载

    由于C 语言的结构性和模块,采用C 语言编写的程序容易阅读和维护,还有很好的可移植性。本文介绍一种用C
    发表于 08-06 17:33 20次下载
    使用<b class='flag-5'>C</b><b class='flag-5'>语言</b>实现<b class='flag-5'>LCD</b>多级<b class='flag-5'>菜单</b>的方法资料和程序免费下载

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

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

    谈谈如何将机器学习引入自动

    今天,笔者尝试通过一个一般性方法的介绍来谈谈如何将机器学习引入自动,同时对机器学习的相关概念做一个梳理。
    的头像 发表于 10-09 15:55 2289次阅读

    为什么要用C语言实现面向对象

    对象的编程语言,但面向对象的概念是在C语言阶段就有了,而且应用到了很多地方,比如某些操作系统内核、通信协议等。 面向
    的头像 发表于 11-05 18:05 1690次阅读
    为什么要用<b class='flag-5'>C</b><b class='flag-5'>语言</b>实现面向<b class='flag-5'>对象</b>

    C语言是如何实现面向对象

    C++是 面向对象 的编程语言,但面向对象的概念是在C语言阶段就有了,而且应用到了很多地方,比
    的头像 发表于 12-24 17:08 2w次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>是如何实现面向<b class='flag-5'>对象</b>的

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

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