圖解VC中使用mscomm串口控件_第1頁
圖解VC中使用mscomm串口控件_第2頁
圖解VC中使用mscomm串口控件_第3頁
圖解VC中使用mscomm串口控件_第4頁
圖解VC中使用mscomm串口控件_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、免費(fèi)的圖析VC+6.0中使用mscomm串口控件東南大學(xué)計(jì)算機(jī)學(xué)院 楊全勝按下列圖所示建立一個基于對話框的MFC程序這樣就得到了下圖所示的界面:右鍵點(diǎn)擊sport的對話框界面,在彈出的菜單中選擇屬性,打開下面的屬性對話框:建立下圖所示的對話框控件:各控件屬性如下:下面再做第二個對話框配置對話框右鍵點(diǎn)擊下圖左邊的Dialog,在彈出的菜單中選擇Insert Dialog這樣就得到下圖鼠標(biāo)右鍵點(diǎn)擊上圖右邊的對話框,在彈出的菜單中選擇屬性,并建立下列屬性:建立下圖的各種控件:其中“串口號“、”波特率“、“數(shù)據(jù)位”、“停止位”、“奇偶位”字樣都是static Text控件,如“串口號:”文字的控件屬性

2、為:這些文字的下拉框都是Combo Box控件,他們的屬性為:下面右鍵點(diǎn)擊工具欄的空白處,在打開的菜單中選擇“定制窗口”,在下面的定制對話框中查看分類里將下面的兩個按鈕移動到某個菜難欄中,其中左上的那個按鈕是”類生成“按鈕。設(shè)置好后,左鍵點(diǎn)擊剛才的“串口配置”對話框,然后再點(diǎn)擊“類生成”按鈕。出現(xiàn)下面的對話框點(diǎn)擊OK后出現(xiàn)下面對話框,按下面圖填好點(diǎn)擊Change按鈕,按下圖來設(shè)置Change Files對話框按OK后得到下面的對話框這樣得到新的類如下圖:雙擊下圖IDC_COMN控件,按下圖設(shè)置其成員變量:得到下圖的結(jié)果使用上述方法建立下列控件的成員函數(shù)下面我們來將mscomm控件加進(jìn)項(xiàng)目:在s

3、portDlg.h中加入MSComm控件:#include "mscomm.h"protected: CMSComm m_ComPort;public:CSportDlg(CWnd* pParent = NULL);/ standard constructorintm_baund;intm_comn;intm_databit;intm_jiaoyan;intm_stopbit;在CSportDlg:OnInitDialog()中:DWORD style=WS_VISIBLE|WS_CHILD; if (!m_ComPort.Create( NULL,style,CRect(

4、0,0,0,0),this,ID_COMMCTRL) )TRACE0("Failed to create OLE Communications Controln");return -1; / fail to create m_baund = 2; / 配置窗口參數(shù)初始化m_comn = 0;m_databit = 3;m_jiaoyan = 0; m_stopbit = 0;/ 缺省的串口初始化m_ComPort.SetCommPort(1); / 選擇串口號m_ComPort.SetInBufferSize(1024); /接收緩沖區(qū) m_ComPort.SetOutBu

5、fferSize(1024);/發(fā)送緩沖區(qū) m_ComPort.SetInputLen(0);/設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0,表示全部讀取 m_ComPort.SetInputMode(1);/以二進(jìn)制方式讀寫數(shù)據(jù) m_ComPort.SetRThreshold(1);/接收緩沖區(qū)有大于等于1個字符時,將引發(fā)接收數(shù)據(jù)的OnCommMscomm事件m_ComPort.SetSettings("9600,n,8,1"); /設(shè)置波特率等參數(shù)if(!m_ComPort.GetPortOpen() /打開串口m_ComPort.SetPortOpen(TRUE);else m_Com

6、Port.SetOutBufferCount(0);按照下列圖為“配置”按鈕添加功能函數(shù):雙擊BN_CLICKED得到功能函數(shù)void CSportDlg:Onconfig() / TODO: Add your control notification handler code here添上下面的代碼,就可以得到該函數(shù)的功能void CSportDlg:Onconfig() / 配置按鈕被按下/ TODO: Add your control notification handler code hereCSconfig con;/將端口配置初始化數(shù)據(jù)傳遞的配置對話框中con.m_baund =

7、m_baund; con.m_comn = m_comn;con.m_databit = m_databit;con.m_jiaoyan = m_jiaoyan;con.m_stopbit = m_stopbit;if(con.DoModal()=IDOK) / 配置對話框是“確定”按鈕按下,需要重新配置端口m_ComPort.SetPortOpen(FALSE);m_ComPort.SetCommPort(m_comn+1); /設(shè)置串口號m_ComPort.SetInBufferSize(1024); /接收緩沖區(qū) m_ComPort.SetOutBufferSize(1024);/發(fā)送緩

8、沖區(qū) m_ComPort.SetInputLen(0);/設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0,表示全部讀取 m_ComPort.SetInputMode(1);/以二進(jìn)制方式讀寫數(shù)據(jù) m_ComPort.SetRThreshold(1);/接收緩沖區(qū)有1個及1個以上字符時,將引發(fā)接收數(shù)據(jù)的OnCommMscomm事件CString conf;switch(m_baund) / 設(shè)置波特率case 0:conf = "2400,"break;case 1:conf = "4800,"break;case 2:conf = "9600,"brea

9、k;default:conf = "9600,"switch(m_jiaoyan) / 設(shè)置校驗(yàn)方法case 0:conf = conf + "n,"break;case 1:conf = conf + "o,"break;case 2:conf = conf + "e,"break;default:conf = conf+"n,"break;switch(m_databit) / 設(shè)置數(shù)據(jù)位case 0:conf = conf + "5,"break;case 1:conf

10、 = conf + "6,"break;case 2:conf = conf + "7,"break;case 3:conf = conf + "8,"break;default:conf = conf+"8,"break;switch(m_stopbit) / 設(shè)置停止位 case 0:conf = conf + "1"break;case 1:conf = conf + "1.5"break;case 2:conf = conf + "2"break;

11、default:conf = conf+"1"break;m_ComPort.SetSettings(conf); /設(shè)置波特率等參數(shù)if(!m_ComPort.GetPortOpen() /打開串口m_ComPort.SetPortOpen(TRUE);用上述方法添加發(fā)送按鈕的功能函數(shù)void CSportDlg:Onsendbtn() / TODO: Add your control notification handler code hereUpdateData(TRUE);int len; CByteArray array;len=m_send.GetLength(

12、);array.RemoveAll();array.SetSize(len);for(int i=0;i<len;i+)array.SetAt(i, m_sendi);m_ComPort.SetOutput(COleVariant(array); / 發(fā)送數(shù)據(jù)下面我們經(jīng)過增加事務(wù)截獲功能來增加串口接收功能:在sportDlg.h中增加:protected:afx_msg void OnCommMscomm();DECLARE_EVENTSINK_MAP()在sportDlg.cpp中增加:BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )ON_EVENT

13、(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE) /映射/ActiveX控件事件END_EVENTSINK_MAP() void CSportDlg:OnCommMscomm() / 串口事件到來VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata2048; /設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed. CString strtemp; switch(m_ComPort.GetCommEvent() case

14、 1: / comEvSend發(fā)送數(shù)據(jù) break; case 2: / comEvReceive讀取數(shù)據(jù) 串口接收事件到來/ MessageBox(_T("讀取數(shù)據(jù)事件"), _T("TRACE"), MB_OK); variant_inp=m_ComPort.GetInput(); /讀緩沖區(qū) safearray_inp=variant_inp; /VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量 len=safearray_inp.GetOneDimSize(); /得到有效數(shù)據(jù)長度 / 接受數(shù)據(jù) for(k=0; k<len; k+) safearray_inp.GetElement(&k,

溫馨提示

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

評論

0/150

提交評論