仪器仪表在设计中少不了用户界面的设计,菜单界面作为人机交互的重要方式,在设计中也需要慎重考虑。
下面以实际设计为例,介绍几种设计多功能菜单的设计模式。
背景: 电力监控仪器是常见的工控设备,常见用于家庭电费电能计量、机场、工业生产基地、国家智能电网等众多场合。现在需要设计一款智能电表,如应用在国家电网上面,就需要对三相线电压、相电压、三相电流、功率(有功、无功、视在功率)、高次谐波、功率因素、不平衡度、电压合格率、输入输出(I/O)、参数最值、频率等众多参数进行检测并上传至用户界面进行人机交互。
工具: 常见的液晶LCD或者段码液晶(定制好的那种款式)。在这里说明一下为什么不用那种触摸屏或者比较智能化的屏幕。在工业用地环境仪器容易受到电磁干扰,会使触摸屏操作不灵敏或者出现不可控现象,因此在工业应用环境目前大多数还是使用普通液晶屏。另外一项工具就是普通按键。
1.一级菜单划分
首先对功能进行划分,大致分为多少个GUI界面,在上面的实际问题中,可以分为 GUI初始化I界面,电流菜单、电压菜单、功率因素菜单、谐波菜单等一些列的菜单。分别对这些菜单进行GUI赋值。将初始菜单开始标记:GUI=0。电流菜单GUI=1,电压菜单GUI=2,功率菜单GUI=3。这样一直赋值下去,进行标记,大致能够分出多少个一级菜单了。
2. 按键复用方式菜单切换
我们在使用不同的仪表仪器时或者在我们使用手机也是一样的效果,同一个按键在不同菜单下作用不同。就像windows的一些按键在一个软件里一个功能,在另外的软件里功能也不一样,这就是一种多态。(扯得有点远了)我们可以理解成这就是按键的功能复用,在本示例中,比如在电压菜单下是负责进入有功功率菜单的,但是此按键在谐波菜单下就是数值键入,从主控部分获取高次谐波的数值。具体怎么实现的呢?可以这么理解:假设一共有3个按键可以使用,分别为key1、key2、key3。采用中断的方式获取键值,对应的键值分别为keyval=1、keyval=2、keyval=3。通过keyavl数值区分不同按键,而在菜单函数里面可以根据keyval数值进行下一步动作。代码如下:
void App_Key1_ISR(void)
{
keyval=1;
}
void App_Key2_ISR(void)
{
keyval=2;
}
void App_Key3_ISR(void)
{
keyval=3;
}
在一级菜单里面进行keyval数值判断:比如在功率菜单里面,代码如下:
void GUI_P(void)
{
flag=0;
clearLCD();
while(1)
{
displayInitU();
switch(keyval)
{
case 1: flag=1;keyval=0;DisplayKW();break;//显示有功或者重新给GUI赋值进入下一级才菜单或者返回等操作(keyval记得及时清零)
case 2: flag=1;keyval=0;DisplayKVAR();break;//显示无功功率其它功能同上
case 3:flag=1; keyval=0;DisplayKV() ;break;