<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                串口是計算機上一種非常通用設備通信的協議。大多數計算機包含兩個基于RS232的串口。串口通信的概念非常簡單,串口按位(bit)發送和接收字節。盡管比按字節(byte)的并行通信慢,但是由于串口通信是異步的,串口可以在使用一根線發送數據的同時用另一根線接收數據。它很簡單并且能夠實現遠距離通信。串口通信最重要的參數是[波特](http://baike.baidu.com/view/543280.htm)率、數據位、停止位和奇偶校驗。 而在VC++中實現串口通信也是一名VC程序員必須要掌握的技能。下面結合實例詳細介紹在VC++中實現串口通信的過程(完整的實例可在我的CSDN資源中下載:[http://download.csdn.net/detail/margin1988/6408513](http://download.csdn.net/detail/margin1988/6408513))。 在這個實例中,實現了系統中可用串口的自動檢測(通過注冊表信息)、打開、發送、接收、關閉等基本的操作,若將串口線的TX(發送)和RX(接收)引腳連起來,便采用了“一根線發送數據的同時用另一根線接收數據”的方式測試了發送和接收功能的可用性和正確性。該實例對于初學者學習和掌握基于VC的串口通信將會有非常大的幫助。 (1)實例中所要用的主要控件及其屬性、事件設置情況: <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p align="center">控件</p></td><td valign="top"><p align="center">ID</p></td><td valign="top"><p align="center">caption</p></td><td valign="top"><p align="center">綁定變量</p></td><td valign="top"><p align="center">綁定事件</p></td></tr><tr><td valign="top"><p align="center">組合框</p></td><td valign="top"><p align="center">IDC_COMBO1</p></td><td valign="top"><p align="center">-</p></td><td valign="top"><p align="center">CComboBox m_com;</p></td><td valign="top"><p align="center">-</p></td></tr><tr><td valign="top"><p align="center">按鈕</p></td><td valign="top"><p align="center">IDC_BUTTON1</p></td><td valign="top"><p align="center">打開</p></td><td valign="top"><p align="center">CButton m_open;</p></td><td valign="top"><p align="center">OnBnClickedButton1()</p></td></tr><tr><td valign="top"><p align="center">按鈕</p></td><td valign="top"><p align="center">IDC_BUTTON2</p></td><td valign="top"><p align="center">發送</p></td><td valign="top"><p align="center">CButton m_send;</p></td><td valign="top"><p align="center">OnBnClickedButton2()</p></td></tr><tr><td valign="top"><p align="center">按鈕</p></td><td valign="top"><p align="center">IDC_BUTTON3</p></td><td valign="top"><p align="center">關閉</p></td><td valign="top"><p align="center">CButton m_close;</p></td><td valign="top"><p align="center">OnBnClickedButton3()</p></td></tr><tr><td valign="top"><p align="center">編輯框</p></td><td valign="top"><p align="center">IDC_EDIT1</p></td><td valign="top"><p align="center">發送輸入</p></td><td valign="top"><p align="center">CString m_sendstr;</p></td><td valign="top"><p align="center">-</p></td></tr><tr><td valign="top"><p align="center">編輯框</p></td><td valign="top"><p align="center">IDC_EDIT2</p></td><td valign="top"><p align="center">接收顯示</p></td><td valign="top"><p align="center">CString m_receivestr;</p></td><td valign="top"><p align="center">-</p></td></tr><tr><td valign="top"><p align="center">MSComm</p></td><td valign="top"><p align="center">IDC_MSCOMM1</p></td><td valign="top"><p align="center">-</p></td><td valign="top"><p align="center">CMSComm m_ctrlComm;</p></td><td valign="top"><p align="center">OnComm()</p></td></tr></tbody></table> (2)需要的硬件條件及情況說明: 需要一根串口線,一端接在PC的某個串口上,另一端的TX引腳和RX引腳用銅線連接起來,這樣便形成了一個回路,數據發送通過TX引腳出去后,又從RX引腳進來,程序中便可以得到接收到的數據了,接收到的數據應該和發送的數據一致,說明串口的發送、接收操作成功了。 (3)COM組件(MSComm控件)消息響應宏定義的**重要注意點**: ~~~ BEGIN_EVENTSINK_MAP (CPoint20Dlg, CDialog) ON_EVENT (CPoint20Dlg, IDC_MSCOMM1, 1, OnComm, VTS_NONE) END_EVENTSINK_MAP () ~~~ (4)從注冊表中檢測系統中可用串口并添加到界面組合框中: ~~~ HKEY hKey; int rtn; rtn = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", NULL, KEY_READ, &hKey); if( rtn == ERROR_SUCCESS) // 打開串口注冊表 { int i=0; char portName[256], commName[256]; DWORD dwLong,dwSize; while (1) { dwSize = sizeof(portName); dwLong = dwSize; rtn = RegEnumValue ( hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize ); // 枚舉串口 if( rtn == ERROR_NO_MORE_ITEMS ) break; // commName就是串口名字 m_com.AddString(commName);// 將可用串口添加到界面組合框 i++; } RegCloseKey(hKey); } m_com.SetCurSel(0); ~~~ (5)打開并設置串口參數: ~~~ if (!m_ctrlComm.GetPortOpen()) { char commName[256];//串口名 m_com.GetWindowText (commName, 256); m_ctrlComm.SetCommPort(_ttoi(&commName[3]));//從串口名中得到串口號 m_ctrlComm.SetInputMode (1); m_ctrlComm.SetSettings ("9600, n, 8, 1"); m_ctrlComm.SetPortOpen (TRUE); m_ctrlComm.SetRThreshold (1); m_ctrlComm.SetInputLen (0); m_ctrlComm.GetInput (); MessageBox(" 串口已打開 "); } else MessageBox("沒有發現此串口或被占用"); ~~~ (6)發送數據: ~~~ if (m_ctrlComm.GetPortOpen()) { UpdateData(); CByteArray sendArr;//欲發送的數據,需從CString轉化為CByteArray型 WORD wLen; wLen=m_sendstr.GetLength(); sendArr.SetSize(wLen); for (int i=0;i<wLen;i++){ sendArr.SetAt(i,m_sendstr.GetAt(i)); } m_ctrlComm.SetOutput (COleVariant (sendArr));//發送數據 } else MessageBox("串口未打開"); ~~~ (7)接收數據(onComm()函數): ~~~ VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[6000]; CString strtemp; if (m_ctrlComm.GetCommEvent()==2) { variant_inp=m_ctrlComm.GetInput (); safearray_inp=variant_inp; len=safearray_inp.GetOneDimSize(); for (k=0;k<len;k++) { safearray_inp.GetElement(&k,rxdata+k); BYTE bt=*(char*)(rxdata+k); //strtemp.Format(_T("%02X"),bt);//十六進制格式接收 strtemp.Format(_T("%c"),bt);//字符格式接收 m_receivestr+=strtemp; } UpdateData(FALSE); } ~~~ (8)關閉串口: ~~~ if(m_ctrlComm.GetPortOpen()) { m_ctrlComm.SetPortOpen (FALSE); MessageBox("串口已關閉"); } ~~~ (9)實例效果圖: ![](https://box.kancloud.cn/2016-08-31_57c6b4a826750.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看