摘要:介绍一种基于状态分析的人机交互接口设计方法,提出运用状态分析法设计人机接口的几个关键步骤。运用此方法,可以很方便、快速地设计出各类人机交互接口。
关键词:状态分析 状态转换 人机接口
众所周知,人机交互接口的设计是单片机应用系统设计中的一个重要的组成部分。随着单片机技术的发展及其在各个领域的广泛应用,以单片机为核心组成的应用系统的功能越来越强大。如何把这些功能在机内有序地组合起来,如何快捷有效地设计出方便使用的人机交互接口已成为单片机应用系统开发中的一个重要研究课题。本文介绍一种人机交互接口的设计方法——状态分析法。实践证明:运用此方法设计人机交互接口,具有编程简单、思路清晰、可维护性和可扩充性强的优点。
1 状态分析法及其设计步骤
以具有4个按键的键盘为例说明状态分析法及其设计过程。设一个应用系统包含一个含有4个按键的键盘,用户通过对这4个按键的操作,实现功能切换和参数设置。在机内如何有序地组织这些功能,如何根据用户不同的操作习惯方便地改变这些组织方式,当用户在某一时刻按下某一按键时,系统能正确地执行相应的功能,是要解决的问题。状态分析法的基本思想是:在键盘按键不太多的情况下,给每一个按键分配一个状态变量(占1字节),每个状态变量共有256种状态(0~255),可根据需要任意选用,每一个状态对应一种功能,样,一个按键最多可实现256种功能。在某一时刻,当用户按下该键,希望其执行某项功能时,只要保证在用户按下该键之前,该键处于相应的状态即可。这样就实现了通过控制按键状态变量的状态来达到对其功能控制的目的。状态分析法设计人机交互接口主要包括以下几个步骤:
①系统分析,编写操作说明书或建立操作流程图;
②根据操作说明书或操作流程图,给每一个按键进行功能分配;
③对每个按键进行状态分析,为每个按键建立状态-功能表;
④根据操作说明书或操作流程图、状态-功能表建立状态转换图;
⑤根据状态转换图编制软件,上机调试。
2 应用举例
以“多功能数字钟”为例,详细说明状态分析法在人机交互接口设计中的应用。
设计一多功能数字钟,要求:
①有记时,校时功能;
②具有日历显示,日期调整功能;
③具有定时报警功能。
详细设计过程如下:
2.1 系统分析,建立操作流程图
根据分析,该系统具有三大功能。校时、日期调整和定时时间调整功能需要由键盘来设定。其中时间调整功能分为时高位、时低位和分高位、分低位调整,日历调整功能分为月份调整和日期调整,定时时间设定功能分为时高位、时低位和分高位、分低位的设定。通过分析可知,该系统主要有三个界面:时间显示界面、日期显示界面、定时时间设定界面。我们采用4个按键的键盘来实现上述功能,4个按键分别标号为1,2,3,4号键。操作流程如图1(a)、(b)所示,其中图1(b)是从图1(a)分离出来的子图。
2.2 按键功能分配,建立状态-功能表
根据对系统的分析,为每个按键分配的按键状态与按下该键执行的相应功能的对应关系如下:
(a)1号键状态-功能
1——进入时高位设置状态;
2——进入时低位设置状态;
3——进入分高位设置状态;
4——进入分低位设置状态;
5——进入月份设置状态;
6——进入日期设置状态;
7——进入定时时高位设置状态;
8——进入定时时低位设置状态;
9——进入定时分高位设置状态;
10——进入定时分低位设置状态;
(b)2号键状态-功能
1——进入时间编辑状态;
2——进入日历编辑状态;
3——进入定时编辑状态;
5——设置时低位,时高位加1;
6——设置时低位,时低位加1;
7——设置分高位,分高位加1;
8——设置分低位,分低位加1;
9——设置月份,月份加1;
10——设置日期,日期加1;
11——设置定时时高位,时高位加1;
12——设置定时时低位,时低位加1;
13——设置定时分高位,分高位加1;
14——设置定时分低位,分低位加1;
(c)3号键盘状态-功能
5——设置时高位,时高位减1;
6——设置时低位,时低位减1;
7——设置分高位,分高位减1;
8——设置分低位,分低位减1;
9——设置月份,分低减1;
10——设置日期,日期减1;
11——设置定时时高位,时高位减1;
12——设置定时时低位,时低位减1;
13——设置定时分高位,分高位减1;
14——设置定时分低位,分低位减1。
(d)4号键状态-功能
1——显示日历;
0——恢复时间显示。
2.3 建立状态转换图
根据操作流程图和状态-功能分配表建立状态转换图,如图2所示。
2.4 编制软件
键盘处理程序采用Franklin C51编写,部分源代码如下:
byte key_value; /*定义键值变量,用于识别按键*/
byte key1_state,key2_state,key3_state,key4_state;
/定义按键状态变量,用于表示按键状态*/
void key_do(){ /*键盘处理函数*/
switch(tey_value){
/*根据按键值,执行相应的按键处理函数*/
case 1:
key1_do(); /*按下1号键时调用1号键处理函数*/
break;
case 2:
key2_do(); /*按下2号键时调用2号键处理函数*/
break;
case 3:
key3_do(); /*按下3号键时调用3号键处理函数*/
break;
case 4:
key4_do(); /*按下4号键时调用4号键处理函数*/
break;
default:break;
}
key_value=0; /*执行完相应的功能后,按键值清零,等待下次按键*/
}
void key4_do(){ /*4号键处理程序*/
switch(tey4_state){
case 1:
display_date(); /*显示日期*/
key2_state=0; /*保证此时安下2号键时无效*/
key4_state=0; /*保证下次按4号键时,恢复到初始状态*/
break;
case 0:
display_time(); /*恢复时间显示*/
key2_state=1; /*恢复2号键初始状态*/
key4_state=1; /*恢复4号键初始状态*/
key1_state=0; /*恢复1号键初始状态*/
key3_state=0; /*恢复3号键初始状态*/
break;
default:break;
}
}
void dey1_do(){ /*1号键处理函数*/
switch(tey1_state){/*根据1号键的当前状态执行相应的功能*/
case 1:
display_time();/*显示时间界面*/
key1_state=2; /*保证下次按1号键时,进入时低位设置状态*/
key2_state=5; /*保证下次按2号键时,设置时高位,执行时高位加1操作*/
key3_state=5; /*保证下次按3号键时,设置时高痊,执行时高位减1操作/*
key4_state=0; /*保证下次按4号键时,返回时间显示界面/*
flash(H_hour); /*时高位闪烁,告知用户当前处于时高位设置状态*/
break;
cese 2:
key1_state=3; /*保证下次按1号键时,进入分高位设置状态*/
key2_state=6; /*保证下次按2号键时,设置时低位,执行时低位加1操作*/
key3_state=6; /*保证下次按3号键时,设置时低位,执行时低位减1操作*/
key4_state=0; /*保证下次按4号键时,返回时间显示界面*/
flash(L_hour); /*时低位闪烁,告知用户当前处于时低位设置状态*/
break;
case 3:
/*......根据状态转换图,用与上面同样的方法编号按键在每个状态下对应的处理程序*/
default:break;
}
}
void key2_do(){ /*2号键处理函数*/
......
/*根据状态转换图,用与编写key1_do()同样的方法编写key2_do(),key3_do()按键处理程序*/
}
结束语
利用状态分析法设计人机接口软件,采用的是自上而下,从抽象到具体的设计思想。所产生的设计文挡主要包括操作流程图或操作说明书、状态、功能表、状态转换图等。这些设计文挡都是后来对系统进行维护和扩充的依据,应妥善保存。状态分板法在人机交互接口设计中有很高的使用价值。