LCD点阵液晶多级菜单设计
- 设计思路:
LCD的显示分为有按键触发的信息区显示和无需按键触发固定栏显示。利用静态链表数据结构,制作成一张数组形式的表,配置好所有的菜单。LCD软件层次图如下所示:
LCD层次图
- 数据结构
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点阵液晶多级菜单设计相关推荐
- 分享一个按键液晶多级菜单设计方法,工控行业中沿用多年,屡试不爽,附带本人一个调试通过
转自:https://www.amobbs.com/forum.php?mod=viewthread&tid=4001689 typedef struct { uchar KeyStateIn ...
- STM32+0.96OLED的多级菜单设计
硬件 硬件选型 STM32F103C8T6最小核心板 0.96寸四脚OLED屏幕IIC接口 普通按键5个 硬件连线 SCL ---- PA1 SDA ---- PA2 KEY_UP ---- PA4 ...
- 基于链表的多级菜单设计
基于链表的多级菜单设计 前言 主体 前言 最近在做一个简单的界面,需要用到多级菜单,一开始使用的是传统的索引法,在修改时比较乱,在网上有用链表写的,虽然一致都在用c语言,却很少使用链表,于是今天早上便 ...
- 基于状态机的LCD多级菜单设计
文章地址链接1:https://blog.csdn.net/embedded_guzi/article/details/35835755 文章地址链接2:http://eeskill.com/arti ...
- 基于STM32F407的简易菜单设计+LCD+按键
基于STM32F407的简易多级菜单设计+LCD+按键 实现原理 主要使用 双向链表 结构实现的菜单: 结构体包含7个变量,分别是菜单中功能项的个数,当前菜单标题,菜单中各功能项标题,功能项的类型,然 ...
- 【点阵液晶编程连载四】MenuGUI 菜单应用
4. Mz_MenuGUI 菜单应用 4.1. Mz_MenuGUI 在一些带有点阵LCD 显示界面的产品当中,通常会涉及到一些菜单界面的应用,特别是一些带有设置功能的仪器仪表产品:结合自己的设计经验 ...
- django权限二(多级菜单的设计以及展示)
多级权限菜单设计级标题栏 我们现在只有数据展示,要进入其他url还需要手动的输入路径,非常的麻烦,所以我们要设计 一个导航栏以及侧边多级菜单栏,这个展示是通过stark组件的设计的增删改查页面,而 每 ...
- Vue 里,多级菜单要如何设计才显得专业?
老生常谈了! 虽然我们是 Java 猿,但是写起来前端代码也不含糊!今天我想来和大家聊聊这个前端的动态菜单,要如何设计才显得专业!还是以我们的 TienChin 项目为例,大家一起来看看. 先来一张截 ...
- 汉字点阵与图形点阵提取方法及在LCD图形点阵液晶屏显示
在单片机驱动LCD点阵小液晶屏应用中,除了显示英文字母外,还需要显示汉字或图形,以丰富显示内容,在单色LCD点阵小液晶屏中,英文字母.汉字.图形均是以亮点暗点不同的组合来显示不同的内容,由于在单片机类 ...
- java web动态菜单设计_spring-boot与模板引擎:使用metisMenu实现动态多级菜单
系列传送门 在web开发中,特别是后台管理工具的开发,经常用到纵向的多级菜单. 但是常用的Bootstrap仅能支持到2级菜单,对于3级及3级以上的菜单的显示,却无能为力. 下面我将使用另一个jQue ...
最新文章
- java中bigdecimal除以int类型的数据怎么实现_大部分Java程序员都会忽略的几个问题,你中招没?...
- Linux网络配置与命令
- php二维数组排序方法(array_multisort usort)
- php 中c函数重载,php函数重载的替代方法--伪重载详解
- python数据分析天气预报_数据分析----天气预报走向(pygal)
- 多媒体计算机音频怎么连接,解决电脑连多媒体为什么没有声音
- pytz 太平洋时区_使用pytz模块打印所有时区的Python程序
- Vfed大橙子模板 苹果cms自动采集 的方法
- 使用Mac终端给文件夹加密压缩
- 助力工业物联网,工业大数据项目介绍及环境构建【一、二】
- 开源技术分享:SDN网络浅析与选型
- 哈工大人工智能暑期课实践项目——手写体识别四则运算
- ICIP2021:VVC RPR参考结构改进
- 人工智能助力未来教育
- 个人软件开发常用网站
- maven dependence 的optional 和 exclusions 标签详解
- 【深度学习】python实现等距随机抽样
- 网络操作设备VPR简介
- 高等数学——柱面与旋转曲面
- NB-IoT单灯控制器方案
热门文章
- java web 错误处理实例_javaweb异常提示信息统一处理(使用springmvc,附源码)
- 实施持续绩效管理流程的 6 大实用技巧
- 张小龙是高球冠军,大前研一是物理学家:​为什么牛人在很多领域都是世界第一?...
- 雷电模拟器 服务器无响应,雷电模拟器怎么用脚本长时间运行未响应win10
- java8 foreach 异常_在java 8流foreach中抛出异常
- PHP 对和队列的区别,【php】Redis的队列和消息队列的区别是什么?
- 有机酸的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 使用pystaller打包qy图形界面遇到的问题:This application failed to start...
- typora+gitee图床
- RuntimeError: einsum(): operands do not broadcast with remapped shapes [original->remapped]