基于状态机的LCD多级菜单设计
由LCD12864初探嵌入式菜单设计(完全资料)

1、位操作 向 LCD12864 这种二值屏幕,我们习惯于用 1 个字节表示连续的 8 个点,1 对应对应位被点亮,0 表示不
亮,所以对图形的操作最基本的手段就是位操作。 复习下,常用的位操作,假设 Dis 表示某一个现存地址的内容 Dis = Dis~ 黑白颠倒 Dis &= ~(1<<n) 第 n 处被擦去, Dis |= (1<<n) 第 n 处被画了一个点 Dis ^= (1<<n) 如果 n 处是亮的,就变被擦掉;如果 n 处是空白的,就被点亮…… …… 差不多就这些
default: TempData |= (1 << BX);
}
setY(X);
500361 sendDataToLCD(TempData); ll648 } om/ba 特别说明一下,关于贪食蛇范例的问题,这篇文章里面只会简单得提及一下。 idu.c 作为嵌入式系统开发的一个范例,我会另外开一个帖子详细说明开发过程。 i.ba 这个范例将作为介绍嵌入式系统开发方法的一个很好的例子,用于解释一个系统和一段表示您调通了某一 ://h 个功能的代码之间有什么区别,同时也将介绍嵌入式开发系统的几种模式(超级循环、调度器),顺便侃一
PDF 文件使用 "pdfFactory Pro" 试用版本创建
首先,我们从最基本的数学算法说起。 如果我们使用公式 y = kx + b 来作为绘图的依据,那么就需要分 3 种情况:水平直线,斜率为 0;垂直直
硬件平台:AVR Mega8 级 LCD: 不带字库的 12864 软件平台:ICC 规范: 符合基本的 C 编程规范
3、何时开始正文 其实,本文应该算是计算机图形学的一个具体分支,所以,计算机图形学的基本要求就是本文的基本要求, 考虑到各位兄弟的胃口,我就多罗嗦下。
旋转编码器控制12864液晶多级菜单显示

(5)、工作电流:2.0mAmax
5、接口说明
管 管脚 电平 脚 号
1 VSS 0V
2 VDD 5.0V
3 V0
说明
逻辑电源地。 逻辑电源正。 LCD 驱动电压,应用时在 VEE 与 V0 之间加一 10K 可调电阻。
4 D/I H/L
5 R/W H/L
6
E H.H/L
7 DB0 H/L
8 DB1 H/L
Line 0 1/0 1/0 1/0 1/0 …………
1/0 1/0 1/0 DB0
Line 1 1/0 1/0 1/0 1/0 …………
1/0 1/0 1/0 DB1
Line 2 1/0 1/0 1/0 1/0 ………… X=0
1/0 1/0 1/0 DB2
Line 3 1/0 1/0 1/0 1/0 …………
(4)、输入电压:Vee~Vdd
(5)、工作温度
:0~55℃(常温) / -20~70℃(宽温)
(6)、保存温度
:-10~65℃
4、电气特性
(1)、输入高电平
:3.5Vmin
(2)、输入低电平(Vil):0.55Vmax
(3)、输出高电平( ):3.75Vmin
(4)、输出低电平(Vol):1.0Vmax
(1)、显示开/关设置
L
L
L
L
H
H
H
H
H H/L
功能:设置屏幕显示开/关。 DB0=H,开显示;DB0=L,关显示。不影响显示 RAM(DD RAM)中的内容。
(2)、设置显示起始行
L
L
H
H
行地址(0~63)
功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由 Z 地址计数 器控制的,该命令自动将 A0-A5 位地址送入 Z 地址计数器,起始地址可以是 0-63 范围 内任意一行。Z 地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后 自动加一。
oled多级菜单实现方法

OLED多级菜单实现方法引言随着智能设备的普及,O LE D(Or ga ni cLi g ht-E mi tt in gD iod e)显示屏在各种应用中得到广泛应用。
在许多情况下,我们需要为用户提供一种直观且易于操作的界面,以便他们与设备进行交互。
其中,多级菜单是一种常见的交互方式。
本文将介绍在OL ED显示屏上实现多级菜单的方法。
一、概述多级菜单是一种具有层级结构的菜单,它允许用户在不同层级间进行导航和选择操作。
通过使用O LE D显示屏,我们可以以图形化的方式展示多级菜单,使用户操作更加方便和直观。
二、实现步骤1.准备工作在开始实现多级菜单之前,我们需要准备以下材料:-一块可驱动OL ED显示屏的硬件设备-相应的开发板或单片机-适配器或连接线等连接硬件设备所需的配件2.设计菜单结构在实现多级菜单之前,我们需要先设计菜单的层级结构。
通常,多级菜单由一级菜单和多个子菜单组成。
一级菜单可以包含多个子菜单,子菜单之间可以进行跳转和切换。
我们可以用树状结构来表示并管理菜单的层级关系。
3.显示菜单通过OL ED显示屏,我们可以将菜单以图形化的方式展示出来,提供给用户进行选择。
在显示菜单时,我们需要根据当前菜单层级和用户选择的位置来进行显示,以及在用户进行操作时进行相应的响应。
4.用户操作多级菜单的核心在于用户的操作。
用户可以使用特定的按键或触摸屏进行导航和选择。
我们需要监听用户的操作,并对其进行相应的处理。
比如,当用户选择某个菜单项时,我们需要根据其选择进行相应的跳转或执行相应的操作。
5.实现菜单功能菜单不仅仅是显示和选择,还需要实现相应的功能。
根据不同的应用场景,我们可以为菜单的不同选项分配不同的功能,并在用户选择时执行相应的操作。
6.菜单管理和维护在实际应用中,菜单通常需要进行管理和维护。
这包括对菜单项的增加、删除和修改,以及对菜单结构的调整和优化。
我们需要提供相应的管理界面和功能,以便管理员或用户对菜单进行维护和配置。
u8g2多级菜单原理 -回复

u8g2多级菜单原理-回复u8g2多级菜单原理:实现复杂显示效果的逐级菜单控件一、引言介绍(100-150字)u8g2多级菜单是一种用于显示复杂文字和图形的逐级菜单控件,基于u8g2图形库开发。
它提供了一种结构化管理菜单选项和层级关系的方法,使用户可以通过使用方向键和确定键进行导航和选择。
本文将详细介绍u8g2多级菜单的原理和实现步骤,旨在帮助读者理解u8g2多级菜单的工作原理以及如何开发和定制自己的逐级菜单。
二、什么是u8g2多级菜单(200-300字)u8g2多级菜单是一种以树形结构展示菜单选项的图形控件。
它使用u8g2图形库提供的功能来绘制文本、图标和边框等元素,实现了逐级展开、收起和选择的功能。
每个菜单选项都可以包含子菜单,用户可以通过方向键在不同的菜单选项之间进行导航,通过确定键选择某个菜单选项并进入子菜单。
该控件通过将菜单选项组织成树状结构,提供了一种有效管理和展示大量信息和选项的方式。
三、u8g2多级菜单的原理和实现逻辑(400-500字)u8g2多级菜单的实现原理可以概括为以下几个步骤:1. 初始化:首先,创建一个根菜单项,并设置当前菜单指针指向根菜单项。
根菜单项包含了所有的一级子菜单选项,以及每个子菜单选项对应的子菜单项数组。
2. 绘制:使用u8g2图形库提供的绘制函数,根据当前菜单指针指向的菜单项,将菜单选项的文本、图标和边框绘制到显示屏上。
3. 导航:在绘制菜单后,用户可以通过方向键(上、下、左和右)在不同的菜单选项之间进行导航。
根据用户的输入,更新当前菜单指针的位置,并根据需要重新绘制菜单。
4. 选择:当用户按下确定键时,记录当前菜单指针的位置,并根据当前菜单指针的指向进入下一级菜单。
重复步骤2和3,直到用户选择了最终的菜单选项。
5. 返回:在菜单的任何级别,用户都可以通过返回键返回上一级菜单。
通过管理一个菜单栈来记录菜单导航的历史,可实现返回菜单功能。
四、开发u8g2多级菜单的步骤与注意事项(500-600字)开发u8g2多级菜单需要以下几个关键步骤和注意事项:1. 创建菜单结构:首先,定义菜单结构和数据。
C51与单片机系统多级菜单的模块化设计_汪高勇

单片机的应用中, 除了进行数据运算和过程控 制外, 还会使用到人机接口. 人机接口处理了操作者 的指令输入, 这些操作普遍采用了菜单方式进行命 令输入, 在使用液晶显示器的场合, 菜单更是必需的 设计. 对于汇编语言而言, 菜单可以使用制表法进行 菜单编写, 但是由于汇编语言可移植性和可读性较 差, 所以对于菜单的复杂性、菜单的可移植性、可维 护性以及可扩充性方面, 汇编语言处于弱势. 使用 C 语言可以解决这方面的问题, 利用 C 语言的数据结 构, 对菜单进行数据组织, 将菜单进行模块化设计, 可解决上述问题.
第 24 卷第 2 期 2009 年 4 月
电路与控制
光 电技 术应 用
EL ECT RO - OPT IC T ECHNO LOG Y AP PLI CAT ION
Vo l. 24, No. 2 Apr 块化设计
汪高勇, 宋毅恒, 尚举邦
( 东北电子技术研究所, 辽宁 锦州 121000)
图 2 菜单模块组成
图 1 共用键盘处理程序
图 1 中, 工作程序是软件中需要在主程序轮询 执行的任务程序, 用于检查系统的各种功能标识和 消息并进行处理. 共用键盘处理程序也算作一种任 务程序, 由主程序轮询执行. 如图 1 虚框所示, 当键 标志有效时, 程序对键值进行匹配, 执行当前菜单模 块对应的按键程序. N 个菜单模块同一时刻仅有一 个模块通过按键函数指针初始化得以装载.
1 菜单模块化设计原理
1. 1 共用键盘处理
菜单的模块化设计主要分为共用键盘处理和 菜单模块两部分. 主要原理是在主程序中设置一个 共用键盘处理程序, 各菜单模块利用统一的键盘接 口函数对共用键盘处理程序中的按键函数指针进行 重定向设定, 使得共用键盘处理程序能够指向各菜 单模块. 每次按键操作完毕, 均回到主程序, 这与常 用的菜单编程方法类似.
基于STM32单片机LCD多级菜单的设计

基于STM32单片机LCD多级菜单的设计摘要本设计介绍了以ARM内核嵌入式处理器STM32为控制核心,辅以低功耗的液晶模块MFG240160-3-A,以及相应的按键控制电路,实现了LCD多级菜单的设计。
在本系统中,侧重点在于LCD的显示上,因此此系统的硬件结构很简单,侧重点在于软件架构及程序的编写上,该系统程序量大,函数封装多,关于实时时钟信息、波形存储信息都留有相应的软件接口,以便与其它模块正确的相连接。
本系统硬件电路简单,但显示信息丰富,可以移植到各种便携式的电子产品上去,为电子产品的显示界面的设计提供了一个新的思路。
关键词 STM32单片机;LCD多级菜单;低功耗;Base on STM32 Microprocessor LCD modules in the multi-level menu display systemAbstractThis design describes to STM32 embedded processor based on ARM core for control, coupled with low power consumption of LCD module MFG240160-3-A as well as the corresponding keys control circuitry, enabling multi-level menu design of LCD. In this system, the focus is on the LCD display, so this system hardware structure is very simple, the emphasis lies in software architectures and applications, the system capacity, function encapsulates the information about the real-time clock, waveform stored information will have the appropriate software interface so that correct with other modules that you are connecting to. This system is simple, but the display information-rich, portable to avariety of portable electronic products, for electronic product display interface design provides a new train of thought.Keywords: STM32; LCD multi-level menu; low-power;目录摘要(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((I Abstract(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((II 前言 ............................................................... 4 1方案设计 (5)1.1 设计方案概述 (5)1.2 电路介绍 (5)2 器件介绍 (9)2.1 STM32简介 (9)2.2 MFG240160-3-A LCD介绍 (13)3 软件设计 (16)3.1 STM32单片机的初始化 (16)3.2 液晶屏的初始化 (20)3.3 数据的传输 (20)3.4 字模的提取 (21)3.5 菜单框架的设计 (23)3.6 字模库的建立 (25)3.7 函数库的封装 (25)3.8 菜单标记 (26)3.9 时钟信息的显示 (27)3.10 波形的显示 (28)4 结论 (30)参考文献 (31)致谢 ............................................ 错误~未定义书签。
基于有限状态机的SMS液晶显示终端的研究与实现

发了状态的转移 , 使得系统运行在新的状态下,同时产生输出P 。
2 打 瞒d^h憎自 婶p0 o 4I I m& 瞄 -惜 a
维普资讯
计 算 机 应 用
ComDu erap l a i n t p i to s c
自动化技 术与应用》2 0 0 6年第 2 5卷第 1 期 1
状态 , 程序员不得 不花费大量的精力来协调各标志位 , 这样导致 程序的可读性变差 。 面向过程的程序设计方法要求程序跟随过程
2 有 限状 态机 的 实现
有限状态机的数学模型如下 : () 1 系统运行的状态是有 限的 ,并且在某个时刻系统只处在
一
个状态。 设系统的运行状态是 S 】s l .u 可 以定义系统 【 ,i , s , 0 l… 【 ( 系统运行状态的转移是有某个事件触发的。 没有事件触 2 )
t e i e ffn t t t a h n . e S S c n b e d so e n e e tb h rv r h d a o i ie s a e m c i e Th M a e r a ,t r d a d r s n y t e d i e .
Ke wo d : n t tt c ie LCD;S S sg l hp c mp tr y r sf i saema h n ; i e M ; in ec i o u e
1 引 言
由于没有操作系统 的支持 ,设计一个较为复杂的单片机短
消息显示系统应 用程 序是 比较麻烦 的。如果采用面 向过程 的方 法, 必然引入大量的标志位 , 用来实现键盘输入控制 、短消息 的
某一时刻的状态取值状态集合 S 中的某—值。没有事件的触发是 不可能有状态的转移 。 在某—时刻有事件 e 产生 , 该事件的产生触
51单片机实现多级液晶显示中文菜单

51单片机实现多级液晶显示中文菜单【摘要】以AT89C51单片机控制使用比较普遍的YM12864液晶显示器为基础,介绍了一种采用分页原理实现多级中文菜单操作的方法。
给出了YM12864主要技术参数、显示特性和核心的程序。
设计的中文菜单具有一定的通用性,只需更改其中的菜单项即可将此设计应用到家电、仪器仪表等设备上,为操作者提供友好方便的中文操作界面。
【关键词】单片机;分页;YM12864液晶;中文菜单一、引言目前小型的显示器主要有LCD和LED,LED显示器只能显示数字和有限个英文字符,不能显示汉字,显示内容不直观,操作人员只能根据约定格式了解显示内容。
而LCD则可显示各种汉字和图形,尤其能实现中文菜单显示,为操作者提供方便友好的操作界面,并且功耗低,因此LCD得到广泛应用。
而现在市面上带中文字库的LCD比比皆是,价格适中,且大部分具有与MCU统一的标准接口,为使用LCD实现中文菜单操作提供了很大的方便。
相信更多的电子产品在提升性能的同时,设计更加人性化的中文菜单交互界面,将会使产品具有更广阔的前景。
二、YM12864液晶显示模块简介YM12864汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM (GDRAM)。
主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压)显示内容:128列×64行与MCU接口:8位或4位并行/3位串行多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等。
其引脚功能为通用20脚LCD接口,用户指令集也为通用128*64LCD用户指令集,相关资料很容易获取。
因其内置中文字库,省去了自己造字库的工作量,而只需写入相应的汉字和字符内码即可显示所需要的汉字和字符,这在许多程序开发软件中很容易实现,如:WA VE、KEIL等。
所以使用带中文字库的LCD来实现中文菜单操会更加简便。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012年12卷2期73-75页. 经验交流返回目录
基于状态机的LCD多级菜单设计
贾志成,程敏,宋涛,王彦,康志龙,郭艳菊
1. 河北工业大学信息工程学院,天津300401;
2.天津职业技术大学
1概述
液晶显示器(Liquid Crystal Display,LCD)由于其体积和功耗等因素,非常适合嵌入式环境的使用。
近年来,随着微处理器性能的提高,嵌入式系统实现的功能越来越强大,产生的数据量也越来越大。
相对应地,需要显示的数据量也随之增大。
嵌入式环境下使用LCD显示器,由于条件限制,体积较小,且显示的内容有限。
而且,传统的LCD显示模式总是不加选择地显示所有监控的信息,在监控的信息量非常庞大时会导致不能及时显示用户所需求的信息。
多级菜单显示则是将信息分类显示的一种显示方式,该方式根据用户的选择,对显示信息加以筛选并分级显示,这样既保证用户获取其所需的信息,又能保障信息显示的实时性。
2多级菜单的结构
设计多级菜单的目的在于将需要显示的信息分门归类,方便用户筛选。
所以在设计菜单时需要根据整个系统的功能和要求来设定菜单的级数,以及各级子菜单的个数。
整个多级菜单的拓扑结构为树型结构,主菜单为根节点,子菜单为枝节点,最后一级菜单为叶节点,如图1所示。
图1多级菜单的结构图
3多级菜单的程序设计
3.1循环方式
循环方式的设计思路:预先定义一个包含6个结构元素的结构体、5个字符型和1个指针型。
第1个字符变量存放当前界面的索引号;第2个字符变量存放按下“down(向下)”键时需要跳转到的索引号;第3个字符变量存放按下“up(向上)”键时需要跳转到的索引号;第4个字符变量存放按下“enter(进入)”键时需要跳转的索引号;第5个字符变量存放按下“esc (退出)”键时需要跳转的索引号;第6个变量为函数指针变量,存放当前索引号下需要执行的函数的入口地址。
将所有需要显示的界面其所对应的执行函数和按键索引号以结构体的形式列表存储。
具体实现如下:
typedef struct{
uchardown_index;
ucharup_index;
ucharenter_index;
ucharesc_index;
void (*operate)();
}Key_index_struct;
假设菜单分3级,共10个界面,则有:
Key_index_struct const Key_tab[10]={
{0, 0, 0, 1, 0,(*main_menu)},
{1, 2, 3, 4, 0,(*sub_menu1)},
{2, 3, 1, 5, 0,(*sub_menu2)},
{3, 1, 2, 7, 0,(*sub_menu3)},
{4, 4, 4, 4, 1,(*sub_menu1_1)},
{5, 6, 6, 5, 2,(*sub_menu2_1)},
{6, 5, 5, 5, 2,(*sub_menu2_2)},
{7, 8, 9, 7, 3,(*sub_menu3_1)},
{8, 9, 7, 8, 3,(*sub_menu3_2)},
{9, 7, 8, 9, 3,(*sub_menu3_3)},
};
void Lcd_display(void){
switch(Key_status){
case enter:
Key_fun=Key_tab[Key_fun].enter_index;
break;
case down:
Key_fun=Key_tab[Key_fun].down_index;
break;
case up:
Key_fun=Key_tab[Key_fun].up_index;
break;
case esc:
Key_fun=Key_tab[Key_fun].esc_index;
break;
default:
return;
break;
}
Key_fun_Pt=Key_tab[Key_fun].operate;
(*Key_fun_Pt)();//执行当前按键的操作
}
当微处理器扫描键盘检测到有按键按下时,根据按键按下的类型,返回在当前界面下其所对应的跳转索引号,并执行相应的函数。
由于每个界面的绘制都是由一个独立函数实现的,从循环方式的实现过程中发现,每发生一次按键按下操作都需要重新绘制整个屏幕。
如果核心处理器是低速主频的处理器,在界面切换的时候会闪烁。
而且,每一个界面都有固定不变的索引号,在增加或删除界面的时候需要重新修改整个列表,降低了程序的可移植性。
3.2查询方式
查询方式是通过结构体对自身的递归调用实现菜单的多级嵌套。
结构体通过对自身的两次调用构建双向列表。
一个菜单界面即为一个节点,节点的前驱和后继分别存放其父节点和子节
点的入口地址。
菜单参数的结构体定义如下:
typedef struct Lcd_menu_content{
uchar *lpIcon;//显示图标
uchar *lpText;//显示文本信息
uchar nTextCount; //菜单对应的文本信息的个数
}Lcd_menu_content;
每个界面对应一个节点,节点都定义成如下结构体的变量:
typedef struct Lcd_menu{
struct Lcd_menu*lpfather;//父级
struct Lcd_menu*lpson;//大儿子
uchar nSonCount;//父级的儿子个数
Lcd_menu_content lpIconAndText;
uchar Flag_return;//返回标志
void (*operate)();//处理函数入口地址
}Lcd_menu;
由图1可知,多级菜单的拓扑结构为树型拓扑结构,即每一个节点只有一个父节点和若干个子节点。
所以,对整个叉树进行遍历即可准确地查找到菜单界面所在的节点。
结构体实现的链表如图2所示。
图2结构体链表
查询方式与循环方式相比,由于减少了查表次数,因而改善了MPU的效率;但查询方式占用MPU处理时间过长,不适应需要高速处理数据的应用。
而且,在查询方式中增加或删除节点对程序改动较大,也不适合移植。
3.3状态机方式
状态机是由事件驱动,在各个状态之间跳转。
采用状态机方式时,只需要提供驱动事件(在此设计中驱动事件为有效的按键按下),然后根据按键扫描返回的键值,决定所要跳转的下一状态。
如图3所示,系统启动初始化是显示Main_menu界面,当按键检测有返回值(即有按键按下)时,根据按下的按键所代表的操作跳转到指定的状态。
例如:按下Up或者是down键时,只是在Main_menu界面内高亮显示不同区域;按下Enter时,则要根据原来按下的Up和down键来选择需要跳转的方向,假设在按下Enter之前仅按下一次down键,则key_v的值为2(key_v的值默认为1,即默认选中子菜单的第一项),就跳转为Sub_menu2界面;按下Esc键时,为从子菜单返回到上一级菜单,如果已经是主菜单了则返回的还是主菜单。
图3多级菜单的状态图
由于使用的是状态机的方式,只有发生一次有效的按键,状态才会发生一次跳转。
而且,仅当Enter和Esc键按下时,才会切换界面。
所以即便是在高速MPU应用中,也不会出现屏幕闪烁的效果。
从图3中可以看出,当要发生状态跳转时,目的状态只能是当前状态几个分支预测中的一个,从而不需要遍历整个列表,能够适应高速数据处理的场合。
多级菜单的程序流程如图4所示。
系统上电初始化后显示主菜单,键盘扫描可以通过主程序中循环查询或者中断扫描来实现,最终根据键盘返回的键值选择下一状态。
图5为基于状态机的多级菜单的实现。
图4多级菜单的程序流程图
图5多级菜单的实现
结语
以上三种多级菜单的实现方式均具有很强的实用性。
循环方式和查询方式下,程序结构简单易用,而状态机方式下程序可移植性强。
状态机程序设计不仅可以用在人机接口设计中,还可用于嵌入式通信协议等其他场合中。
参考文献
[1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,1996:1415.
[2] 陆铮,罗嘉.单片机C语言下LCD多级菜单的一种实现方法[J].工矿自动化,2006(1):5051.
[3] 宋晓辉,叶桦,丁昊.基于单片机的多级菜单实现方法改进[J].东南大学学报:自然科学版,2007(37):66.
[4] 陈东,夏遂华.液晶显示多层菜单结构的软件设计[J].电气传动,2001(4):36.
程敏(硕士研究生),研究方向为电子遥测遥控、工业控制、嵌入式系统。
(责任编辑:芦潇静收稿日期:2011-09-06)。