MSComm32.ocx控件的使用(串口通訊)

研究了好幾天,終於研究出怎麼用了,實踐出書上的代碼不徹底正確,甚至不少都是錯的,總結以下: 編程

1.註冊MSComm32控件

     網上下載這個控件,而後把它拷貝到到C:\Windows\system32文件夾下,我裝的是64位的Win7系 統,是在C:\Windows\sysWOW64文件夾下,而後打開cmd,寫入代碼 regsvr32 C:\Windows\system32\MSComm32.ocx而後按enter會提示你註冊成功 數組

2.在對話框中添加控件

     打開工具箱->右鍵選擇選擇項,等待一會會出現選擇工具箱項,在COM組件下找到Microsoft communications control中的MSComm32.ocx項,勾選後添加,成功後在工具箱中就多了這麼一個空間圖標,能夠拖進對話框中使用。 工具

3.具體操做

      功能是實現串口發送出"Hello World!",串口實現自動接受串口數據。VC++編程,新建個對話框工程,而後添加"打開串口","關閉串口","發送數據","清空數據"等按鈕, 接受數據能夠自動實現就不用添加了,加入一個編輯框用來顯示接收到的串口數據。下面具體實現這幾個功能編程: spa

a.頭文件添加#include "mscomm1.h"

在對話框中拖入這個控件,右鍵添加事件處理,在裏面編程以下: 指針

void CtestDlg::OnCommMscomm1()   //CtestDlg是我對話框項目實現文件中定義的類 orm

{ 事件

VARIANT input1;
 BYTE rxdata[2048];
 long len1,k;
 COleSafeArray safearray1;
 int iLineNum=m_Edit1.GetLineCount();
 CString strDis,strTemp;
// short e=m_Com.get_CommEvent();
 if(iLineNum < 24)
    { 
  switch (m_Com.get_CommEvent())   //響應事件
  {
   case 2:      //當達到閾值字符時候處理
    input1 = m_Com.get_Input();
    safearray1 = input1;
    len1 = safearray1.GetOneDimSize();  //返回一維參數的長度
    for(k = 0;k < len1;k ++)
     safearray1.GetElement(&k,rxdata + k);//第一個參數是開始的數組指針,第二個是存放的數組指針
    for(k = 0;k < len1;k ++)
    { get

      strTemp.Format("%02X-",rxdata[k]);  //十六進制顯示
       strDis += strTemp;
       m_Edit1.ReplaceSel(strDis);
       strDis = "";
       UpdateData(false);
      } input

    else
    {
  m_Edit1.SetSel(0, -1);
  m_Edit1.Clear();   
    } cmd

}

b.打開串口按鈕處理事件:

void CtestDlg::OnBnClickedOpencom()
{
 // TODO: 在此添加控件通知處理程序代碼
 DWORD style = WS_VISIBLE | WS_CHILD;
 m_Com.put_CommPort(1);
 m_Com.put_Settings("9600,O,8,1");
 m_Com.put_InBufferSize(1024);
 m_Com.put_InBufferCount(0);
 m_Com.put_InputMode(1);
 m_Com.put_InputLen(0);
 m_Com.put_RThreshold(1);
 m_Com.put_PortOpen(1);
 AfxMessageBox("串口打開成功!");
 m_Opencom.EnableWindow(FALSE);
 m_Closecom.EnableWindow(TRUE);
 m_Edit1.EnableWindow(TRUE);
}

c.關閉串口按鈕處理事件:

void CtestDlg::OnBnClickedClosecom()
{
 // TODO: 在此添加控件通知處理程序代碼
 m_Com.put_PortOpen(0);
 AfxMessageBox("關閉串口成功!");
 m_Opencom.EnableWindow(TRUE);
 m_Closecom.EnableWindow(FALSE);
 m_Edit1.EnableWindow(TRUE);
}

d.發送數據按鈕事件處理:

void CtestDlg::OnBnClickedSenddata()
{
 // TODO: 在此添加控件通知處理程序代碼
 CString aa;
 aa = "Hello Word!!";
 m_Com.put_Output(COleVariant(aa));
}

e.清空數據按鈕事件處理:

void CtestDlg::OnBnClickedClear() {  // TODO: 在此添加控件通知處理程序代碼  m_Edit1.SetSel(0, -1);  m_Edit1.Clear();  UpdateData(false); }

相關文章
相關標籤/搜索