微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于μCOS的预定义UI交互设计

基于μCOS的预定义UI交互设计

时间:02-08 来源:互联网 点击:

摘要:本设计用于电能计量终端的人机交互,对直流电和单相、三相交流电的电参数进行实时显示。基于μCOS的预定义UI交互设计的特点是预定义一个菜单数组,由程序解析菜单定义。菜单项为菜单数组中的一个结构体,通过设置菜单数组就能改变菜单组合形式。菜单项的可响应按键集也以结构体的形式定义,结构体的每一元素对应一个可以响应的按键,通过按键响应动作来实现菜单切换。该设计易于实现多层次菜单,而且具备很好的可移植性,适用于大量中等规模的嵌入式系统应用。运用该设计很好地完成了电能计量终端电参数的实时显示。
关键词:UI设计;菜单设计;人机交互;μCOS;嵌入式系统

0 引言
嵌入式设备的飞速发展大大丰富了人们的生活,无论在工业控制、仪器仪表、通信设备或是娱乐工具等各个方面都有嵌入式微处理器在工作,然而,人们要想实现对这些设备的控制就必须通过用户界面(User Interface,UI),所以人们越来越关注UI界面的可用性和用户使用效率的提高。目前,嵌入式设备开发中的UI设计多数采用按键控制简单的上下翻页或滚屏操作,缺少层次性,本设计将在S3C44BOX微控制器上植入μCOS系统,采用预定义的方式,实现一种多层次、可移植性强的预定义UI交互。

1 电能计量终端系统简介
为实现配电自动化,需要使用电能计量终端来对多种电源的接入进行监控,包括直流电和单相、三相交流电。图1为电能计量终端的硬件系统结构框图。它以S3C44BOX微控制器为核心,配有通信电路、LCD显示电路、按键、RS 232和RS 485通信接口以及直流电和单相、三相交流电测量电路。

电能计量终端除了具有普通智能仪表所具有的测量功能、数据处理功能和通信功能外,还为用户提供了友好的UI。通过UI交互,用户可灵活地切换和查看以下信息:供电电流、供电电压、累计供电量、有功功率、停电时间/来电时间、交流负载的总功率因数、缺相告警及
电压值超标告警等。另外,还设有掉电保护和防雷功能。

2 UI交互电路
图2为电能计量终端的UI交互电路框图,电路中有1个128×64点阵的LCD显示器(QC12864B)和6个按键。LCD显示器每行能显示16个英文或8个中文符号,共4行。微控制器通过IO来控制LCD的显示。因为LCD外部接口信号需要5 V的驱动电平,而微控制器的IO管脚输出只有3.3 V,不能直接控制,在此使用74LVx245电平转换芯片来驱动LCD。6个按键分别为上(up)、下(down)、左(left)、右(right)、确定(enter)和取消(esc)键,微控制器通过扫描按键IO,可得到各个键值。为节省中断开销,6个按键通过与门连接到微控制器的同一个外部中断上。利用这6个按键,用户可以在菜单窗口和监控界面之间随意切换。

3 预定义UI交互设计
UI的设计目标是实现中文窗口界面,用户可以在菜单方式下进行交互。窗口分为2类:对话框和菜单,也包括两者的混合。对话框用于参数的输入输出显示;菜单用于响应用户的选择,根据用户的选择运行程序。预定义的UI。简单的说,就是预定义一个菜单数组,由程序解析菜单定义形式。改变菜单数组中对应项的内容,就能设定菜单显示的坐标、尺寸和内容等等性能参数,而无需修改解析函数,因此具有很高的可移植性。
3.1 操作界面
根据电能计量终端的监控内容,设计菜单窗口和各菜单项对应的监控界面。设备上电后,将显示版本号,接着进入菜单窗口。菜单窗口有4行,其中前2行显示菜单项,后2行显示实时时间。菜单项共有4个,分别为交流电(包括市电和油电)、风电和光电参数。通过上下按键在主窗口的前两行进行菜单项切换。菜单窗口设计如图3所示。

在选择的菜单项上点击enter键进入该菜单项对应的监控界面,监控内容分屏显示。交流电子菜单分7屏来显示交流电接入类型(市电/油电)、交流电压、交流电量、有功功率、市电/油电停电时间、市电/油电来电时间、功率因数等,图4(a)为其中一屏;光电/风电子菜单分2屏来显示光电/风电电压、光电/风电电流、光电/风电电量、光电/风电功率等,图4(b)为其中一屏。用户可通过up,down键和esc键来切屏和返回至菜单窗口。

3.2 预定义菜单设计
μCOS是一个源码公开、可移植、可固化、可裁剪、抢占式、支持多任务的实时操作系统,运行于没有MMU的嵌入式微处理器上,采用可剥夺型内核进行任务调度,实时性好,小巧且移植方便,适合工业控制领域使用。在μCOS中,设置一个UI任务,完成响应用户的键盘输入、选择菜单和根据用户选择的菜单执行相应操作。菜单设计成多层次形式。菜单设计采用预定义的集中描述,由程序解析菜单定义形式。可响应的按键集也以数组的形式在菜单数组中定义。键盘服务设计成中断级任务,通过专用的消息队列发送键值到UI任务,实现实时信息显示。
预定义的菜单由3部分控制:
①菜单显示区域坐标。用来定义菜单显示区域左上角字符坐标(符号常量MENU_AREA_LT_X,MENU_AREA_LT_Y,)和右下角字符坐标(符号常量MENU_AREA_RB_X,MENU_AREA_RB_Y),显示的菜单要限制在这个区域中。
②菜单定义。设计一个结构体数组,数组中的每个结构体描述一个菜单项的各项设置,这个结构体数组称为“菜单定义结构体数组”(Menu Deftne Structure,MDS),在C代码中命名为Menu_Define[]。
③当前有效菜单项指针。定义一个整型变量,称为“菜单指针”(Menu Pointer,MP),MP的值与MDS的数组下标相对应,指明了当前有效的菜单项。菜单定义采用枚举类型标识,以提高代码的可读性。
一个预定义的菜单由若干个菜单项组成,每个菜单项可以显示主显示内容和副显示内容两部分。程序运行后,主显示内容一旦定义则不改变,副显示内容是可变的。如图4(b)中,风电电压、风电电流是主显示内容,而其对应的电压、电流值是副显示内容。MDS是一个结构体数组,数组中每个元素(即每个“菜单项”)的结构如表1所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top