2.2.3数据结构
本系统采用8个按钮来接受用户输入,8个按钮为上、下、左、右、回车、退回、加、减。为方便数据显示和处理。需要首先建立一个菜单窗口结构体并定义一个结构变量WinStruct,该结构中共有11个结构元素,分别是10个字符型和1个指针变量,指针变量指向需执行函数。 Typedef struct{ uchar Menulndex;//当前菜单索引号 uchar BackWinlndex;//当前窗口的上一窗口索引号 uchar NextDnlndex;//下一个菜单索引号,按下“上,下”键时当前菜单项上下移动 uchar NextUplndex;//或可修改参数数值向上下循环变化 uchar NextLIndex; //下一个菜单索引号,按下“左,右”键时当前菜单项左右移动 uchar NextRtlndex;//或在可修改参数位置上左右移动 uchar Key CrState; //按下“回车”键时用户选择确认或参数输入确定 uchar KeyBackState; //按下“退回”键时用户退出当前窗口,返回上一窗口 uchar KeyPlus; / / 按下“加”键,可修改参数加1;uchar KeyMinus; / / 按下“减”键,可修改参数减1;void( CurrentOperate)();//当前状态应该执行的功能操作 }WinStruct; 菜单项在LCD上显示,通过建立菜单项结构体,定义一个结构变量 MenuStruct。如下: Typedef struct{ uchar Menulndex; //当前菜单索引号 uchar NextWinlndex;//下一窗口索引号 uchar cursor_page ://菜单项起始页位置 uchar cursor_col; / / 菜单项起始行位置 uchar type ; / / 菜单项显示的数据类型,16x16或16x8点阵等 uchar *data; / / 指向显示数据区 uchar dataNum;/ / 需要显示的数据的个数 uchar black; / / 是否反显菜单项 uchar modify ; / / 数据是否需要修改 } MenuStruct;
2.3 人机界面设计
人机交互设计的重点在于界面的显示、滚屏、光标的管理及参数的显示、修改和保存。系统在内存中特定区域开辟了1个LCD显示缓冲区,将要显示的整个窗口的点阵数据存放在此区间。LCD的显示程序从此区间中读取数据到LCD点阵数据存储区,借此,LCD显示程序可管理用户交互界面。用户可以用8个按键(向上、向下、向左、向右、确定、返回、加、减)在菜单方式下实现人机交互。
参数的输入、输出显示和保存是人机交互界面设计的重要环节。
下面以第二级菜单中的参数设置为例,进行详细介绍。在主菜单下,将光标移到“参数设置”,按下“确定”键,进入“参数设置”菜单。显示的内容有:设备参数,投切条件,保护定值,电容参数,时钟校准,通讯参数,等等。
装置出厂前已经对各参数进行初始化,存储在二维数组Array[19][5]中,每个参数一行,参数每一位的值都对应存储在数组中的相应位置。定义一个指针P指向Array,表示光标的位置,当然,进入“参数设置”菜单时P=Array[0][0],光标在首行的第一个X的位置,表示选中该参数位。按下“向上”、“向下”、“向左”、“向右”四个方向键来移动光标到待修改的那一位数字上时,P=Array[i][j]则根据按下的键不同而作相应的修改,一般如下:向上,i-1;向下,i +1;向左,j-1;向右,j+1。当然,首先要对原来的i,进行判断。遇到特殊情况要特殊处理。如光标原在某行的第一个参数位上,j= 0,按下向左的键则不改变光标。
选定待修改的那一位参数后,按“修改”键进行参数值的修改。过程如下:读取光标所在的那一位数字的值,每按一次加键,该值加1(在0—9之间循环),每按一次减键,该值减1(在0—9之间循环)。修改完一位后,把改值写入Array[i][j],移动光标继续修改其他的参数。一行参数修改完,经核对无误后按“确定”键(每按一次“确定”确认一行),新的参数值被修改存入机内对应的EEPROM 地址中。参数全部修改完后需要重新开机,否则修改无效。3 结束语
本文构建了基于MSP430F149、OCM12864图形点阵液晶模块和键盘的中文人机交互界面,实现了中文菜单显示及参数的输入、显示、修改和保存等功能,完成了系统所要求的显示任务。此方法也同样适应用于ARM7与DSP其他微控制器LCD液晶人机界面上。
本文创新点:充分利用了OCM12864的硬件资源,实现了友好的人机界面,并且文中介绍的方法具有非常好的灵活性和良好的可维护性,程序员可以在需要的时候很方便地修改菜单和增加子菜单,而不至于影响系统软件原有的结构,而且在此菜单编程方法基础上进行改进,还可增加滚屏,自动翻页等功能。