VC2019CMSComm控件串口通信編程教程StepbyStep_第1頁(yè)
VC2019CMSComm控件串口通信編程教程StepbyStep_第2頁(yè)
VC2019CMSComm控件串口通信編程教程StepbyStep_第3頁(yè)
VC2019CMSComm控件串口通信編程教程StepbyStep_第4頁(yè)
VC2019CMSComm控件串口通信編程教程StepbyStep_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VC2019CMSComm控件串?通信編程教程StepbyStep1.打開(kāi)VS2019,點(diǎn)擊“創(chuàng)建新項(xiàng)?”2.在模版搜索欄中輸?MFC,如果你的VS2019裝有C++MFC組件,會(huì)顯?下圖界?,點(diǎn)擊MFC應(yīng)?,再點(diǎn)擊下?步。3.輸?項(xiàng)?名稱及存儲(chǔ)路徑,點(diǎn)擊創(chuàng)建4.在應(yīng)?程序類型中選擇基于對(duì)話框,點(diǎn)擊完成初始界?如下:5.點(diǎn)擊“?具”菜單,再點(diǎn)擊“選擇?具箱項(xiàng)”6.在彈出對(duì)話框中,點(diǎn)擊“com組件”,然后在下?列表中選擇“MicrosoftCommunicationsControl…”,然后點(diǎn)擊“確定”7.將?具箱?的“MicrosoftCommunicationsControl…”拖到設(shè)計(jì)的對(duì)話框?,如下:c:\\Windows\\SysWOW64\\comctl32.ocx再點(diǎn)確定,注冊(cè)。注意我的系統(tǒng)是Win764位。10.在彈出對(duì)話框中,點(diǎn)擊MFC,選中右邊列表框中的ActiveX控件中的MFC類,點(diǎn)擊添加11.在彈出對(duì)話框中,可?類型庫(kù)欄,選中MicrosoftCommControl6.0….選中右下列表框中的IMSComm,在點(diǎn)擊》,點(diǎn)擊確定。12.打開(kāi)項(xiàng)?資源管理器,可看到,已添加了與串?通信有關(guān)的?件。13.按Ctrl+F5試運(yùn)??下,看是否存在錯(cuò)誤,結(jié)果如下,沒(méi)有錯(cuò)誤。14.對(duì)話框界?設(shè)計(jì),由于是演?程序,界?設(shè)計(jì)得?較簡(jiǎn)單。15.位串?設(shè)置中的五個(gè)CComboBox及發(fā)送接收區(qū)的編輯框添加關(guān)聯(lián)變量,編輯框還額外關(guān)聯(lián)CString變量分別為:strEditRevc,strEditInput。16.在DemoCSCommDlg的頭?件中包含CMSComm.h并在頭?件中定義CMSComm變量mctr_SComm17.將mctr_SComm關(guān)聯(lián)到對(duì)話框中的MicrosoftCommunicationsControl控件18.串?設(shè)置中的CComboBox控件初始化,為實(shí)現(xiàn)CComboBox的初始化數(shù)據(jù)按輸?順序排列,需將CComboBox控件屬性表中的排序設(shè)為False,為便于查看初始化數(shù)據(jù)加?,在CDemoCSCommDlg::OnInitDialog()中進(jìn)?。//初始化端?CComboBox控件mctr_Combobox_Port.AddString(_T("COM1"));mctr_Combobox_Port.AddString(_T("COM2"));mctr_Combobox_Port.AddString(_T("COM3"));mctr_Combobox_Port.AddString(_T("COM4"));mctr_Combobox_Port.AddString(_T("COM5"));mctr_Combobox_Port.AddString(_T("COM6"));mctr_Combobox_Port.AddString(_T("COM7"));mctr_Combobox_Port.AddString(_T("COM8"));mctr_Combobox_Port.AddString(_T("COM9"));mctr_Combobox_Port.AddString(_T("COM10"));mctr_Combobox_Port.SetCurSel(0);//初始化波特率CComboBox控件mctr_Combobox_Baudrate.AddString(_T("1200"));mctr_Combobox_Baudrate.AddString(_T("2400"));mctr_Combobox_Baudrate.AddString(_T("4800"));mctr_Combobox_Baudrate.AddString(_T("9600"));mctr_Combobox_Baudrate.AddString(_T("12800"));mctr_Combobox_Baudrate.AddString(_T("14400"));mctr_Combobox_Baudrate.AddString(_T("19200"));mctr_Combobox_Baudrate.AddString(_T("25600"));mctr_Combobox_Baudrate.AddString(_T("28800"));mctr_Combobox_Baudrate.AddString(_T("38400"));mctr_Combobox_Baudrate.AddString(_T("56000"));mctr_Combobox_Baudrate.SetCurSel(3);//初始化校驗(yàn)位CComboBox控件mctr_Combobox_Parity.AddString(_T("E"));mctr_Combobox_Parity.AddString(_T("M"));mctr_Combobox_Parity.AddString(_T("N"));mctr_Combobox_Parity.AddString(_T("O"));mctr_Combobox_Parity.AddString(_T("S"));mctr_Combobox_Parity.SetCurSel(2);//初始化數(shù)據(jù)位CComboBox控件mctr_Combobox_Data.AddString(_T("4"));mctr_Combobox_Data.AddString(_T("5"));mctr_Combobox_Data.AddString(_T("6"));mctr_Combobox_Data.AddString(_T("7"));mctr_Combobox_Data.AddString(_T("8"));mctr_Combobox_Data.SetCurSel(4);//初始化停?位CComboBox控件mctr_Combobox_StopBit.AddString(_T("1"));

mctr_Combobox_StopBit.AddString(_T("1.5"));mctr_Combobox_StopBit.AddString(_T("2"));mctr_Combobox_StopBit.SetCurSel(0);20.在串?未打開(kāi)時(shí),關(guān)閉串?按鈕應(yīng)該是不可操作,因此也需要,在初始化中設(shè)置。//初始化關(guān)閉串?按鈕CButton*pButton;pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLOSE_COMM);pButton->EnableWindow(0);21.在"DemoCSCommDlg.h"中定義兩個(gè)BOOL變量bOpen,bRecv?以標(biāo)記串?打開(kāi)狀態(tài)及是否接收數(shù)據(jù)。并在構(gòu)造函數(shù)中初始化這兩個(gè)變量,在CDemoCSCommDlg::OnPaint()中添加碼//CSCommopen/closeflagboolbOpen;//SCommreceivedataenable/disableflagboolbRecv;//變量初始化:CDemoCSCommDlg::CDemoCSCommDlg(CWnd*pParent/*=nullptr*/):CDialogEx(IDD_DEMOCSCOMM_DIALOG,pParent){m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);bOpen=0;bRecv=1;}//在CDemoCSCommDlg::OnPaint()中添加以下代碼:{CButton*pButton;if(bOpen){pButton=(CButton*)GetDlgItem(IDC_BUTTON_OPEN_COMM);pButton->EnableWindow(0);pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLOSE_COMM);pButton->EnableWindow(1);pButton=(CButton*)GetDlgItem(IDC_BUTTON_OPEN_SEND);pButton->EnableWindow(1);}

else{pButton=(CButton*)GetDlgItem(IDC_BUTTON_OPEN_COMM);pButton->EnableWindow(1);pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLOSE_COMM);pButton->EnableWindow(0);pButton=(CButton*)GetDlgItem(IDC_BUTTON_OPEN_SEND);pButton->EnableWindow(0);}if(bRecv){pButton=(CButton*)GetDlgItem(IDC_BUTTON_STOP_RECV);pButton->SetWindowTextW(_T("停?接收"));}else{pButton=(CButton*)GetDlgItem(IDC_BUTTON_STOP_RECV);pButton->SetWindowTextW(_T("接收數(shù)據(jù)"));}22.在"DemoCSCommDlg.h"中定義串?初始化函數(shù)23.在“DemoCSCommDlg.cpp”中實(shí)現(xiàn),源碼如下:voidCDemoCSCommDlg::InitScomm(shortmscommPort,CStringmSetsettings){//TODO:在此處添加實(shí)現(xiàn)代碼.mctr_SComm.put_CommPort(mscommPort);//選擇nCom?mctr_SComm.put_InputMode(1);//以?本?式獲取輸?數(shù)據(jù)mctr_SComm.put_InBufferSize(1024);//輸?緩沖區(qū)??為1024bytemctr_SComm.put_OutBufferSize(1024);//輸出緩沖區(qū)??為1024bytemctr_SComm.put_Settings(mSetsettings);//設(shè)置串?參數(shù)}24.?標(biāo)移動(dòng)到CSComm控件上按右鍵,為其添加事件處理程序在此函數(shù)中添加如下代碼,實(shí)現(xiàn)數(shù)據(jù)接收。voidCDemoCSCommDlg::OnCommMscomm1(){VARIANTvariant_inp;COleSafeArraysafearray_inp;CStringstrtemp;CByteArraybyteArr;shortnEvent=mctr_SComm.get_CommEvent();if(nEvent==2&&bRecv==TRUE){variant_inp=mctr_SComm.get_Input();//讀緩input沖區(qū)safearray_inp=variant_inp;//variant數(shù)據(jù)轉(zhuǎn)換成colesafearray型變量safearray_inp.GetByteArray(byteArr);byteArr.FreeExtra();intlen=byteArr.GetSize();for(inti=0;i<len;i++){BYTEbt=byteArr[i];strtemp.Format(L"%c",bt);strEditRevc+=strtemp;}mctr_Edit_Revc.SetWindowTextW(strEditRevc);}}25.對(duì)話框上的所有按鈕添加事件處理程序及實(shí)現(xiàn)代碼:afx_msgvoidOnBnClickedButtonOpenComm();afx_msgvoidOnBnClickedButtonSend();afx_msgvoidOnBnClickedButtonCloseComm();afx_msgvoidOnBnClickedButtonClear();afx_msgvoidOnBnClickedButtonStopRecv();//打開(kāi)串?voidCDemoCSCommDlg::OnBnClickedButtonOpenComm(){//TODO:在此添加控件通知處理程序代碼shortsPort=mctr_Combobox_Port.GetCurSel()+1;CStringstr,str1;str.Empty();mctr_Combobox_Baudrate.GetLBText(mctr_Combobox_Baudrate.GetCurSel(),str1);str+=str1;mctr_Combobox_Parity.GetLBText(mctr_Combobox_Parity.GetCurSel(),str1);str+=str1;mctr_Combobox_Data.GetLBText(mctr_Combobox_Data.GetCurSel(),str1);str+=str1;mctr_Combobox_StopBit.GetLBText(mctr_Combobox_StopBit.GetCurSel(),str1);str+=str1;str="9600,n,8,1";InitScomm(sPort,str);if(!mctr_SComm.get_PortOpen())try{mctr_SComm.put_PortOpen(1);//打開(kāi)串?}catch(CException*e){MessageBox(_T("打開(kāi)串?失敗"));

e->ReportError();e->Delete();}if(mctr_SComm.get_PortOpen()){MessageBox(L"打開(kāi)串?成功");mctr_SComm.put_RThreshold(1);//每當(dāng)串?接收緩沖區(qū)有多余或等于1個(gè)字符時(shí)將引發(fā)?個(gè)接收數(shù)據(jù)的oncomm事件mctr_SComm.put_InputLen(0);//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0,即?次讀取全部數(shù)據(jù)mctr_SComm.get_Input();//預(yù)讀緩沖區(qū)以清空殘留數(shù)據(jù)//讀寫(xiě)超時(shí)設(shè)置volatileHANDLEm_hCom;COMMTIMEOUTSm_TimeOuts;m_hCom=(HANDLE)mctr_SComm.get_CommPort();m_TimeOuts.ReadIntervalTimeout=MAXDWORD;m_TimeOuts.ReadTotalTimeoutMultiplier=0;m_TimeOuts.ReadTotalTimeoutConstant=0;m_TimeOuts.WriteTotalTimeoutMultiplier=50;m_TimeOuts.WriteTotalTimeoutConstant=2000;SetCommTimeouts(m_hCom,&m_TimeOuts);//對(duì)話框界?更新bOpen=1;CButton*pButton;pButton=(CButton*)GetDlgItem(IDC_BUTTON_OPEN_COMM);pButton->EnableWindow(0);pButton=(CButton*)GetDlgItem(IDC_BUTTON_SEND);pButton->EnableWindow(1);pButton=(CButton*)GetDlgItem(IDC_BUTTON_CLOSE_COMM);pButton->EnableWindow(1);}else{MessageBox(L"打開(kāi)串?失敗");}}

//發(fā)送數(shù)據(jù)voidCDemoCSCommDlg::OnBnClickedButtonSend(){//TODO:在此添加控件通知處理程序代碼CStringstrSendData;COleVariantcoleData;UpdateData();mctr_Edit_Input.GetWindowText(strSendData);coleData=(COleVariant)strSendData;mctr_SComm.put_Output((VARIANT)coleData);}//

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論