VC6下用控件進行串口通信

打開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控件中顯示接收到的數據

 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章