vs2013 串口收發例程


vs2013 串口收發例程講解:

  1. 創建MFC對話框,並布局好控件,后加入串口控件(在對話框上右鍵,選擇“insert ActiveX Control...”,之選擇“Microsoft Communications Control, version 6.0”控件)。
  2. 添加串口控件事件處理函數(右鍵串口控件,選擇"Add Event Handler"),同時添加串口成員變量,以及編輯框成員變量
  3. 同時雙擊兩個按鍵,添加兩個按鍵事件處理函數(一個處理串口打開,一個處理串口關閉)。
  4. 事件代碼如下:
  5. 開啟串口按鍵事件處理:
  6.  1 void CSerialComDlg::OnBnClickedButton1()//open
     2 {
     3     // TODO: Add your control notification handler code here
     4     if (m_pcomm.get_PortOpen())
     5     {
     6         m_pcomm.put_PortOpen(false);
     7     }
     8     m_pcomm.put_Settings(_T("9600,n,8,1"));
     9     m_pcomm.put_InputMode(1);
    10     m_pcomm.put_RThreshold(8);
    11     m_pcomm.put_InputLen(0);
    12     m_pcomm.put_PortOpen(true);
    13     if (m_pcomm.get_PortOpen())
    14     {
    15         GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_HIDE);
    16         GetDlgItem(IDC_BUTTON2)->ShowWindow(SW_SHOW);
    17     }
    18     else
    19     {
    20         AfxMessageBox(_T("Can not open serial port."));
    21     }
    22     m_pcomm.get_Input();
    23 }

     

  7. 關閉串口按鍵事件處理:
     1 void CSerialComDlg::OnBnClickedButton2()//close
     2 {
     3     // TODO: Add your control notification handler code here
     4     if (m_pcomm.get_PortOpen())
     5     {
     6         m_pcomm.put_PortOpen(false);
     7     }
     8     if (m_pcomm.get_PortOpen())
     9     {
    10         AfxMessageBox(_T("Can not close serial port."));
    11     }
    12     else
    13     {
    14         GetDlgItem(IDC_BUTTON2)->ShowWindow(SW_HIDE);
    15         GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_SHOW);
    16     }
    17 }

     

  8. 串口控件事件處理,用於處理串口事件
     1 void CSerialComDlg::OnCommMscomm1()
     2 {
     3     VARIANT variant_inp;
     4     COleSafeArray safearray_inp;
     5     LONG len;
     6     unsigned char rxdata[100];
     7     long i;
     8     CString str(rxdata);
     9     CString send = "C565A3D832045170CF2712239BADA944B39EB55E05063FA64F93CCB0440FA32E780B3CA947B3C8D0AB36DF1B4B";
    10     // TODO: Add your message handler code here
    11     if (m_pcomm.get_CommEvent()==2)
    12     {
    13         variant_inp = m_pcomm.get_Input();    //get byte from input buffer
    14         safearray_inp = variant_inp;        //VARIANTD to COleSafeArray type
    15         len = safearray_inp.GetOneDimSize();    //length of rx data
    16         for (i = 0; i < len; i++)
    17         {
    18             safearray_inp.GetElement(&i, rxdata + i);
    19         }
    20         m_Edit1 = "";
    21         for ( i = 0; i < len; i++)
    22         {
    23             str.Format(_T("%X"), rxdata[i]);
    24             if (strlen(str) == 0)
    25                 m_Edit1 += "00";
    26             else if (strlen(str) == 1)
    27             {
    28                 m_Edit1 += "0";
    29                 m_Edit1 += str;
    30             }
    31             else
    32                 m_Edit1 += str;
    33         }
    34         m_pcomm.put_Output(COleVariant(send));
    35         UpdateData(false);
    36     }
    37 }

     

  9. 因為我們將兩個按鍵疊加一起,當按下open按鍵,且串口打開正常時,顯示close按鍵,當按下close按鍵,且串口關閉正常時,顯示open按鍵。所以我們在啟動對話框的時候,需要先將close按鍵隱藏,而open按鍵顯示。因此我們需在對話框初始化時,添加代碼:
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);            // Set big icon
        SetIcon(m_hIcon, FALSE);        // Set small icon
    
        // TODO: Add extra initialization here
        GetDlgItem(IDC_BUTTON2)->ShowWindow(SW_HIDE);
        return TRUE;  // return TRUE  unless you set the focus to a control

     

  10. 至此,我們的項目就完成了,但是,我們編譯的時候,可能會提示錯誤提示,因為我們調用了strlen函數,所以我們需要將項目設置一下 
    Use Multi-Byte Character Set

點擊運行,項目完成。

記錄編程路上的點點滴滴,你會發現代碼給我們的樂趣是那么的令人回味。

謝謝.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM