电子发烧友网 > 通信网络 > 正文

如何实现嵌入式应用的人机界面交互性设计

2020年01月19日 10:46 次阅读

1 、引言

用户界面设计是屏幕产品的重要组成部分,它为人机交互构建了一个沟通环境。其中交互性设 计是用户界面设计中的重要内容之一。交互设计的目的是让用户能够简单方便地使用产品,任何产 品功能的实现都是通过人机交互完成的。现以单片机为核心的嵌入式应用中界面交互性设计为例具 体介绍其实现方法。

2 、总体设计方案

总体设计方案如图 1 所示。

如何实现嵌入式应用的人机界面交互性设计

图 1 总体设计图

以单片机为核心的下位机主要是负责采集处理数据信息,在接到上位机的数据请求的时候发送 数据给上位机。编写上位机端的串口通信程序,用于处理串口信息并且把处理过后的消息发送给 Virtools。在Virtools 中设计消息解释执行行为模组,将解释出的相应动作信息发送给界面控制程序, 最后由其完成屏幕的输出。同时协调Virtools 中各行为模组的工作,使之达到良好的演示效果。

3 、串口通信设计与实现

串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种 通信方式。这种通信方式使用的数据线少。本文的串口通信设计包括下位机端的串口通信模块和上 位机端的串口通信模块。

3.1 下位机的串口通信模块

下位机的串口通信模块通过串口完成与上位机的通信,在接到上位机数据请求后将采集的数据 信息发送给上位机。 在设计中首先设定定时器 T1 为串口波特率发生器,设定波特率为19200bps;上位机发送数据 请求后触发下位机串口中断,为了能够快速的响应上位机的请求,减少上位机的等待,将串口中断 的优先级设置为最高;下位机会优先调用通信模块响应该中断,通信模块首先判断请求消息是否正 确,在确定是正确的请求消息后,从缓冲区中取出数据,封装成一条消息M 消息码R(如M01R), 通过串口发送给上位机。通信模块具备一定过滤及容错能力。

下面重点介绍一下串口通信模块的处理方式。

串口通信模块采用中断处理方式,每完整地接收到一个字符或发送完一个字符都会触发该中断, 进入到相应的中断处理函数中。中断处理函数涉及到接收和发送两个部分,因此在中断处理函数开 始的部分就判断是接收引发的中断,还是发送引发的中断。如果是接收中断,在接收中断中每接收 一个字符都要判断,确定是否为上位机发送过来的请求消息,如果不是放弃当前接收到的内容,从 头开始接收;如果是,则响应上位机的数据请求,将接收态改为发送态,然后向上位机发送通信缓 冲区中的第一个字符,每发送一个字符会产生中断,在下次中断中再发送下一字符,按此过程直到 发送完毕。

3.2 上位机的串口通信模块

上位机的串口通信模块通过串口向下位机发送请求信息,处理下位机返回的数据信息,并将其 发送给处理这些信息的行为模组。这一过程是循环执行的。该程序是与下位机协同工作的唯一接口, 是联系界面和下位机的桥梁。它的处理流程如图2 所示。

如何实现嵌入式应用的人机界面交互性设计

图 2 上位机串口通信模块处理流程图

上位机的串口通信程序是通过调用 Windows 提供的有关串口操作的API 函数完成的。首先创建 了基础串口类_base_com,在其中实现基本信息配置、打开、关闭串口等基础功能。为了实现异步发 送和异步接收,在_base_com 类的基础上派生出异步串口通信类_sync_com 完成异步的数据传输。

基类_base_com 的声明如下。

class _base_com //虚基类基本串口接口

{

protected:

volatile int _port; //串口号

volaTIle HANDLE _com_handle;//串口句柄

DCB _dcb; //波特率,停止位,等

int _in_buf, _out_buf; // 缓冲区

COMMTIMEOUTS _co; // 超时时间

//虚函数,用于不同方式的串口打开

virtual bool open_port() = 0;

void init(); //初始化

public:

_base_com()

{

init();

}

virtual ~_base_com();

/*基本参数设置*/

//设置串口参数:波特率,停止位,等

inline bool set_para();

//支持设置字符串 “9600, 8, n, 1”

bool set_dcb(char *set_str);

//设置内置结构串口参数:波特率,停止位

bool set_dcb(int BaudRate, int ByteSize = 8, int Parity = NOPARITY, int StopBits =

ONESTOPBIT);

//设置缓冲区大小

inline bool set_buf(int in_buf, int out_buf);

//打开串口缺省 9600, 8, n, 1

inline bool open(int port);

//打开串口缺省 baud_rate, 8, n, 1

inline bool open(int port, int baud_rate);

//打开串口

inline bool open(int port, char *set_str);

//关闭串口

inline virtual void close();

//判断串口是或打开

inline bool is_open();

//获得串口句炳

HANDLE get_handle();

};

异步串口通信类_sync_com 的声明如下。

class _sync_com : public _base_com

{

protected:

//打开串口

virtual bool open_port();

public:

_sync_com();

//同步读

int read(char *buf, int buf_len);

//同步写

int write(char *buf, int buf_len)

//同步写

inline int write(char *buf)

{

assert(buf);

return write(buf, strlen(buf));

}

};

4 、Virtools 中行为模组的设计与实现

下位机通过串口传输的数据,经过上位机串口通信程序转换成 Virtools 可以识别的消息,然后 交由Virtools 中的行为模组进行处理,从而达到利用外部采集数据控制界面显示的目的。

4.1Virtools 消息发送行为模组

Virtools 消息发送行为模组对串口通信模块处理得到的数据信息进行重新封装,然后发送给消息 解释执行行为模组。消息发送行为模组是使用Virtools 提供的开发工具包中相关类的方法实现对信 息的重新封装。具体实现如下:

CKBeObject *beo = beh-》GetTarget(); //获取消息发送目标

if(!beo)

return CKBR_OWNERERROR;

int *tab = (int *)beh-》GetLocalParameterReadDataPtr(0); //获得本地变量操作句柄

CKMessageManager *mm = BehContext.MessageManager; //消息管理对象

int temp = GetMessage(BehContext) - ‘0’; //调用串口通信模块读取串口消息

mm-》SendMessageSingle(tab[temp],beo); //调用消息发送函数发送已经封装好的动作消息

acTIveOutput_0 = TRUE;

4.2 消息解释执行行为模组

消息解释执行行为模组首先从当前的消息列表中获取消息类型,根据消息类型属性中指定的特 定消息类型来判断当前到达的消息是否为该特定消息,并根据判断结果调用不同的处理模块。具体 的处理流程如图3 所示。

如何实现嵌入式应用的人机界面交互性设计

图 3 消息解释执行行为模组流程图

利用 Virtools 中行为模组的回调机制,循环调用该行为模组。在界面切换时检测一下消息,判 断是否与属性中设定的动作消息一致。如果一致,则向动作控制行为模组发送激活消息。

4.3 动作控制行为模组

动作控制行为模组主要使用 Virtools 自带的行为模组,像按键响应行为模组、脚本的控制行为 模组等。另外为了控制外部媒体文件的播放,还利用了Virtools 中加载资源文件、播放资源文件的 行为模组。

动作控制行为模组接收到消息解释执行行为模组发送的激活信息,就会调用相应的行为模组完 成界面的输出。

5 、结论

本文从工程应用的角度,给出了基于 Virtools 和串口通信的界面交互性的设计方法,并给出关键部分的设计思路和方法。该设计方法具有一定的通用性,可应用于其它需要用户界面交互设计的 应用系统中。

本文作者创新点:串口通信下,采集下位机(单片机)传递的信息,运用 Virtools 的行为模组 进行实时处理,实现了人机界面的交互。这一设计也为其他人机界面交互性的实现提供了一种新的 思路。

       责任编辑:gt

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

C语言基础 之 第7章 指针

0 课程大纲介绍和IDE安装1 指针:地址的外号&2 指针与变量3 指针就是一个数4 如何使用一个数据5 一级指针的类型
发烧友学院发表于 2018-12-09 00:00 3105次阅读
C语言基础 之 第7章 指针

设计嵌入式驱动程序有哪些小窍门

每一个嵌入式应用软件都会在某些时候访问最底层的固件和进行一些硬件控制。 驱动的设计和实施是确保一个系....
发表于 2020-01-18 12:07 84次阅读
设计嵌入式驱动程序有哪些小窍门

一个X25045的C51读写程序

本文档的主要内容详细介绍的是一个X25045的C51读写程序。
发表于 2020-01-18 11:13 63次阅读
一个X25045的C51读写程序

如何使用单片机驱动标准PC机键盘?C51程序详细...

键盘时钟接在p3.2口,既8051的外部中断int0上,键盘数据接到p1.0上每次按键,键盘会向单片....
发表于 2020-01-18 11:07 100次阅读
如何使用单片机驱动标准PC机键盘?C51程序详细...

如何使用通用单片机制作MIDI键盘

MIDI是电子乐器的语言,随着MIDI的诞生,数字化电子乐器已经越来越多,MIDI的应用也越来越普遍....
发表于 2020-01-18 09:07 66次阅读
如何使用通用单片机制作MIDI键盘

增加嵌入式存储交换技术可靠性的解决方案

嵌入式存储交换技术还是比较常用的,于是我研究了一下如何增加嵌入式存储交换技术的可靠性,在这里拿出来和....
发表于 2020-01-18 09:06 206次阅读
增加嵌入式存储交换技术可靠性的解决方案

香橙派OrangePi开发板连接HDMI接口显示屏如何修改分辨率

Orange Pi 全志H2(型号:Zero,R1)和H3芯片系列(型号:One,Lite,PC,PC Plus,Plus 2E)的开发板...
发表于 2020-01-17 19:50 243次阅读
香橙派OrangePi开发板连接HDMI接口显示屏如何修改分辨率

单片机系统的扩展和配置应遵循哪些原则

一个单片机应用系统的硬件电路设计包含两部门内容:一是系统扩展,即单片机内部的功能单元,如ROM、RA....
发表于 2020-01-17 16:47 85次阅读
单片机系统的扩展和配置应遵循哪些原则

HC32L110设计注意事项

HC32L110设计注意事项 一、华大单片机HC32L110 在做硬件设计时请注意以下事项: 1 RESET引脚可以复...
发表于 2020-01-17 15:57 276次阅读
HC32L110设计注意事项

实现低功耗嵌入式设计的多种优化方式

不是所有便携式系统都像图1(参见本系列文章的第二部分)所示的系统这么简单。图3给出了可穿戴电子设备的典型方框图。由...
发表于 2020-01-17 08:00 323次阅读
实现低功耗嵌入式设计的多种优化方式

ARM cortex-A53是否支持硬件预取、整型流水线的个数等相关参数

已经查阅了A53的手册没有找到相关的答案,自己有刚刚接触这方面,老大给的任务,希望有大佬帮忙指点一下,或是有相关...
发表于 2020-01-16 20:32 187次阅读
ARM cortex-A53是否支持硬件预取、整型流水线的个数等相关参数

Orange Pi Zero开发板在Armbian系统下如何使用声卡功能

在使用Orange Pi Zero开发板时,安装Armbian的系统,有开发者反馈找不到声卡,这是因为声卡的功能是在Zero的转接...
发表于 2020-01-16 19:42 542次阅读
Orange Pi Zero开发板在Armbian系统下如何使用声卡功能

关于中美贸易战的影响,以及国产MCU企业的发展瓶颈

今年中美贸易摩擦对国内半导体企业的影响不少。国民技术认为正是在中美贸易战的影响下,国内市场对国产芯片的需求也更...
发表于 2020-01-16 14:42 170次阅读
关于中美贸易战的影响,以及国产MCU企业的发展瓶颈

Keil 破解

发表于 2020-01-16 10:33 291次阅读
Keil 破解

Lattice MachXO2控制开发板的特性及...

Lattice公司的MachXO2系列是高度可配置的串行逻辑器件(PLD),具有低误差,具有和高系统....
发表于 2020-01-16 09:11 83次阅读
Lattice MachXO2控制开发板的特性及...

Microchip发布业界首款宇航级耐辐射以太网...

Microchip发布业界首款宇航级基于COTS的耐辐射以太网收发器和嵌入式单片机,耐辐射器件拓展了....
发表于 2020-01-16 07:56 138次阅读
Microchip发布业界首款宇航级耐辐射以太网...

香橙派开发板OrangePi 2G-IOT如何升级 NAND 中的 Android

OrangePi 2G-IOT 提供了两种方式的 Android 启动, 分别为 SD 卡启动和 Nand 启动。当需要升级 SD 卡或者 ...
发表于 2020-01-15 20:53 808次阅读
香橙派开发板OrangePi 2G-IOT如何升级 NAND 中的 Android

基于单片机AT89S52与总线技术实现小区周界防...

随着科学技术和经济的快速发展,人们对居家的概念已从最初满足简单的居住到注重对住宅的人性化需求,如安全....
发表于 2020-01-15 17:07 153次阅读
基于单片机AT89S52与总线技术实现小区周界防...

如何利用PIC16F877A单片机读写AT24C...

AT24C系列在增强型PIC实验板上编程的硬件原理图如下图所示,U7为实验板上24C02芯片,SDA....
发表于 2020-01-15 15:50 134次阅读
如何利用PIC16F877A单片机读写AT24C...

如何利用单片机和C语言来设计数字滤波系统

数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广....
发表于 2020-01-14 15:34 195次阅读
如何利用单片机和C语言来设计数字滤波系统

触摸屏上写入频率,如何让变频器以该频率运行

触摸屏是一种人机界面,我们常用的手机输入也是触摸屏,那是电容屏,就是手指按摩触摸屏界面的时候,会产生....
发表于 2020-01-14 11:54 79次阅读
触摸屏上写入频率,如何让变频器以该频率运行

单片机工作几小时后又出现重启是怎么回事

单片机产品在工作的时候,上电后是正常工作的,但是工作了几个小时后,偶尔会出现单片机重启的现象。从描述....
发表于 2020-01-11 09:39 447次阅读
单片机工作几小时后又出现重启是怎么回事

电装将与高通共同开发下一代座舱系统

据ZDNET Japan报道,日本电装公司近日宣布和高通子公司高通技术合作,共同开发下一代座舱系统。
发表于 2020-01-10 16:58 408次阅读
电装将与高通共同开发下一代座舱系统

采用单片机和MCP2510、MCP2551芯片设...

本文提出的基于CAN现场总线的集散型火灾报警控制系统的网络结构如图1所示,每个节点都以AT89C51....
发表于 2020-01-10 16:48 160次阅读
采用单片机和MCP2510、MCP2551芯片设...

基于MSP430F135单片机与DSl8820芯...

煤炭作为一种重要的能源,在工业生产等许多方面发挥着举足轻重的作用,关系着国民经济的命脉。煤炭开采中的....
发表于 2020-01-10 16:31 118次阅读
基于MSP430F135单片机与DSl8820芯...

80C196KB单片机对灭菌器的控制设计方案

而灭菌器灭菌是否合格大部分取决于控制系统是否可靠,针对某医疗设备厂灭菌器控制系统不稳定、人机界面不友....
发表于 2020-01-10 16:12 126次阅读
80C196KB单片机对灭菌器的控制设计方案

动目标识别系统的关键技术及基于Z85C30芯片实...

MIS访问数据链的控制采用时分多址(TDMA)技术。根据不同的应用和操作模式,可采用不同的四种TDM....
发表于 2020-01-10 16:04 123次阅读
动目标识别系统的关键技术及基于Z85C30芯片实...

Python语言为什么可以得到广泛的应用

Python语言目前是IT行业内最为流行的编程语言之一,同时Python也是全场景编程语言之一,目前....
发表于 2020-01-10 14:55 228次阅读
Python语言为什么可以得到广泛的应用