Com"/>
  • 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于VC串口通信的實(shí)現(xiàn)

      2007-07-05 01:40:06王立萍
      關(guān)鍵詞:接收數(shù)據(jù)控件對話框

      王立萍

      摘要:介紹在VC++6.0開發(fā)平臺上。運(yùn)用MSComm控件實(shí)現(xiàn)串口通信.通過實(shí)例進(jìn)行具體詳細(xì)說明。

      關(guān)鍵詞:串口通信MSComm

      中圖分類號TP368.1文獻(xiàn)標(biāo)識碼B文章編號:1002-2422(2007)03-0046-02

      1建立應(yīng)用工程

      打開Visual C++,建立一個基于對話框的MFC應(yīng)用程序,在對話框中添加控件,用ClassWizard為相應(yīng)控件設(shè)置屬性及添加變量如表l所示,其中MSComm的添加見第二步。

      2在當(dāng)前工程中添加MSComm控件

      單擊菜單Add To Project->Components and Controls,在打開的對話框中選擇“Begistered AetiveX Controls”,再雙擊此項(xiàng)出現(xiàn)控件選擇對話框“Component and Controls Gallerf”,在該框中選擇“Microsoft Communications Control,version 6.O”控件,再單擊“Insert”按鈕,提示“Insert this com-ponent?”,確認(rèn)后,可以看到加入CMSComm類的Confirm Class對話框,提示加入到當(dāng)前工程中的CMSComm類頭文件為MSComm.h,實(shí)現(xiàn)文件為MSComm.epp。單擊“OK”按鈕關(guān)閉Confirm Class對話框,再單擊“Close”關(guān)閉Component and Controls Gallery對話框,則在VC集成環(huán)境中,當(dāng)前工程的Class View中就出現(xiàn)了CMSComm類,同時(shí)在對話框資源控件中出現(xiàn)了一個電話機(jī)形狀的控件,就是MSComm控件。

      利用這種添加控件的方法,對之后的串口消息事件處理會提供很大的方便,ClassWizard會自動在當(dāng)前程序工程中進(jìn)行消息類的映射。

      3初始化串口

      通過以上操作,ClassWizard自動在SCommTestDlg.h中加入了#include“mscomm.h”語句。

      //{AFX_INCLUDES()

      #include“mscomm.h”

      //}lAFX_INCLUDES

      下面,在CSCommTestDlg::OnlnitDialog()函數(shù)中寫入對串口的初始化語句,串口初始化語句由IDC_MSCOMMI的CMSComm控制變量m_etrlComm來設(shè)置串口控件屬性。代碼如下:

      m_ctdlComm.SetCommPort(1)

      m_ctdlComm.SetInputMode(1)

      m_ctdlComm.SetlnBufferSize(1024)

      m_ctdlComm.SetOutBufferSize(512)

      m_ctrlComm.SetSettings(“9000,n,8,1”)

      if(lm_ctrlComm.GetPortOpen())

      m_culComm.SetPortOpen(TRUE)

      m_ctdlComm.SetRThreshold(1)

      m_ctrlComm.SetInputLen(0)

      m_ctrlComm.Getlnput()

      4從串口接收數(shù)據(jù)

      MSComm控件一般用事件驅(qū)動方式從串口接收數(shù)據(jù),也就是消息處理,當(dāng)串口有事件發(fā)生時(shí),程序調(diào)用消息函數(shù)來處理數(shù)據(jù)。打開ClassWizard→Message Maps,在ClassName中選擇類CcomDlg,再在Object IDs中選擇IDC_MSCOMMl,然后在Message中雙擊消息OnComm(或單擊“Add Function”),在彈出的對話框中將函數(shù)名改為OnComm,單擊“OK”。就加入了串口事件的消息處理函數(shù)。在coreDlg.cpp文件中編寫OnComm()中的代碼,主要任務(wù)是從串口接收數(shù)據(jù)并顯示在接收編輯框中。

      void CComDlg:OnComm()

      {VARIANT varlant_inp;

      ColeSafeArray safearray_inp;

      LONG len,k;

      BYTE rxdata[2048]:

      CStrlng strtemp;

      if(m_ctrlComm.GetCommEvent()==2)

      {

      varlant_inp=m ctrlComm.GetInput():

      safearray_in=variant_inp;

      len=safeary_inp.GetOneDimSize():

      for(k=0;k<len;k++)

      safearray_inp.GetElement(&k,rxdata+k):

      for(k=O;k<len;k++)

      {

      BYTE bl=*(char*)(rxdata+k):

      strtemp.Format(“%c”,bt);

      m_strEditR.XData+=strtemp;

      }

      }

      UpdateData(FALSE);

      }

      5

      發(fā)送數(shù)據(jù)

      先為發(fā)送按鈕添加一個單擊消息,即BN_CLICKED處理函數(shù),打開ClassWizard→Message Maps,選擇類CComDlg,選中IDC_BUTrON_MANUALSEND,雙擊BN_CLICKED添加OnButtonManualsend函數(shù),在函數(shù)中添加如下代碼:

      void CComDlg::OnButtonManualsend()

      { updateData(TRUE);

      m_ctrlComm.SetOutput(COleVariant(m_strEditTXData));

      }

      6程序測試及結(jié)果

      需要兩個串口來測試程序,這兩個串口可以在一臺計(jì)算機(jī)上,也可以分別在兩臺計(jì)算機(jī)上,可自制一個三線串口線(發(fā)送、接收、地)將其連接??赏ㄟ^串口調(diào)試助手。

      7結(jié)束語

      通過實(shí)例介紹了基于VC控件MSComm的串口通信方法,MSComm控件比較簡單,一般只是用于較簡單的系統(tǒng),串口通信還可以使用Windows API函數(shù)和CSerial類,可以根據(jù)實(shí)際情況選擇合適的方法。

      猜你喜歡
      接收數(shù)據(jù)控件對話框
      沖激噪聲背景下基于幅度預(yù)處理的測向新方法*
      正?;謴?fù)虛擬機(jī)
      低復(fù)雜度多輸入多輸出雷達(dá)目標(biāo)角度估計(jì)方法
      Bootlace Worms’Secret etc.
      關(guān)于.net控件數(shù)組的探討
      軟件(2018年7期)2018-08-13 09:44:42
      單片機(jī)模擬串口數(shù)據(jù)接收程序的實(shí)現(xiàn)及優(yōu)化
      快速抓取對話框中的完整信息
      電腦迷(2012年22期)2012-04-29 20:30:54
      就這樣玩會VBA中常見的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      基于PCMCIA的ARINC429通信卡設(shè)計(jì)
      在PowerBuUder中利用WinSock控件制作簡單的Web服務(wù)器
      平原县| 乌鲁木齐市| 石家庄市| 富宁县| 叙永县| 平昌县| 忻城县| 南投县| 东阿县| 克山县| 普定县| 邵阳县| 武川县| 新巴尔虎左旗| 湘乡市| 东乡族自治县| 原阳县| 广安市| 五莲县| 阿拉善左旗| 江北区| 多伦县| 稷山县| 廊坊市| 越西县| 嘉禾县| 西充县| 青龙| 邢台县| 曲靖市| 会同县| 怀柔区| 泸水县| 长葛市| 西平县| 巴林右旗| 龙岩市| 西昌市| 慈利县| 高州市| 富平县|