基于状态机的LCD多级菜单设计方案

合集下载

非阻塞模式LCD多级菜单的设计及其数据结构

非阻塞模式LCD多级菜单的设计及其数据结构

第16卷 第4期2007年10月 云南民族大学学报(自然科学版)Journal of Yunnan Nati onalities University (Natural Sciences Editi on )Vol .16 No .4Oct .20073 收稿日期:2007-06-18.作者简介:纳新(1971~),男(回族),硕士研究生,工程师,主要研究方向:嵌入式系统应用.非阻塞模式LC D 多级菜单的设计及其数据结构纳 新1 赵东风2(1、昆明冶研新材料股份有限公司,云南昆明650031;2、云南大学信息学院,云南昆明650091)摘 要 提出一种非阻塞模式LC D 多级菜单的设计,分析了菜单的树形结构,给出了菜单的状态转换模型及其菜单的核心数据结构.并分析菜单实现算法的较小空间复杂度和给出了其数据结构的C51的实现.关键词 非阻塞模式;LC D;多级菜单;数据结构;空间复杂度【中图分类号】TP31111【文献标识码】A【文章编号】1672—8513(2007)04-0347-03Design of Unbl ock Module LCD Multistage Menu and It ’s Data StructureNa Xin 1 Zhao Dongfeng2(1.Kun m ing Metallurgy Reserarch Ne w Materlals Co .,L td,Kun m ing 650031,China;2.Depart m ent of Co mmunicati on Engineering,College of I nfor mati on,Yunnan University,Kun m ing 650091,China )Abstract:This paper intr oduces a design of multistage menu,and analyzes the tree structure of it .A ls o,the state conversi on model and the core data structure of menu is given .The paper analyzes the s pace comp lexity of al 2gorithm s,it sho ws that the s pace comp lexity of our algorith m is l ower .The data structure of C51is als o obtained in this paper .Key words:unbl ock module;LCD;multistage menu;data structure;s pace comp lexity1 概述目前,使用LCD 模块作为智能仪表的人机接口已成为主流趋势,而软件实现菜单驱动的事件处理的人机交互方式,是目前实现人机交互的首选方式.如何在LCD 上实现多级菜单的操作也就成为了必须要解决的问题.LCD 上实现多级菜单的操作有多种方式,但大多都采用阻塞模式LCD 多级菜单设计.而阻塞模式LCD 多级菜单的设计会给操作带来很多不便.比如操作出现错误,系统就停顿下来等待正确的操作后才能进入下一步操作,如果操作者不能进行正确操作,那么系统将一直处于等待状态;进入底层菜单后,如只有单一退出键时,只能逐层推出.多种退出键时,又带来退出操作上的不便利等.非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该操作不会阻塞当前操作,而会立刻返回.非阻塞模式LC D 多级菜单的设计,使得各种操作后程序就返回到操作结束,不必等待正确的操作才结束菜单操作.操作的结果靠定义状态来表示,其关键在于定义了多种操作状态符,每当进入菜单操作后就判断操作状态来执行相应的操作.这种设计方式使得菜单的操作者,不因不正确的操作而使系统停顿下来,系统能较为方便的返回到工作状态等.2 硬件环境和LCD 菜单实现的功能在智能仪表的液晶显示设备中,目前广泛采用的是128×64图形点阵液晶模块.该类液晶可以实现16×16点阵的汉字4行8列,本文就是基于F M12864A -3图形点阵液晶模块实现非阻塞模式LC D 多级菜单的设计.同时将set (设置)、right (右移)、up (下移)、exit (退出)4个按键分别和单片机的I/O 口相连,这样就很容易实现按键值的读取和键值的判断.菜单设计为二级菜单,菜单形式如图1所示.仪表在工作状态下,按set 键进入一级菜单、按exit 键退出一级菜单;仪表在一级菜单下,按set 键进入二级菜单、按up 键滚动反色显示菜单条、按exit 退出743一级菜单,返回工作状态;在二级菜单下,按set 键进入参数设置状态、按right 和up 键进行参数修改、按exit 键退出二级菜单,返回工作状态.图1 菜单形式3 菜单状态转换模型非阻塞模式LCD 多级菜单设计的关键在于操作状态的定义.我们定义了五种操作状态,状态1为无操作状态:其状态标识符为假;状态2为进入一级菜单状态:其标识符为setup _select M enu;状态3为进入二级菜单:其状态标识符为setup _modi D ata .状态4为:在二级菜单中输入参数后有些参数需进行确认,其标识符为setup_confir m.状态5为超时退出(对于在不同状态下没有键操作,超过一定时间后会使菜单状态发生变化)菜单状态转化模型的可见图2所示.键操作后程序进入菜单程序,判断现程序处于何种状态,目前按何操作键,菜单状态根据判定进行转换,程序执行并不停顿下来.菜单状态转变后立即更新菜单状态.图2 菜单状态转换模型4 菜单数据结构的设计菜单的组织结构是一种树形结构,其结构如图3所示.此树形结构可以用长子兄弟法表示,其中左分支为长子,右分支为兄弟,表示结果见图4.由于菜单操作时,有时需在某一子菜单内反复操作,也就是在遍树结构时,需要有父节点的信息,才能较为方便的返回父节点.如果采用带双亲的链式二叉树,那么一个节点就必须多出3个指针(父亲指针,长子指针、兄弟指针)的存储空间.在单片机存储空间较为紧张的情况下,这是难以接受的.为此我们构造了一级菜单的数据结构和二级菜单的数据结构,通过一级菜单数据项的子项信息能寻址到二级菜单项,进而完成长子兄弟法对菜单树的表示[1].由于菜单的各项数据类型差别较大,难以用一种统一的数据类型来表示所有数据,于是将全体数据存入全体参数结构体中(见4.2),并设计了一种统一的参数项属性数据结构(见4.3).在遍历到二级菜单子节点时,首先读取该节点参数项属性,根据参数项属性和一级菜单中给出的二级菜单中第一子项的位置Par mOffset,计算出该节点的存储位置,并读取相应的数据后根据操作状态来进行操作.图3 菜单的组织结构图4 菜单树本文构造的数据结构实现如下:4.1 一级菜单的数据结构在菜单树中,一级菜单项为树结构前几层的兄弟节点,二级菜单项为一级菜单对应项的儿子节点.针对菜单树中的一级菜单项结点a 、b 、c,定义了如下结构体://一级菜单项结构typedef struct843云南民族大学学报(自然科学版) 第16卷{ucharMenuStrI d;//一级菜单名称字符串编号uchar Par mNu m;//相应二级菜单中子参数项数目uchar Par mOffset;//相应二级菜单中第一子项对应全体参数结构的位置}Main MenuStruct;实例化一级菜单:Main MenuStruct code Main2 Menu[3];当菜单状态转入setup_select M enu状态后,通过up键进行菜单滚动时,程序执行Menu I d++操作,得到相应的Main Menu[Menu I d]数据来得出相应一级菜单名称(菜单名称用于显示)和其长子的地址.对于一级菜单项节点,只需两个虚拟指针Par mNu m 和Par mOffset就可表示该树结构,其维持树形结构的空间复杂度为0(2n)[2].4.2 全体参数结构体对二级菜单中全部参数用如下结构体变量存储://全体参数结构typedef struct{uchar Pass wordU ser[4];//一级参数设置密码fl oat ST D;//校正液体密度fl oat S1;//校正液体计数率uchar Pass wordSys[4];//系统密码fl oat SSG;//悬浮固体密度…uchar LoadSettings;//恢复设置uchar Pass wordTri m[4];//输出设置密码…uchar SaveSettings;//保存设置}Par mStruct;实例化全体参数Par mStruct Par m;4.3 参数项属性数据结构参数项属性的结构体,可以表达全部各类参数的属性.其参数项属性结构体如下://参数项属性结构typedef struct{ucharMode; //参数类型ucharMax Value;//参数中某一位最大允许值(浮点参数固定为0~9)uchar T otal L en;//参数的总长度uchar Dec Len;//浮点参数的小数长度fl oatMaxFl oat;//浮点参数对应的上限值fl oatM inFl oat;//浮点参数对应的下限值uint16Offset;//某项对应全体参数结构的地址偏移量}Par mA ttrStruct;实例化参数项属性Par mA ttrStructcode Par mA ttr[24];当遍历二级菜单子节点时,根据某项参数其属性的Offset(某项对应全体参数结构的地址偏移量)和对应一级菜单项的Par mOffset(相应二级菜单中第一子项对应全体参数结构的位置)即可计算出其在Par mStruct中的位置,从而能从全部参数结构体中读出该参数.对于二级菜单项节点,只需1个虚拟指针Offset就可表示该树结构,其维持树形结构的空间复杂度为0(n)[3].由于二级菜单项节点数目远大于一级菜单项节点数,所以从算法的空间复杂度上可以看出,本算法的空间复杂度约为0(n),而带双亲的链式二叉树的空间复杂度约为0(3n).算法操作上也较为简单,能比较好地适应单片机存储空间较为紧张的环境.5 结论本文给出了一种非阻塞模式LCD多级菜单的设计,并在分析菜单结构的基础上,构造了一种特殊的长子兄弟法表示该菜单树,并分析了其较小的空间复杂度,能比较好地适应单片机存储空间较为紧张的环境.该方法已在作者开发的智能仪表上得到成功应用,其可广泛F应用于单片机系统的LCD多级菜单设计中.参考文献:[1] 李敏通,张战国.一种建立单片机应用系统菜单的新方法[J].计算机工程,2006,32(16):259-273.[2] 马忠梅,马岩,张凯,等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1997.[3] 孙涵芳,徐爱卿.MCS-51/96系列单片机原理及应用[M].北京:北京航空航天大学出版社,1992.(责任编辑 万志琼)943第4期 纳新等:非阻塞模式LCD多级菜单的设计及其数据结构。

一种易于移植的单片机液晶显示多级菜单设计

一种易于移植的单片机液晶显示多级菜单设计

一种易于移植的单片机液晶显示多级菜单设计王勇【摘要】LCD display as a human-computer interaction is very popular in various application situations of embedded microcontroller systems. However, general LCD display menu design is a little bit complicated, and does not have the portability, therefore the complexity in development and system maintenance and the cost are increased. In this paper we introduce the window and message mechanisms of Windows Operating System, and design a multilevel menu. The core of the menu is a universal window engine which does not depend on specific hardware and the content of menu. Research and application show that the menu design has the characters of simple structure, easy to use, little resource consumption, portable and so on. In the end of the paper we present an application example running in the FYD12864 LCD module.%在单片机嵌入式系统的许多应用场合均采用液晶显示器作为人机交互的方式,然而通常的液晶显示菜单设计较为复杂,且基本不具备可移植性,从而增加了开发、维护的复杂性和成本.引入Windows系统下的窗口和消息机制,设计一个多级菜单,该菜单的核心部分是一个不依赖具体硬件和菜单内容的通用的窗口引擎.研究和应用表明,该菜单设计具有结构简单、使用方便、占用资源少以及易于移植等特点.最后给出一个在FYD12864液晶模块上使用此方法的应用案例.【期刊名称】《计算机应用与软件》【年(卷),期】2011(028)012【总页数】6页(P263-268)【关键词】单片机;液晶显示;菜单;窗口引擎【作者】王勇【作者单位】电子科技大学四川成都610054东莞电子科技大学电子信息工程研究院广东东莞523808【正文语种】中文【中图分类】TP3110 引言单片机系统,特别是8位单片机系统通常可用资源较少,速度相对较慢,一般不适合部署操作系统,更谈不上图形引擎了。

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

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

单片机C语言下LCD多级菜单的一种实现方法(转)2012-1-10 00:45阅读(1)单片机菜单程序#include#include#define SIZE_OF_KEYBD_MENU 20 //菜单长度uchar KeyFuncIndex=0;//uchar KeyFuncIndexNew=0;void (*KeyFuncPtr)(); //按键功能指针typedef struct{uchar KeyStateIndex; //当前状态索引号uchar KeyDnState; //按下"向下"键时转向的状态索引号uchar KeyUpState; //按下"向上"键时转向的状态索引号uchar KeyCrState; //按下"回车"键时转向的状态索引号void (*CurrentOperate)(); //当前状态应该执行的功能操作} KbdTabStruct;KbdTabStruct code KeyTab[SIZE_OF_KEYBD_MENU]={{ 0, 0, 0, 1,(*DummyJob)},//顶层{ 1, 2, 0, 3,(*DspUserInfo)},//第二层{ 2, 1, 1, 9,(*DspServiceInfo)}, //第二层{ 3, 0, 0, 1,(*DspVoltInfo)},//第三层>>DspUserInfo的展开{ 4, 0, 0, 1,(*DspCurrInfo)},//第三层>>DspUserInfo的展开{ 5, 0, 0, 1,(*DspFreqInfo)},//第三层>>DspUserInfo的展开{ 6, 0, 0, 1,(*DspCableInfo)},//第三层>>DspUserInfo的展开...........{ 9, 0, 0, 1,(*DspSetVoltLevel)}//第三层>>DspServiceInfo的展开..........};void GetKeyInput(void){uchar KeyValue;KeyValue=P1&0x07; //去掉高5bitdelay(50000);switch(KeyValue){case 1: //回车键,找出新的菜单状态编号{KeyFuncIndex=KeyTab[KeyFuncIndex].KeyCrState;break;}case 2: //向上键,找出新的菜单状态编号{KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState; break;}case 4: //向下键,找出新的菜单状态编号{KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDnState; break;}default: //按键错误的处理......break;}KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate; (*KeyFuncPtr)();//执行当前按键的操作}//其中KeyTab的设计颇费尽心机。

lCD5110 多级菜单

lCD5110 多级菜单

void (*KeyFuncPtr)(); //定义按键功能指针
//定义类型
typedef struct
{
unsigned char KeyStateIndex; //当前的状态索引号
unsigned char KeyUp; //按下向上键时的状态索引号
{8,7,6,3,8, (*Menu2_2)}, //第三层菜单 选择第2行,跳到第1行(up),跳到第0行(down),跳到第1层第0行(lift),跳到第2行(Right)
};
//=====================================================================
LCD_DispStringAscii6x8(0, 1, " Menu2-1");
LCD_DispStringAscii6x8(0, 2, " Menu2-2");
}
void Menu2_1(void) //在第2层菜单选中第1个选项
{
LCD_ClrScr(); //清屏
LCD_DispStringAscii6x8(0, 0, " Menu2-0");
} StateTab;
//=====================================================================
//数据结构数组
StateTab code KeyTab[]=
{
{0,2,1,0,3, (*Menu0_0)}, //顶层菜单 索引,上,下,左,右
(*KeyFuncPtr)(); //执行当前的按键操作

12864液晶多级菜单设计

12864液晶多级菜单设计
索引号即用户想要执行哪个函数的代号,然后有三个键,用户可以自己定义别的按键,最后一个是函数指针,即索引号对应的函数。然后在定 义一个结构体数组,如下 key_table code table[n]= { {0,2,1,3,(*fun1)}, {1,0,2,4,(*fun2)}, {2,1,0,5,(*fun3)}, {3,0,6,3,(*fun4)}, {4,1,6,4,(*fun5)}, {5,2,6,5,(*fun6)}, {6,0,0,0,(*fun7)}, ............ }; 其中 n 为函数数组大小。下面详细介绍 key_table code table[n]里面的值是怎么确定的。 首先可以先这样定义该数组 key_table code table[n]= { {0,x,y,z,(*fun1)}, {1,x,y,z,(*fun2)}, {2,x,y,z,(*fun3)}, {3,x,y,z,(*fun4)}, {4,x,y,z,(*fun5)}, {5,x,y,z,(*fun6)}, {6,x,y,z,(*fun7)}, ............ }; 其中,x,y,z 是未知数,先不确定,他们对应的是三个键按下要指示的索引值,如果四个键,就有四个未知数,在确定他们之前,必须要了解自己函数执行什么命令。加入开始时 时执行数组里面的第一个即 table[0],而想在此按上键执行函数 fun6,那么 table[0]里面需要这样设置{0,5,y,z,(*fun1) }, 同样,如果希望按下键执行 fun7则需要设置为{0,x,6,z,(*fun1) } , 如果希望按确认键执行 fun3则需要设置为{0,x,y,2,(*fun1) } ; 如果上面三种情况都想要就设置为{0,5,6,2,(*fun1) }. 其它数组元素一次类推。这一步做完了看主程序里面(主要是 while(1)里面) 。 /*******************find index****************************/ switch(key) { case 0x44: break; case 0x24: break; case 0x14: break; default:break; } current_operation_index=table[func_index].current_operation; (*current_operation_index)();// 执行当前操作函数 其中,key 是返回的按键值,这个用户视情况而定, 下面是详细的例子, 主要是以结构体为基础设计的,以12864显示函数代替了用户需要的函数功能,只需要修改相应的函数和索引号,就可以达到任意界面切换了是小弟研究了还久才搞定的,虽然网 上也有这些,但是都不够系统,只有基本的东西,这篇例子希望能够给读者一些有用的东西,仅供参考哦! : #include <reg52.h> #include "fun.h" func_index=table[func_index].down;// 向下翻 func_index=table[func_index].enter;// 回车 func_index=table[func_index].up; // 向上翻

LCD12864 多级菜单

LCD12864 多级菜单

首先定义一个菜单结构typedef struct menu//定义一个菜单{u8 range_from,range_to; //当前显示的项开始及结束序号 u8 itemCount;//项目总数u8 selected;//当前选择项u8 *menuItems[17];//菜单项目struct menu **subMenus;//子菜单struct menu *parent;//上级菜单,如果是顶级则为null void (**func)();//选择相应项按确定键后执行的函数}Menu;Menu MainMenu = { //定义主菜单0,3,4,0,//默认显示0-3项,总共4项,当前选择第0项 {"设置1 \x10","设置2 \x10","输入指令发送","查询\x10"}};Menu searchMenu = {//查询菜单0,3,6,0,{"记帐记录明细","未采集记录数","设备机号","本机IP地址","记录空间大小","软件版本"}};Menu *currentMenu;//当前的菜单用于显示菜单项void display(u8 line) //显示菜单项并设置选中的项反白{int i;line = 3-(currentMenu->range_to-line);Lcd_Fill(0x00);for(i = 0;i<4;i++){Lcd_Disp(i+1,0,currentMenu->menuItems[i+currentMenu->range_from]);}highlight(0,line,8,255);//反白显示指定行}void func(void){printf("hello\r\n");}初始化菜单:void initMenu(){MainMenu.subMenus = malloc(sizeof(&MainMenu)*4);MainMenu.subMenus[0] = NULL;//第1到3项没有子菜单置null,选择后程序会调用func中相应项中的函数MainMenu.subMenus[1] = NULL;MainMenu.subMenus[2] = NULL;MainMenu.subMenus[3] = &searchMenu;//第四项查询有子菜单MainMenu.func = malloc(sizeof(&func)*4);MainMenu.func[0] = NULL;MainMenu.func[1] = NULL;MainMenu.func[2] = &func;//当选择了并按了确定,会执行func函数MainMenu.func[3] = NULL;MainMenu.parent = NULL;//表示是顶级菜单searchMenu.subMenus = malloc(sizeof(&searchMenu)*6);searchMenu.subMenus[0] = searchMenu.subMenus[1] = searchMenu.subMenus[2] = searchMenu.subMenus[3] = searchMenu.subMenus[4] = searchMenu.subMenus[5] = NULL;searchMenu.func = malloc(sizeof(&printf)*6);searchMenu.func[0] = searchMenu.func[2] = searchMenu.func[2] = searchMenu.func[3] = searchMenu.func[4] = searchMenu.func[5] = NULL;searchMenu.parent = &MainMenu;//上一级菜单是MainMenu.进入查询子菜单后按返回键,将会显示这个菜单项currentMenu = &MainMenu;}mainint main(void){delay_init();uart_init(9600);Lcd_Init();KEY_Init();initMenu();display(currentMenu->selected);while(1){key = KEY_Scan();if(key == 0){delay_ms(10);continue;}printf("key %d is press\r\n",key);switch(key){case 12://向上if(currentMenu->selected == 0)//到了第一项break;else{currentMenu->selected--;if(currentMenu->selected < currentMenu->range_from)//更新显示的区域 {currentMenu->range_from = currentMenu->selected;currentMenu->range_to = currentMenu->range_from+3;}display(currentMenu->selected);break;}case 8://向下if(currentMenu->selected == currentMenu->itemCount-1)break;else{currentMenu->selected++;if(currentMenu->selected>currentMenu->range_to){currentMenu->range_to = currentMenu->selected;currentMenu->range_from = currentMenu->range_to-3;}display(currentMenu->selected);break;}case 4://Enter键{if(currentMenu->subMenus[currentMenu->selected] !=NULL){currentMenu = currentMenu->subMenus[currentMenu->selected]; display(0);}else{if(currentMenu->func[currentMenu->selected] != NULL){currentMenu->func[currentMenu->selected]();//执行相应的函数 display(currentMenu->selected);//返回后恢复原来的菜单状态}}break;}case 3://返回键{if(currentMenu->parent!=NULL)//父菜单不为空,将显示父菜单{currentMenu = currentMenu->parent;display(currentMenu->selected);}break;}default:break;}delay_ms(10);}}void Lcd_Disp(unsigned char x,unsigned char y,unsigned char *s) {Lcd_Write_Cmd(0x30); //进入标准模式LCD_Set_XY(x,y);while (*s){Lcd_Write_Data(*s);s++;}Lcd_Write_Cmd(0x36); //返回图形模式}void highlight(uchar x,uchar y,uchar width,u8 mode) //反白,X值为0-7,Y值为0-3,width为行反白格数{uchar i,j,flag=0x00;if(y>1){flag=0x08;y=y-2;}Lcd_Write_Cmd(0x34); //写数据时,关闭图形显示,且打开扩展指令集for(i=0;i<16;i++){Lcd_Write_Cmd(0x80+(y<<4)+i);Lcd_Write_Cmd(0x80+flag+x);for(j=0;j<width;j++){Lcd_Write_Data(mode);Lcd_Write_Data(mode);}}Lcd_Write_Cmd(0x36); //写完数据,开图形显示}。

LCD12864多级菜单课程设计

LCD12864多级菜单课程设计

LCD12864多级菜单课程设计一、课程目标知识目标:1. 理解LCD12864液晶显示屏的基本工作原理和接口技术。

2. 掌握多级菜单的设计方法,包括菜单结构、界面布局及跳转逻辑。

3. 学会编写程序代码实现LCD12864多级菜单的显示与操作。

技能目标:1. 能够运用所学知识设计出结构清晰、界面友好的多级菜单界面。

2. 熟练使用相关编程语言和开发工具,完成程序编写和调试。

3. 培养学生的动手操作能力和团队协作能力,提高问题解决能力。

情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发学习热情。

2. 培养学生严谨、细心的学习态度,养成良好的编程习惯。

3. 增强学生的创新意识,鼓励学生敢于尝试、勇于实践。

分析课程性质、学生特点和教学要求,本课程目标旨在帮助学生在掌握LCD12864多级菜单设计的基础上,提高实际操作能力,培养学生的创新思维和团队协作精神。

通过本课程的学习,使学生能够在实际项目中运用所学知识,为我国电子信息产业的发展做出贡献。

同时,注重培养学生的情感态度价值观,使学生在学习过程中形成积极向上的人生态度。

二、教学内容1. LCD12864液晶显示屏原理介绍:包括显示原理、接口技术、指令集等基本知识。

- 教材章节:第三章第二节- 内容列举:LCD12864工作原理、接口类型、指令功能。

2. 多级菜单设计方法:- 教材章节:第五章- 内容列举:菜单结构设计、界面布局、跳转逻辑、操作流程。

3. 编程实现LCD12864多级菜单:- 教材章节:第六章- 内容列举:编程环境搭建、代码编写、程序调试、功能实现。

4. 实例分析与操作:- 教材章节:第七章- 内容列举:典型多级菜单实例、操作方法、优化技巧。

5. 动手实践与团队协作:- 教材章节:第八章- 内容列举:实践任务分配、协作流程、成果展示。

根据课程目标,教学内容分为五个部分,确保学生系统掌握LCD12864多级菜单设计的相关知识。

教学大纲明确指出各部分内容的安排和进度,以及教材对应的章节和具体内容。

LCD12864 多级菜单

LCD12864 多级菜单
Lcd_Write_Data(mode); Lcd_Write_Data(mode); } } Lcd_Write_Cmd(0x36); //写完数据,开图形显示 }
searchMenu.subMenus = malloc(sizeof(&searchMenu)*6); searchMenu.subMenus[0] = searchMenu.subMenus[1] = searchMenu.subMenus[2] = searchMenu.subMenus[3] = searchMenu.subMenus[4] = searchMenu.subMenus[5] = NULL; searchMenu.func = malloc(sizeof(&printf)*6); searchMenu.func[0] = searchMenu.func[2] = searchMenu.func[2] = searchMenu.func[3] = searchMenu.func[4] = searchMenu.func[5] = NULL; searchMenu.parent = &MainMenu;//上一级菜单是MainMenu.进入查询 子菜单后按返回键,将会显示这个菜单 项
Lcd_Write_Data(*s); s++; } Lcd_Write_Cmd(0x36); //返回图形模式 }
void highlight(uchar x,uchar y,uchar width,u8 mode)
//反
白,X值为0-7,Y值为0-3,width为行反白格数
{
uchar i,j,flag=0x00;
break; } case 8://向下 if(currentMenu->selected == currentMenu->itemCount-1) break; else { currentMenu->selected++; if(currentMenu->selected>currentMenu->range_to) {

点阵式LCD菜单式用户界面的设计_叶廷东

点阵式LCD菜单式用户界面的设计_叶廷东

图 2 L CD 缓冲区 在此区间中, 系统用一个字节来表示当 前显示的窗口序号, 因此系统最多可以有 255 个窗口。本系统共设计了 7 个窗口, 分别 对 应于“数字 式输入、教导 式输入、试机、补
毛、植毛、产品参数和帮助”7 个工作界面。系 统再用一个字节来表示当前菜单, 当前菜单 主要用于光标的管理, 它表示光标正位于当 前菜单处。缓冲区的最后一部分为参数地址, 用两个字节来 存放显示内容存放的开 始地
0 概述
液晶显示器是一种应用十分广泛的显示 器件, 具有低功耗、重量轻和超薄等特点, 被 广泛应用在袖珍式仪点阵式 L CD 不仅可以显示字符与数 字, 还可以显示各种图形、曲线和汉字, 并且 可以实现屏 幕的滚动, 具 有动画、分区 开窗 口、反转、闪烁等功能。本文采用智能液晶终 端 KY—D104A ( 显示点阵 640×480) 。实现 了 5 轴植毛机控制系统中文界面的设计。
图 4 光标移动流程图 系统为了通过光标来选择菜单, 需要为 每个用户界面窗口建立一张光标位置和菜单 项、对话框参数地址的对照表。在菜单显示的 时候, 可由光标位置在窗口序号对应的对照 表里查找该菜单项的参数地址, 然后发送到 LCD 显示缓冲区, 由 LCD 显示程序进行发 送显示。如果在对照表中找不到, 则不进行任 何操作。
《电脑与信息技术》2004 年 第 5 期
·5 1·
栏, 在这一栏中有 7 个工作界面和两种工作 模式供用户选择, 他们的选择符号用“▲”来 表示。7 个工作界面即为 7 个主菜单。系统可 以通过这些主菜单选择不同的工作界面, 然 后显示和输入不同的参数。工作界面通过右
边的“工作状态/ 操作提示”栏显示。在图 1 用 户界面窗口的最下面一栏中, 左边有一个时 间项用来动态显示当前工作的时间, 右边的 3 个菜单项用于选择功能。

课程设计(论文)基于lcd液晶显示的多功能数字钟的设计(附pcb图及电路原理图)

课程设计(论文)基于lcd液晶显示的多功能数字钟的设计(附pcb图及电路原理图)

目录1前言 (1)2总体方案设计 (2)2.1设计内容 (2)2.2设计内容 (2)2.3方案论证 (3)2.4方案选择 (4)3单元模块设计 (5)3.1各单元模块功能介绍及电路设计 (5)3.1.1 温度采集电路 (5)3.1.2 DS1302时钟电路 (5)3.1.3 串行通信接口电路 (6)3.1.4 USB连接电路 (6)3.1.5 按键电路 (7)3.1.6液晶显示显示电路 (7)3.2特殊器件介绍 (7)3.2.1 STC89C52单片机芯片 (7)3.2.2 DS1302介绍 (8)3.2.3 温度传感器DS18B20 (9)3.2.4 液晶显示LCD1602 (9)4软件设计 (10)4.1软件选择 (10)4.2软件设计流程 (10)4.2.1 温度采集流程 (11)4.2.2 日期数据处理流程 (12)5系统的仿真及调试 (13)5.1系统仿真 (13)5.2硬件调试 (13)5.3软件调试 (14)6结论 (16)7总结与体会 (17)7.1设计小结 (17)7.2设计收获及改进 (17)7.3致谢 (17)8参考文献 (18)附录: (19)1前言单片机是指一个集成在一块芯片上的完整计算机系统。

尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。

同时集成诸如通讯接口、定时器,实时时钟等外围设备。

而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

单片机也被称为微控制器(Microcontroller),它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

单片机诞生于20世纪70年代末,经历了SCM、MCU、SOC三大阶段。

STC单片机完全兼容51单片机,并有其独到之处,其抗干扰性强,加密性强,超低功耗,可以远程升级,内部有专用复位电路,价格也较便宜,由于这些特点使得 STC 系列单片机的应用日趋广泛。

高效的LCD模块显示程序设计方法

高效的LCD模块显示程序设计方法

%引言现在很多电子产品都采用&’(模块,特别是点阵式&’(模块能够显示出各种形式的界面,以表现丰富的功能。

但丰富的表现功能需要相应的界面显示应用程序。

而界面的形式与使用者的喜好有关。

往往会根据不同对象调整显示界面,这就给界面设计带来了较多的工作量。

此外产品的功能增加时,作为人机接口的显示界面程序基本上都要重新设计编写,这必然会增加成本和延长设计周期。

为了减少这种重复性的劳动,作者用一种高效的设计方法来设计界面显示程序。

先对显示界面分析,它往往由不变的背景信息和反映系统工作状态的动态信息所合成。

其中,背景信息尽管在工作时不变,但丰富的画面功能却是由其表现的。

而反映系统工作状态的动态信息根据产品的功能,在每一界面中需要显示的个数是确定的,但其在界面中的位置会根据背景设计而改变。

根据此基本特点,作者用一种高效的方法设计界面显示解释程序,即对预先用其他手段设计好的背景和动态数据进行组合,形成完整的显示界面。

显示程序的基本设计方法如下:将显示界面的设计和界面的解释执行程序分开。

其中显示界面可通过)’机采用一般的文本编辑器等设计。

在设计界面的同时,设定动态数据在界面上的显示位置。

对每一显示界面赋一调用名。

最后用自行设计的界面编译程序(用(*+,-.编写)进行编译。

界面显示解释程序根据界面调用名,读取界面;对界面进行分析,在动态数据显示位置,填入相应的动态数据。

直到完成界面显示。

界面显示解释程序一旦编写完成后就不必再更改了,当需要修改界面时,只需要通过一般的文本编辑器重新设计界面,编译后替代原界面(用相同的调用名)即可,若要添加新界面,只需要设计好界面并赋一新调用名,并且在程序中添加调用显示程序的语句即可。

采用该方法,程序只对界面特征分析,与界面显示文字无关,因此,只要设计界面符合显示程序的调用规则,可以显示不同的语言。

下面以南京国显!#"/0#点阵&’(为例1%2。

根据此方法设计编写的界面显示程序以及用(*+,-.编写的界面编译程序都已经在南京大学光通信研究中心的智能光配线架项目中实际使用了,用于机架上主机显示单元信息界面的设计和显示。

LCD多级菜单课程设计

LCD多级菜单课程设计

LCD多级菜单课程设计一、课程目标知识目标:1. 让学生理解LCD多级菜单的概念及其在信息技术中的应用。

2. 掌握设计LCD多级菜单的基本步骤和编程原理。

3. 学习并运用相关的硬件控制知识,实现菜单界面的显示和操作。

技能目标:1. 培养学生运用编程软件进行LCD多级菜单设计的能力。

2. 提高学生解决问题的能力,能够根据实际需求调整菜单设计。

3. 培养学生团队协作和沟通能力,通过小组合作完成课程项目。

情感态度价值观目标:1. 培养学生对信息技术课程的兴趣和热情,激发学生主动学习的积极性。

2. 增强学生的创新意识,鼓励学生勇于尝试,发挥个人想象力和创造力。

3. 培养学生严谨、认真的学习态度,养成良好的编程习惯。

课程性质:本课程为信息技术课程,结合硬件控制与编程实践,旨在提高学生的动手能力、编程思维和创新能力。

学生特点:六年级学生具备一定的信息技术基础,对编程有一定了解,好奇心强,喜欢动手实践。

教学要求:结合学生特点,注重理论与实践相结合,关注个体差异,提高学生的综合素养。

通过课程学习,使学生能够独立完成LCD多级菜单的设计与实现,并在此过程中培养良好的团队协作能力和创新精神。

二、教学内容1. LCD基础知识:介绍LCD的基本原理、结构及其在显示技术中的应用。

- 教材章节:第三章第二节- 内容:LCD显示原理、LCD显示模块特点。

2. 多级菜单设计原理:讲解多级菜单的概念、设计原则和实现方法。

- 教材章节:第五章第一节- 内容:多级菜单结构、菜单设计流程、界面布局。

3. 编程语言与开发环境:学习使用Arduino编程语言和开发环境进行LCD多级菜单编程。

- 教材章节:第四章- 内容:Arduino编程基础、串口通信、LCD库函数使用。

4. 硬件控制与接口:了解LCD模块与主控板的连接方式,学习相关硬件控制知识。

- 教材章节:第六章第二节- 内容:I2C通信协议、LCD模块接线方法、硬件控制指令。

5. 实践操作:分组进行LCD多级菜单设计,实现菜单界面显示与操作功能。

基于STM32单片机LCD多级菜单的设计

基于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)致谢 ............................................ 错误~未定义书签。

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

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

单片机汇编语言下LCD多级菜单的一种实现方法万方数据万方数据单片机汇编语言下LCD多级菜单的一种实现方法作者:高璇作者单位:安徽理工大学电气与信息工程学院,安徽,淮南,232001;中煤北京煤矿机械有限责任公司设备动力部,中国,北京,102400 刊名:科技信息英文刊名:SCIENCE & TECHNOLOGY INFORMATION年,卷(期):2010,(31)被引用次数:0次参考文献(3条)1.ST7920控制器系列中文字库液晶模块中文说明书 20052.STC89C51RC/RD+系列单片机器件手册 20033.蔡美琴MCS-51系列单片机系统及其应用 2005相似文献(10条)1.会议论文宋晓辉.叶桦.丁昊基于单片机的多级菜单实现方法改进2007介绍了一种在C语言环境下,基于单片机的多级菜单实现方法.该方法从菜单的功能结构发,在程序设计中做了几点改进.首先对菜单数据项和功能函数各自进行独立设计,通过在数据结构中增加按键有效标志、字符串指针、存储器地址以及与复用相关的元素,实现了两者源代码空间的有效分离,从而大大提高了程序的可维护性;其次引入菜单项复用的思想,简化了程序结构.该设计的多级菜单在自动售货机的服务模式的实际应用表明,此改进方法使菜单设计变得更为简单方便,软件通用性更高,维护更容易.2.期刊论文陆铮.罗嘉单片机C语言下LCD多级菜单的一种实现方法-工矿自动化2006(1)介绍了在C语言环境下,在LCD液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型.3.期刊论文宋晓辉.叶桦.丁昊.Song Xiaohui.Ye Hua.Ding Hao基于单片机的多级菜单实现方法改进-东南大学学报(自然科学版)2007,37(z1)介绍了一种在C语言环境下,基于单片机的多级菜单实现方法.该方法从菜单的功能结构发,在程序设计中做了几点改进.首先对菜单数据项和功能函数各自进行独立设计,通过在数据结构中增加按键有效标志、字符串指针、存储器地址以及与复用相关的元素,实现了两者源代码空间的有效分离,从而大大提高了程序的可维护性;其次引入菜单项复用的思想,简化了程序结构.该设计的多级菜单在自动售货机的服务模式的实际应用表明,此改进方法使菜单设计变得更为简单方便,软件通用性更高,维护更容易.4.期刊论文唐炜.卢道华.顾金凤单片机系统中液晶显示多级菜单的软硬件设计-华东船舶工业学院学报(自然科学版)2003,17(1) 以8031单片机控制GXM-12864液晶显示器为例,通过建立小字库,结合具体实例介绍了实现多级菜单显示的方法.当菜单显示内容改变时,只需修改相应参数,而不修改程序.文中提及的硬件电路和软件设计通用性较强,具有更一般的实际意义.5.期刊论文汪高勇.宋毅恒.尚举邦.WANG Gao-yong.SONG Yi-heng.SHANG Ju-bang C51与单片机系统多级菜单的模块化设计-光电技术应用2009,24(2)介绍了一种基于单片机系统的多级菜单模块化编程方法.该方法从模块化的角度将菜单编程简单地划分为共用键盘处理和菜单模块两部分,使得菜单具有通用的模块化结构,方便了菜单的加载与卸载,增强了C51语言在单片机系统人机接口的设计,软件结构清晰,维护方便.6.期刊论文朱青.张兴敢.柏业超.ZHU Qing.ZHANG Xing-gan.BAIYe-chao一种多功能水情自动测报系统设计-现代电子技术2011,34(3) 为满足当前水情数据测报的要求,设计实现了一种多功能水情自动测报系统.该系统基于PIC16F887单片机、GSM模块,可接收多种形式的传感器信号,并存储在大容量的FLASH存储器中,同时通过GSM模块发送水情数据和报警信息.另外,该系统借助LCD液晶显示屏可显示多级中文菜单,方便控制和查询.该系统的功耗低,体积小,功能扩展性强,经过多次测试,操作方便,工作可靠,在水情自动测报领域具有很大的推广价值.7.期刊论文王运良.张建忠.程明.WANG Yun-liang.ZHANG Jian-zhong.CHENG Ming基于ATmega16L单片机的中文菜单显示技术-江苏电器2006(1)针对目前电力测量仪表广泛使用中文液晶显示器的趋势,介绍一种由ATmega16L单片机和液晶MSC-G12864组成的多级中文菜单滚动显示系统,应用结果证明该实现方法简单,系统易于扩展和维护.描述了硬件电路的结构,详细分析了多级菜单软件的实现方法,包括中英文字符的存储,菜单项的构成以及整个菜单的滚动显示,给出了部分程序清单.8.期刊论文李敏通.张战国.LI Mintong.ZHANG Zhanguo一种建立单片机应用系统菜单的新方法-计算机工程2006,32(16) 提出了一种用一维线性数组实现树形拓扑结构多级菜单的方法,并用C51语言编程验证了这种方法的可行性.该方法对存储资源的利用效率高,逻辑关系清晰,且菜单的建立和修改方便,适合在单片机应用系统中使用.9.期刊论文基于单片机实现的实用汉字液晶显示设计方法-硅谷2009(19)介绍一种在多级菜单界面设计上非常简单实用的采用C51语言实现液晶显示的方法;同时介绍自定义字库和硬件汉字库的设计方法和应用.10.期刊论文陈国鹏.Chen Guopeng基于PIC18F6622的人机界面设计-工业控制计算机2009,22(9)介绍了如何使用PIC单片机PIC18F6622和液晶模块MTG-S32240进行显示控制系统的设计,分析了其硬件平台的设计要点,给出了清晰的人机界面软件设计架构,介绍了其中最主要的多级菜单的设计方法.设计的显示控制系统在实际系统中运行稳定可靠,证明了设计方法的正确性.本文链接:/doc/887e05f29e31433239689316.html /Periodical_kjxx201031057.aspx授权使用:南华大学(nhdx),授权号:af1513e4-a30e-4369-9f7f-9f1000acb2e6下载时间:2011年6月28日。

LCD模块的菜单方式人机交互界面

LCD模块的菜单方式人机交互界面

图形LCD模块的菜单方式人机交互界面摘要:在以单片机为核心的嵌入式应用中,友好的人机互界面起着十分重要的作用。

笔者在设计中使用12864图形LCD模块实现一种中文窗口菜单界面,设计中使用的方法具有普遍性意义。

关键词:人机交互界面图形LCD模块数据结构窗口菜单随着液晶显示技术的进步,高质量的液晶显示模块会被日趋广泛地应用于各种嵌入式系统中。

在系统整体设计中,人机交互界面的设计往往占据着很大一部分工作,现以某嵌入式系统的人机交互部分为例,介绍一种使用12864B图形LCD模块实现中文窗口菜单界面的方法。

摘要:在以单片机为核心的嵌入式应用中,友好的人机互界面起着十分重要的作用。

笔者在设计中使用12864图形LCD模块实现一种中文窗口菜单界面,设计中使用的方法具有普遍性意义。

关键词:人机交互界面图形LCD模块数据结构窗口菜单随着液晶显示技术的进步,高质量的液晶显示模块会被日趋广泛地应用于各种嵌入式系统中。

在系统整体设计中,人机交互界面的设计往往占据着很大一部分工作,现以某嵌入式系统的人机交互部分为例,介绍一种使用12864图形LCD模块实现中文窗口菜单界面的方法。

1 图形LCD模块12864简介12864模块是单色图形点阵液晶显示模块,点阵数为64×128,其点阵存储区如图1所示。

模块点阵分为左右两边,左右两边的结构是完全一样的。

对模块的点阵存储区进行读写操作时,由CS1、CS2进行片选,高电平有效。

模块中每8行为1页,页地址由X确定;Y确定点阵的列号,点阵数据的每一个字节所在的位置由(CSi,X,Y)唯一确定。

字节中的每一位对应着相应的像素,为1显示该像素;为0则不显示。

液晶显示模块工作时,逐行扫描点阵存储区。

首先被扫描的行显示在LCD屏幕的第1行上,其余行则依次顺序显示。

“扫描起始行”可以通过Z地址寄存器来设置。

Z可以是0~63的任意一行,如Z=56时,则显示在LCD屏幕上的次序从上到下分别为:56,57,…,62,63,0,1,2,…,54,55该模块的这一功能为窗口的滚屏提供了便利。

基于单片机的门禁系统多级菜单设计

基于单片机的门禁系统多级菜单设计

基于单片机的门禁系统多级菜单设计王清珍;董健;杨宇【摘要】为了在无线办公门禁系统中实现通过LCD12864显示屏分屏显示多项内容,采用单片机C语言程序设计了多级菜单,应用结构体数组成员的定义,借助按键来改变菜单项的索引号,进行内容的分屏显示及菜单项之间的切换。

在多项显示时,同一屏上显示项处于同一级,涉及的变量少,索引号级数少,系统开支就小。

设计简化,按键实时性好,界面简单,操作方便。

%In order to realize the split screen display of multiterm contents on LCD12864 display screen in the wireless of⁃fice access control system,the multi⁃level menu was designedby means of a C language program of single chip microcomputer. The definition of the structural body array members is used,and the split screen display of multiterm contents and switching be⁃tween menu items are performed with the help of buttons to change the index number of menu items. Split screen display switching between content and menu items is adopted to simplify the design. The system has the advantages of simple design,good real⁃time performance and simple interface,and is easy to operate.【期刊名称】《现代电子技术》【年(卷),期】2015(000)012【总页数】4页(P55-57,61)【关键词】LCD12864;多级菜单;结构体数组成员;切换机制【作者】王清珍;董健;杨宇【作者单位】郑州科技学院信息工程学院,河南郑州 450064;郑州科技学院信息工程学院,河南郑州 450064;郑州科技学院信息工程学院,河南郑州 450064【正文语种】中文【中图分类】TN911-34;TP368.2在门禁系统中采用的显示设备是LCD12864,此设备在系统中仅显示少量的提示信息,能够满足系统显示需求,但是受显屏显示区域的限制,要显示多项内容,需要分屏显示,在显示的内容之间有上下级和平行级关系,这就需要在显示屏上显示多级操作菜单,每一级菜单都有一些菜单项和对应的按键操作,以及响应各种操作而执行的后续处理程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于状态机的LCD多级菜单设计方案
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个变量为函数指针变量,存放当前索引号下需要执行的函数的入口地址。

相关文档
最新文档