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

      1 引言

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

      2 總體設(shè)計(jì)方案

      總體設(shè)計(jì)方案如圖 1 所示。

                 圖 1 總體設(shè)計(jì)圖

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

      3 串口通信設(shè)計(jì)與實(shí)現(xiàn)

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

      3.1 下位機(jī)的串口通信模塊

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

      下面重點(diǎn)介紹一下串口通信模塊的處理方式。

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

      3.2 上位機(jī)的串口通信模塊

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

 圖 2 上位機(jī)串口通信模塊處理流程圖

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

  基類_base_com 的聲明如下。

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

  {

  protected:

  volatile int _port; //串口號(hào)

  volatile HANDLE _com_handle;//串口句柄

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

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

  COMMTIMEOUTS _co; // 超時(shí)時(shí)間

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

  virtual bool open_port() = 0;

  void init(); //初始化

  public:

  _base_com()

  {

  init();

  }

  virtual ~_base_com();

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

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

  inline bool set_para();

  //支持設(shè)置字符串 "9600, 8, n, 1"

  bool set_dcb(char *set_str);

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

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

  ONESTOPBIT);

  //設(shè)置緩沖區(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);

  //關(guān)閉串口

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

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

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

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

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

  if(!beo)

  return CKBR_OWNERERROR;

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

  CKMessageManager *mm = BehContext.MessageManager; //消息管理對(duì)象

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

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

  activeOutput_0 = TRUE;

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

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

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

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

  4.3 動(dòng)作控制行為模組

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

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

  5 結(jié)論

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

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久亚洲综合网| 国产日本欧美视频| 久久国产天堂福利天堂| 中文亚洲视频在线| 一本色道久久88综合日韩精品| 欧美在线视频日韩| 欧美在线免费视频| 欧美一区视频在线| 欧美影院成人| 欧美一区二区三区在| 欧美亚洲网站| 欧美一区二区视频免费观看| 亚洲欧美在线视频观看| 亚洲一区三区在线观看| 亚洲一区二区三区精品在线观看 | 激情欧美一区二区三区| 国产一区视频在线观看免费| 国产日产亚洲精品| 国产亚洲欧美一区二区三区| 国产一区在线看| 国产真实久久| 一区在线观看| 亚洲国产婷婷| 最新中文字幕亚洲| 日韩手机在线导航| 一区二区激情小说| 亚洲在线观看免费视频| 亚洲欧美一区二区原创| 午夜精品久久久久| 欧美在线看片| 亚洲第一页在线| 亚洲国产精品高清久久久| 亚洲激情不卡| 99国产精品视频免费观看| 一区二区日本视频| 亚洲欧美激情视频| 久久99伊人| 狂野欧美一区| 欧美电影免费观看大全| 欧美区日韩区| 国产精品毛片在线| 国产一区二区三区视频在线观看| 好吊视频一区二区三区四区| 亚洲大胆人体在线| 日韩视频免费大全中文字幕| 亚洲一区二区精品| 久久精品卡一| 日韩视频免费观看高清完整版| 亚洲视屏在线播放| 欧美在线免费一级片| 久久综合五月| 欧美日韩一区二区高清| 国产欧美日韩激情| 在线看成人片| av不卡在线看| 性欧美长视频| 亚洲精品在线一区二区| 午夜精品免费在线| 免费在线成人av| 国产精品xnxxcom| 国模私拍视频一区| 日韩天堂在线视频| 午夜一区在线| 99国产精品一区| 久久国产视频网站| 欧美日韩三级电影在线| 国产小视频国产精品| 亚洲人成在线播放网站岛国| 亚洲欧美日韩专区| 一本综合精品| 久久免费观看视频| 国产精品国产三级国产专播精品人 | 亚洲一区二区少妇| 久久一区二区三区四区五区| 欧美日韩第一区| 国产一区二区成人| 99在线精品视频| 久久精品视频在线| 亚洲免费小视频| 女人色偷偷aa久久天堂| 国产精品久久夜| 最新日韩在线| 亚洲第一久久影院| 午夜精品成人在线| 欧美国产精品劲爆| 国产在线观看91精品一区| 99综合电影在线视频| 欧美在线一二三| 亚洲伊人网站| 欧美另类极品videosbest最新版本| 国产色爱av资源综合区| 夜夜夜久久久| 99在线精品免费视频九九视| 蜜桃av一区| 国产在线一区二区三区四区| 亚洲午夜小视频| 中日韩午夜理伦电影免费| 蜜桃伊人久久| 国产一区在线观看视频| 亚洲欧美欧美一区二区三区| 在线亚洲自拍| 欧美搞黄网站| 亚洲国产1区| 久久精品日韩一区二区三区| 欧美一区亚洲二区| 国产精品夜夜夜一区二区三区尤| 99国产麻豆精品| 一区二区三区www| 欧美激情二区三区| 亚洲国产经典视频| 亚洲国产一区二区三区在线播 | 欧美日韩国产丝袜另类| 最新国产精品拍自在线播放| 亚洲国产老妈| 久久夜色精品亚洲噜噜国产mv| 国产欧美一区在线| 午夜精品婷婷| 久久疯狂做爰流白浆xx| 国产精品亚洲成人| 亚洲女同性videos| 欧美尤物一区| 国产婷婷色综合av蜜臀av| 亚洲综合首页| 久久国产欧美日韩精品| 国产日韩欧美综合精品| 欧美一区二区日韩一区二区| 久久激情久久| 国产夜色精品一区二区av| 欧美一区激情视频在线观看| 久久精品五月婷婷| 国模精品一区二区三区| 亚洲风情亚aⅴ在线发布| 老司机精品福利视频| 在线精品观看| 亚洲精品日韩久久| 欧美日韩国产综合在线| 一区二区三区国产精品| 亚洲综合精品一区二区| 国产伦精品一区二区三区四区免费 | 欧美一区二区三区四区视频| 国产亚洲欧美日韩在线一区| 亚洲国产91精品在线观看| 欧美mv日韩mv亚洲| 亚洲毛片播放| 亚洲免费伊人电影在线观看av| 国产精品日韩专区| 欧美专区一区二区三区| 乱码第一页成人| 亚洲精品欧美一区二区三区| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 国产精品一区二区三区久久| 欧美中文字幕在线| 欧美国产日韩二区| 欧美激情在线播放| 亚洲午夜影视影院在线观看| 欧美在线看片a免费观看| 在线观看av一区| 一区二区动漫| 国产精品一区在线播放| 亚洲国产精品99久久久久久久久| 欧美激情精品久久久久久黑人 | 亚洲国产婷婷香蕉久久久久久| 欧美日韩高清区| 亚洲欧美一区二区视频| 免费欧美在线视频| 一区二区三区四区五区视频 | 麻豆成人在线| 99视频+国产日韩欧美| 欧美一区二区精品| 136国产福利精品导航网址应用| 亚洲少妇在线| 激情另类综合| 国产精品99久久久久久久久 | 亚洲成人在线视频网站| 亚洲一区二区三区精品在线观看| 国产区二精品视| 亚洲美女淫视频| 国产拍揄自揄精品视频麻豆| 亚洲精品小视频| 国产情人节一区| 在线视频精品| 国内揄拍国内精品久久| 一卡二卡3卡四卡高清精品视频| 国产日韩欧美视频在线| 亚洲精品小视频在线观看| 国产欧美一区二区三区另类精品 | 亚洲免费av电影| 国产欧美在线观看| 一区二区日韩| 黄色成人91| 亚洲欧美日韩国产中文| 狠狠干成人综合网| 国产在线精品一区二区中文| 性欧美xxxx视频在线观看| 欧美四级在线观看| 亚洲欧美视频在线观看视频| 欧美国产精品劲爆| 性欧美18~19sex高清播放| 欧美精品久久一区| 亚洲第一区中文99精品|