程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC6下用控件進行串口通信

VC6下用控件進行串口通信

編輯:關於VC++

打開VC++6.0,建立一個基於對話框的MFC應用程序。

菜單中依次選擇Project -> Add To Project -> Components and Controls

在彈出的Components and Controls Gallery 窗口中雙擊Registered Activex Controls文件夾

選中Microsoft Communications Control,version 6.0,點擊Insert添加控件,如下圖

在這裡如果沒有找到Microsoft Communications Control,version 6.0怎麼辦?

如果沒有,說明這個控件還沒有注冊。那麼需要先注冊此控件,方法如下:

開始 -> 運行 中輸入 regsvr32 mscomm32.ocx

點擊確定注冊

添加控件後會彈出一個確認框

點擊“確定”

再點擊"OK",控件就添加成功了

把此控件拖入界面中,利用MFC ClassWizard添加成員變量(我在這裡用的變量名是m_msCom,可變),如圖

然後在控件的屬性裡進行一些必要的配置:

CommPort設置串口號

InputMode設置為1-Binary,表示以二進制方式檢取數據

RThreshold設置為1,表示每當串口接收緩沖區中有多於或等於1個字符時將引發一個接收數據的OnComm事件

其它的用默認值。

也可以在OnInitDialog()函數中用代碼設置,如下:

m_msCom.SetCommPort(1); // 指定串口號為1(視實際情況而定)
 if (m_msCom.GetPortOpen())
 {
  m_msCom.SetPortOpen(FALSE);
 }
 m_msCom.SetInputMode(1); //1:表示以二進制方式檢取數據
 m_msCom.SetRThreshold(1);

//參數1表示每當串口接收緩沖區中有多於或等於1個字符時將引發一個接收數據的OnComm事件

設置好以後,要在程序的開始打開串口,不然是沒發使用的。在OnInitDialog中加入以下代碼:

m_msCom.SetPortOpen(TRUE); // 打開串口
 m_msCom.GetInput(); //先預讀緩沖區以清除殘留數據

OK,在你需要的地方可以隨時發送串口數據了,很簡單:

m_msCom.SetOutput(COleVariant(TXData)); //發送數據TXData

接收串口數據:

首先要添加串口事件消息處理函數,雙擊控件,彈出添加成員函數對話框,我們用默認的函數名OnOnCommMscomm1,這裡也可以更改函數名。

這個函數是用來處理串口消息事件的,如每當串口接收到數據(正如我們前面設置的RThreshold,每當串口接收緩沖區中有多於或等於1個字符時將引發一個接收數據的OnComm事件),就會產生一個串口接收數據緩沖區中有字符的消息事件,剛才添加的函數就會執行,我們在OnOnCommMscomm1函數加入相應的處理代碼就能實現自已想要的功能了。在該函數中加入如下代碼以接收數據:

// TODO: Add your control notification handler code here
 if (m_msCom.GetCommEvent() == 2) //事件值為2表示接收緩沖區內有字符
 {
  Sleep(100);
  VARIANT rec_data;
  int data_len;
  char cData[1024];
  rec_data = m_msCom.GetInput(); // 讀取緩沖區
  data_len = rec_data.parray->rgsabound->cElements;
  memcpy(cData,(char *)rec_data.parray->pvData,data_len);
  cData[data_len] = 0;
  // cData就是指向接收到的字符串的指針
  m_list.AddString(cData); //在listBox控件中顯示接收到的數據
 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved