1. 设计思路:

LCD的显示分为有按键触发的信息区显示和无需按键触发固定栏显示。利用静态链表数据结构,制作成一张数组形式的表,配置好所有的菜单。LCD软件层次图如下所示:

LCD层次图

  1. 数据结构

LCD显示结构体:

typedef struct
{uint8 aContent[CONTENT_LEN];  /* display content */uint8 nLen;         /* content length */uint8 columST;      /* the start address in column direction (0--154) */uint8 lineST;       /* the start address in line direction (0--152) */uint8 size;         /* the size of word (16 or 12) */uint8 type;         /* the display type (0: in new screen  other:in old screen) */
} lcd_word_t;typedef struct
{uint8 aItem[MAX_MENU_ITEMS][MAX_SHOW_LEN + 1];uint8 nItemNum;uint8 nCurrAddr;uint8 nLastAddr;uint8 nInvertAddr; /* means in one screen (1 -- MAX_ITEMS_SCRN) */uint8 nMoveFlag; /* whether the Item has moved */uint8 nSize;
} lcd_menu_item_t;LCD菜单结构体:
typedef struct
{uint8 nCurrIndex; /* current menu Index */uint8 noKeyIndex; /* press "cancel" key and its operate */uint8 okKeyIndex; /* press "enter" key and its operate */uint16 Numbers;uint16 LastItem;uint16 CurrItem;uint8 InverItem; /* note the current Item in the screen */uint8 space;uint8SonOperate;uint8 nBottomFlag; /* 2--new type, 用于翻屏*/uint8 nInitFlag;void (*menuFunction)(); /* current function */
} lcd_menu_lsit_t;

LCD所有的菜单内容显示,通过lcd_menu_lsit_t结构体配置成一张静态链表:

lcd_menu_lsit_t lcd_menu[100] = {
//Main Menu{MENU_MAIN, MENU_MAIN, MENU_MAIN, 1, 1, 1, 1, 1, 1, 0, 0, menu_MainMenu},
};

2.3.4.接口
按键接口:
接口函数 函数说明

static uint8 key_read(void); 读取按键值
static void key_init(void); 按键处理模块初始化

LCD通用接口 :
接口函数 函数说明

void LCD_DrawFrame(uint8 LnST, uint8 LnEND, uint8 ClmST, uint8 ClmEND)   画矩形图void LCD_ShowPictures(uint8 *picture, uint8 LnSize, uint8 ClumSize,uint8 LineST, uint8 ColumST, uint8 opt); 显示图片uint8 LCD_DisplayWord(lcd_word_t lcd_word,uint8 opt);   显示字符串uint16 LCD_DisplayData(uint8 *aData, uint16 nLen, uint8 nSize, uint8 nIntvl, uint8 InvtFlag,
uint8 opt); 显示任意长度内容void LCD_DisplayMenu(lcd_menu_item_t *Item);    显示菜单void LCD_InvertDisplay(uint8 LnST, uint8 LnEND, uint8 ClmST, uint8 ClmEND); 反显uint8LCD_GetContent(uint8 *aBuf, uint8 type, uint8 size, uint8 *aContent);    从字符库获取数据显示void LCD_DisplayLayer(uint8 opt); 显示刷新

菜单操作接口:
接口函数 函数说明

void menu_MenuContrl(uint8 key)  菜单操作,根据输入按键显示对应菜单内容。

LCD点阵液晶多级菜单设计相关推荐

  1. 分享一个按键液晶多级菜单设计方法,工控行业中沿用多年,屡试不爽,附带本人一个调试通过

    转自:https://www.amobbs.com/forum.php?mod=viewthread&tid=4001689 typedef struct { uchar KeyStateIn ...

  2. STM32+0.96OLED的多级菜单设计

    硬件 硬件选型 STM32F103C8T6最小核心板 0.96寸四脚OLED屏幕IIC接口 普通按键5个 硬件连线 SCL ---- PA1 SDA ---- PA2 KEY_UP ---- PA4 ...

  3. 基于链表的多级菜单设计

    基于链表的多级菜单设计 前言 主体 前言 最近在做一个简单的界面,需要用到多级菜单,一开始使用的是传统的索引法,在修改时比较乱,在网上有用链表写的,虽然一致都在用c语言,却很少使用链表,于是今天早上便 ...

  4. 基于状态机的LCD多级菜单设计

    文章地址链接1:https://blog.csdn.net/embedded_guzi/article/details/35835755 文章地址链接2:http://eeskill.com/arti ...

  5. 基于STM32F407的简易菜单设计+LCD+按键

    基于STM32F407的简易多级菜单设计+LCD+按键 实现原理 主要使用 双向链表 结构实现的菜单: 结构体包含7个变量,分别是菜单中功能项的个数,当前菜单标题,菜单中各功能项标题,功能项的类型,然 ...

  6. 【点阵液晶编程连载四】MenuGUI 菜单应用

    4. Mz_MenuGUI 菜单应用 4.1. Mz_MenuGUI 在一些带有点阵LCD 显示界面的产品当中,通常会涉及到一些菜单界面的应用,特别是一些带有设置功能的仪器仪表产品:结合自己的设计经验 ...

  7. django权限二(多级菜单的设计以及展示)

    多级权限菜单设计级标题栏 我们现在只有数据展示,要进入其他url还需要手动的输入路径,非常的麻烦,所以我们要设计 一个导航栏以及侧边多级菜单栏,这个展示是通过stark组件的设计的增删改查页面,而 每 ...

  8. Vue 里,多级菜单要如何设计才显得专业?

    老生常谈了! 虽然我们是 Java 猿,但是写起来前端代码也不含糊!今天我想来和大家聊聊这个前端的动态菜单,要如何设计才显得专业!还是以我们的 TienChin 项目为例,大家一起来看看. 先来一张截 ...

  9. 汉字点阵与图形点阵提取方法及在LCD图形点阵液晶屏显示

    在单片机驱动LCD点阵小液晶屏应用中,除了显示英文字母外,还需要显示汉字或图形,以丰富显示内容,在单色LCD点阵小液晶屏中,英文字母.汉字.图形均是以亮点暗点不同的组合来显示不同的内容,由于在单片机类 ...

  10. java web动态菜单设计_spring-boot与模板引擎:使用metisMenu实现动态多级菜单

    系列传送门 在web开发中,特别是后台管理工具的开发,经常用到纵向的多级菜单. 但是常用的Bootstrap仅能支持到2级菜单,对于3级及3级以上的菜单的显示,却无能为力. 下面我将使用另一个jQue ...

最新文章

  1. java中bigdecimal除以int类型的数据怎么实现_大部分Java程序员都会忽略的几个问题,你中招没?...
  2. Linux网络配置与命令
  3. php二维数组排序方法(array_multisort usort)
  4. php 中c函数重载,php函数重载的替代方法--伪重载详解
  5. python数据分析天气预报_数据分析----天气预报走向(pygal)
  6. 多媒体计算机音频怎么连接,解决电脑连多媒体为什么没有声音
  7. pytz 太平洋时区_使用pytz模块打印所有时区的Python程序
  8. Vfed大橙子模板 苹果cms自动采集 的方法
  9. 使用Mac终端给文件夹加密压缩
  10. 助力工业物联网,工业大数据项目介绍及环境构建【一、二】
  11. 开源技术分享:SDN网络浅析与选型
  12. 哈工大人工智能暑期课实践项目——手写体识别四则运算
  13. ICIP2021:VVC RPR参考结构改进
  14. 人工智能助力未来教育
  15. 个人软件开发常用网站
  16. maven dependence 的optional 和 exclusions 标签详解
  17. 【深度学习】python实现等距随机抽样
  18. 网络操作设备VPR简介
  19. 高等数学——柱面与旋转曲面
  20. NB-IoT单灯控制器方案

热门文章

  1. java web 错误处理实例_javaweb异常提示信息统一处理(使用springmvc,附源码)
  2. 实施持续绩效管理流程的 6 大实用技巧
  3. 张小龙是高球冠军,大前研一是物理学家:​为什么牛人在很多领域都是世界第一?...
  4. 雷电模拟器 服务器无响应,雷电模拟器怎么用脚本长时间运行未响应win10
  5. java8 foreach 异常_在java 8流foreach中抛出异常
  6. PHP 对和队列的区别,【php】Redis的队列和消息队列的区别是什么?
  7. 有机酸的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 使用pystaller打包qy图形界面遇到的问题:This application failed to start...
  9. typora+gitee图床
  10. RuntimeError: einsum(): operands do not broadcast with remapped shapes [original->remapped]