《電子技術應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于Virtools 和串口通信的界面交互性設計與實現(xiàn)
基于Virtools 和串口通信的界面交互性設計與實現(xiàn)
維庫開發(fā)網(wǎng)
滕英巖 張福艷
摘要: 本文介紹了一種采用Virtools 和串口通信實現(xiàn)人機界面交互的設計方法。下位機通過串口通信的方式將采集的數(shù)據(jù)傳給上位機,上位機通過Virtools 的行為模組對這些數(shù)據(jù)進行處理, 并根據(jù)處理結果做出響應,從而實現(xiàn)人機界面的交互。
Abstract:
Key words :

      1 引言

      用戶界面設計是屏幕產(chǎn)品的重要組成部分,它為人機交互構建了一個溝通環(huán)境。其中交互性設 計是用戶界面設計中的重要內(nèi)容之一。交互設計的目的是讓用戶能夠簡單方便地使用產(chǎn)品,任何產(chǎn)品功能的實現(xiàn)都是通過人機交互完成的。現(xiàn)以單片機為核心的嵌入式應用中界面交互性設計為例具 體介紹其實現(xiàn)方法。

      2 總體設計方案

      總體設計方案如圖 1 所示。

                 圖 1 總體設計圖

      以單片機為核心的下位機主要是負責采集處理數(shù)據(jù)信息,在接到上位機的數(shù)據(jù)請求的時候發(fā)送 數(shù)據(jù)給上位機。編寫上位機端的串口通信程序,用于處理串口信息并且把處理過后的消息發(fā)送給 Virtools。在Virtools 中設計消息解釋執(zhí)行行為模組,將解釋出的相應動作信息發(fā)送給界面控制程序, 最后由其完成屏幕的輸出。同時協(xié)調(diào)Virtools 中各行為模組的工作,使之達到良好的演示效果。

      3 串口通信設計與實現(xiàn)

      串口通信是指外設和計算機間,通過數(shù)據(jù)信號線、地線、控制線等,按位進行傳輸數(shù)據(jù)的一種 通信方式。這種通信方式使用的數(shù)據(jù)線少。本文的串口通信設計包括下位機端的串口通信模塊和上 位機端的串口通信模塊。

      3.1 下位機的串口通信模塊

      下位機的串口通信模塊通過串口完成與上位機的通信,在接到上位機數(shù)據(jù)請求后將采集的數(shù)據(jù) 信息發(fā)送給上位機。 在設計中首先設定定時器 T1 為串口波特率發(fā)生器,設定波特率為19200bps;上位機發(fā)送數(shù)據(jù) 請求后觸發(fā)下位機串口中斷,為了能夠快速的響應上位機的請求,減少上位機的等待,將串口中斷 的優(yōu)先級設置為最高;下位機會優(yōu)先調(diào)用通信模塊響應該中斷,通信模塊首先判斷請求消息是否正 確,在確定是正確的請求消息后,從緩沖區(qū)中取出數(shù)據(jù),封裝成一條消息M 消息碼R(如M01R), 通過串口發(fā)送給上位機。通信模塊具備一定過濾及容錯能力。

      下面重點介紹一下串口通信模塊的處理方式。

      串口通信模塊采用中斷處理方式,每完整地接收到一個字符或發(fā)送完一個字符都會觸發(fā)該中斷, 進入到相應的中斷處理函數(shù)中。中斷處理函數(shù)涉及到接收和發(fā)送兩個部分,因此在中斷處理函數(shù)開 始的部分就判斷是接收引發(fā)的中斷,還是發(fā)送引發(fā)的中斷。如果是接收中斷,在接收中斷中每接收 一個字符都要判斷,確定是否為上位機發(fā)送過來的請求消息,如果不是放棄當前接收到的內(nèi)容,從 頭開始接收;如果是,則響應上位機的數(shù)據(jù)請求,將接收態(tài)改為發(fā)送態(tài),然后向上位機發(fā)送通信緩 沖區(qū)中的第一個字符,每發(fā)送一個字符會產(chǎn)生中斷,在下次中斷中再發(fā)送下一字符,按此過程直到 發(fā)送完畢。

      3.2 上位機的串口通信模塊

      上位機的串口通信模塊通過串口向下位機發(fā)送請求信息,處理下位機返回的數(shù)據(jù)信息,并將其 發(fā)送給處理這些信息的行為模組。這一過程是循環(huán)執(zhí)行的。該程序是與下位機協(xié)同工作的唯一接口, 是聯(lián)系界面和下位機的橋梁。它的處理流程如圖2 所示。

 圖 2 上位機串口通信模塊處理流程圖

      上位機的串口通信程序是通過調(diào)用 Windows 提供的有關串口操作的API 函數(shù)完成的。首先創(chuàng)建 了基礎串口類_base_com,在其中實現(xiàn)基本信息配置、打開、關閉串口等基礎功能。為了實現(xiàn)異步發(fā) 送和異步接收,在_base_com 類的基礎上派生出異步串口通信類_sync_com 完成異步的數(shù)據(jù)傳輸。

  基類_base_com 的聲明如下。

  class _base_com //虛基類基本串口接口

  {

  protected:

  volatile int _port; //串口號

  volatile HANDLE _com_handle;//串口句柄

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

  int _in_buf, _out_buf; // 緩沖區(qū)

  COMMTIMEOUTS _co; // 超時時間

  //虛函數(shù),用于不同方式的串口打開

  virtual bool open_port() = 0;

  void init(); //初始化

  public:

  _base_com()

  {

  init();

  }

  virtual ~_base_com();

  /*基本參數(shù)設置*/

  //設置串口參數(shù):波特率,停止位,等

  inline bool set_para();

  //支持設置字符串 "9600, 8, n, 1"

  bool set_dcb(char *set_str);

  //設置內(nèi)置結構串口參數(shù):波特率,停止位

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

  ONESTOPBIT);

  //設置緩沖區(qū)大小

  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 中行為模組的設計與實現(xiàn)

  下位機通過串口傳輸?shù)臄?shù)據(jù),經(jīng)過上位機串口通信程序轉(zhuǎn)換成 Virtools 可以識別的消息,然后 交由Virtools 中的行為模組進行處理,從而達到利用外部采集數(shù)據(jù)控制界面顯示的目的。

  4.1Virtools 消息發(fā)送行為模組

  Virtools 消息發(fā)送行為模組對串口通信模塊處理得到的數(shù)據(jù)信息進行重新封裝,然后發(fā)送給消息 解釋執(zhí)行行為模組。消息發(fā)送行為模組是使用Virtools 提供的開發(fā)工具包中相關類的方法實現(xiàn)對信 息的重新封裝。具體實現(xiàn)如下:

  CKBeObject *beo = beh->GetTarget(); //獲取消息發(fā)送目標

  if(!beo)

  return CKBR_OWNERERROR;

  int *tab = (int *)beh->GetLocalParameterReadDataPtr(0); //獲得本地變量操作句柄

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

  int temp = GetMessage(BehContext) - '0'; //調(diào)用串口通信模塊讀取串口消息

  mm->SendMessageSingle(tab[temp],beo); //調(diào)用消息發(fā)送函數(shù)發(fā)送已經(jīng)封裝好的動作消息

  activeOutput_0 = TRUE;

  4.2 消息解釋執(zhí)行行為模組

  消息解釋執(zhí)行行為模組首先從當前的消息列表中獲取消息類型,根據(jù)消息類型屬性中指定的特 定消息類型來判斷當前到達的消息是否為該特定消息,并根據(jù)判斷結果調(diào)用不同的處理模塊。具體 的處理流程如圖3 所示。

  圖 3 消息解釋執(zhí)行行為模組流程圖

  利用 Virtools 中行為模組的回調(diào)機制,循環(huán)調(diào)用該行為模組。在界面切換時檢測一下消息,判 斷是否與屬性中設定的動作消息一致。如果一致,則向動作控制行為模組發(fā)送激活消息。

  4.3 動作控制行為模組

  動作控制行為模組主要使用 Virtools 自帶的行為模組,像按鍵響應行為模組、腳本的控制行為 模組等。另外為了控制外部媒體文件的播放,還利用了Virtools 中加載資源文件、播放資源文件的 行為模組。

  動作控制行為模組接收到消息解釋執(zhí)行行為模組發(fā)送的激活信息,就會調(diào)用相應的行為模組完 成界面的輸出。

  5 結論

  本文從工程應用的角度,給出了基于 Virtools 和串口通信的界面交互性的設計方法,并給出關鍵部分的設計思路和方法。該設計方法具有一定的通用性,可應用于其它需要用戶界面交互設計的 應用系統(tǒng)中。

  本文作者創(chuàng)新點:串口通信下,采集下位機(單片機)傳遞的信息,運用 Virtools 的行為模組 進行實時處理,實現(xiàn)了人機界面的交互。這一設計也為其他人機界面交互性的實現(xiàn)提供了一種新的 思路。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美专区第一页| 另类图片综合电影| 欧美在线免费一级片| 亚洲一区二区三区在线| 一本大道av伊人久久综合| 亚洲黑丝在线| **欧美日韩vr在线| 国语精品一区| 国产亚洲精品久久久久久| 欧美日韩综合另类| 美女精品网站| 欧美专区一区二区三区| 亚洲一区二区3| 一区二区三区成人| 日韩网站在线观看| 亚洲精品在线一区二区| 久久精品亚洲热| 欧美一区二区三区视频在线观看| 亚洲一级高清| 亚洲视频一起| 妖精成人www高清在线观看| 亚洲激情婷婷| 亚洲国产日韩精品| 亚洲国产精品久久精品怡红院| 一区二区在线视频播放| 国产专区欧美专区| 国产视频一区欧美| 国内精品伊人久久久久av影院 | 在线日韩av| 国产午夜精品理论片a级大结局| 国产精品免费网站| 欧美午夜一区二区福利视频| 欧美色网在线| 国产精品久久久久一区二区| 国产精品久久久久久久久久ktv| 欧美视频官网| 一区二区三区四区五区精品| 亚洲一区日本| 日韩网站在线观看| 亚洲国产精品热久久| 亚洲桃色在线一区| 一区二区三欧美| 一区二区三区四区国产| 亚洲视频第一页| 亚洲一区国产精品| 性欧美办公室18xxxxhd| 国产日韩欧美日韩| 亚洲乱码国产乱码精品精天堂| 亚洲黄网站在线观看| 亚洲国产精品一区二区第四页av| 亚洲日本成人| 亚洲老板91色精品久久| 亚洲乱亚洲高清| 99精品热视频| 亚洲专区一二三| 欧美一区高清| 亚洲精品极品| 亚洲影音先锋| 久久精品99无色码中文字幕| 久久伊伊香蕉| 欧美日韩成人综合在线一区二区| 欧美日韩一级黄| 国产精品视频久久| 国产一区二区无遮挡| 亚洲福利视频免费观看| 亚洲国产精品999| 日韩午夜激情av| 亚洲欧洲99久久| 亚洲人成毛片在线播放| 亚洲小说春色综合另类电影| 欧美伊人久久| 男人的天堂亚洲| 欧美午夜在线观看| 国内精品久久久久久久影视麻豆| 亚洲国产精品久久久久| 亚洲午夜国产成人av电影男同| 欧美一二三视频| 亚洲精品一区二区三区在线观看| 亚洲欧美激情在线视频| 蜜臀av国产精品久久久久| 欧美午夜激情视频| 黑人巨大精品欧美一区二区小视频| 亚洲人成艺术| 性欧美videos另类喷潮| a4yy欧美一区二区三区| 久久成人精品无人区| 欧美另类专区| 国产亚洲欧美一区二区三区| 亚洲精品一区在线观看| 欧美一区二区在线免费观看| 一二三区精品| 老司机一区二区| 欧美日韩综合一区| 国产一区二区三区观看| 亚洲精美视频| 亚洲欧美日韩国产中文| 亚洲视频免费观看| 久久综合中文字幕| 国产精品亚洲片夜色在线| 亚洲人成人一区二区三区| 欧美中文字幕不卡| 亚洲欧美国产另类| 欧美日韩ab片| 一区二区三区自拍| 亚洲欧美日韩国产另类专区| 老牛影视一区二区三区| 99在线|亚洲一区二区| 性一交一乱一区二区洋洋av| 一区二区三区高清| 浪潮色综合久久天堂| 国产精品乱码一区二区三区 | 久久精品国产欧美激情| 欧美激情综合网| 国产欧美一区二区三区在线看蜜臀 | 久久爱www| 午夜视频一区二区| 欧美人与性禽动交情品| 精品成人一区二区三区| 亚洲欧美日韩一区| 亚洲欧美另类久久久精品2019| 欧美日本一道本| 亚洲大片在线| 亚洲国产精品久久| 久久久久欧美精品| 国产精品一卡二| 亚洲婷婷综合色高清在线| 国产精品99久久99久久久二8| 欧美成人免费在线| 极品少妇一区二区三区| 欧美在线高清视频| 久久av二区| 国产精品观看| 亚洲人成网站在线观看播放| 久久精品国产欧美亚洲人人爽| 久久精品男女| 国产欧美精品va在线观看| 亚洲主播在线观看| 欧美亚洲日本一区| 国产精品无码永久免费888| 亚洲午夜久久久久久久久电影院 | 亚洲精品一级| 欧美激情1区2区3区| 91久久精品美女高潮| 亚洲精品色婷婷福利天堂| 欧美大片在线观看| 最新成人在线| 宅男精品视频| 蜜臀91精品一区二区三区| 国产一区二区三区在线观看视频| 亚洲欧美国产高清| 亚洲欧美日韩一区在线| 欧美日韩国产色视频| 亚洲精品国产精品国自产观看浪潮| 亚洲精品久久视频| 久久亚裔精品欧美| 国产综合亚洲精品一区二| 欧美一区2区视频在线观看 | 亚洲视频免费看| 欧美视频专区一二在线观看| 中日韩男男gay无套| 午夜精品国产更新| 国产欧美精品一区aⅴ影院| 欧美淫片网站| 美女国产一区| 亚洲精品裸体| 亚洲欧美激情一区二区| 国产日韩欧美三区| 亚洲国产一区二区三区在线播| 久久人体大胆视频| 亚洲国产成人久久| 亚洲日产国产精品| 欧美夫妇交换俱乐部在线观看| 亚洲国产mv| 一区二区精品在线| 国产精品v片在线观看不卡 | 夜夜爽夜夜爽精品视频| 香港成人在线视频| 一色屋精品视频免费看| 一本久久综合| 国产日产欧美精品| 亚洲区欧美区| 欧美美女操人视频| 亚洲视频在线免费观看| 欧美在线啊v| 影音先锋中文字幕一区二区| 亚洲看片网站| 国产精品高潮在线| 日韩午夜激情av| 性色av香蕉一区二区| 在线看日韩av| 日韩性生活视频| 国产女精品视频网站免费| 亚洲精品久久久久久久久久久久| 欧美午夜美女看片| 亚洲电影免费在线观看| 欧美日韩亚洲综合| 欧美综合国产| 欧美私人啪啪vps| 久久国产精品久久久久久久久久 | 亚洲国产欧美另类丝袜|