当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于μCOS的预定义UI交互设计

摘要:本设计用于电能计量终端的人机交互,对直流电和单相、三相交流电的电参数进行实时显示。基于μ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。简单的说,就是预定义一个菜单数组,由程序解析菜单定义形式。改变菜单数组中对应项的内容,就能设定菜单显示的坐标、尺寸和内容等等性能参数,而无需修改解析函数,因此具有很高的可移植性。[!--empirenews.page--]
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的数组下标相对应,指明了当前有效的菜单项。菜单定义采用枚举类型标识,以提高代码的可读性。[!--empirenews.page--]
    一个预定义的菜单由若干个菜单项组成,每个菜单项可以显示主显示内容和副显示内容两部分。程序运行后,主显示内容一旦定义则不改变,副显示内容是可变的。如图4(b)中,风电电压、风电电流是主显示内容,而其对应的电压、电流值是副显示内容。MDS是一个结构体数组,数组中每个元素(即每个“菜单项”)的结构如表1所示。


    可响应按键集也是一个结构体数组,每个元素对应一个可以响应的按键,Key_Collection_Iterm定义如下:
   
    部分菜单定义结构体数组成员说明:
    i16uMenu_ID:菜单的标识符,如果在某菜单上发生了“RT_ACT”(执行)动作,则菜单任务根据菜单标识符执行相应的功能。
    I16uAccessory_Type:副显示值类型,指明副显示内容的来源类型,包括常见的变量类型(char,char*,INT16U,INT16,INT32U,INT32,float,double)。
    I16uResponse_Type:按键响应动作类型,指明对当前按键的响应动作,包括:当前有效菜单项改变为上临菜单项;当前有效菜单项改变为下临菜单项;当前有效菜单项改变为右临菜单项;当前有效菜单项改变为左临菜单项;当前有效菜单项改变为父菜单项;当前有效菜单项改变为子菜单项。依据当前有效菜单项ID执行相应操作,对应的枚举类型定义如下:
[!--empirenews.page--]
3.3 预定义UI交互软件流程
    预定义的菜单设计针对的是多层次的菜单设计,可以轻松实现多层次菜单显示。根据操作界面设计各个菜单项,即:在预定义的菜单项结构体中定义菜单项的标识符、坐标、上下临菜单项标识符、父子菜单标识符和可响应按键集等等。用户在当前有效菜单项上点击按键,系统根据动作ID散转,在可响应按键集中找出相应的响应动作,图5为按键响应动作类型散转流程图。


    各按键通过相似的响应流程完成各自不同的响应动作,这里以单个按键为例,对按键动作响应流程进行介绍。图6是一个UI交互任务流程,完成对UP按键的响应动作,动作类型为RT_MOVE_UP。


    系统上电后,首先对系统硬件和各变量进行初始化,屏幕显示首屏菜单,由活动表示符指明当前活动菜单项。当UP按键按下,进入键盘中断,随即向μCOS中发送按键消息队列,执行UI任务,在UI任务中将中断挂起,而后运行键盘扫描代码,判断出键值UP。此时,UI任务将根据当前活动菜单标识符执行RT_MOVE_UP功能。首先判断菜单显示区域内的当前活动菜单项标识符(CAID)是否等于它的上临菜单(CAID.上临ID),如果相等,不做任何操作;如果不等,再判断CAID是否为当前菜单显示区域内正在显示的最顶端的菜单项标识符(TMID)。如果CAID=TM ID,那么CAID=TMID=CAID.上临ID,调用显示菜单函数,显示此屏幕的上一屏菜单;如果CAID不是TMID,则CAID=CAID.上临ID,调用显示菜单函数,活动表示符指向CAID.上临ID。
3.4 UI交互设计实物图
    UI交互设计实物图如图7所示。



4 结语
    UI的广泛应用是当今计算机发展的重大成就之一,它强调的是计算机对于人的反馈交互作用。嵌入式UI具有下面几个方面的基本要求,轻型、占用资源少,高性能、高可靠性,便于移植、可配置。本项目设计的UI是基于预定义的文本菜单,具有菜单设计灵活、占用资源少的优点,同时支持多层次菜单,菜单功能丰富,适用于大量的中等规模的嵌入式系统应用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭