當前位置:編程學習大全網 - 源碼下載 - VC++中如何用MSComm控件實現串口通信

VC++中如何用MSComm控件實現串口通信

1:添加MSComm控件

2:為對話框添加MSComm控件成員變量

右擊MSComm控件,然後選擇Add Variable...

3:為對話框添加OnComm事件

右擊MSComm控件,然後選擇Add Event Handle..

4:打開/關閉串口.

void?Ctbox_debug_viewDlg::OnBnClickedBtOpen()

{

//?TODO:?Add?your?control?notification?handler?code?here

if(m_mscomm.get_PortOpen())

{

m_mscomm.put_PortOpen(FALSE);

GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("打開"));

ShowInfo(_T("關閉串口成功!"));

m_OpenStatus?=false;

return;

}

UpdateData(TRUE);

m_OpenStatus?=true;

//當前端口號

m_mscomm.put_CommPort(m_Port+1);//端口號

m_mscomm.put_InBufferSize(1024);//接收緩沖區

m_mscomm.put_OutBufferSize(1024);//發送緩沖區

m_mscomm.put_InputLen(0);//設置當前接收區數據長度為0,表示全部讀取

m_mscomm.put_InputMode(1);//以二進制方式讀寫數據

m_mscomm.put_RThreshold(1);//接收緩沖區有1個及1個以上字符時,將引發接收數據的OnComm事件

//波特率

DWORD?baudrate;

switch(m_CombolBaudrate.GetCurSel())

{

case?0:

baudrate?=115200;

break;

case?1:

baudrate?=9600;

break;

default:

ASSERT(FALSE);

break;

}

CString?setting;

setting.Format(_T("%d,n,8,1"),baudrate);

m_mscomm.put_Settings(setting/*_T("115200,n,8,1")*/);//波特率,無校驗,8個數據位,1個停止1位

m_mscomm.put_PortOpen(TRUE);//打開串口

GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("關閉"));

ShowInfo(_T("打開串口成功!"));

}

5:接收串口數據

void?Ctbox_debug_viewDlg::OnCommMscomm1()

{

//?TODO:?Add?your?message?handler?code?here

short?curEvent?=m_mscomm.get_CommEvent();

switch(curEvent)

{

case?CMscomm1::comEvReceive:

EvReceiveHandle();

break;

}

}

void?Ctbox_debug_viewDlg::EvReceiveHandle(void)

{

static?unsigned?int?cnt=0;

VARIANT?variant_inp;

COleSafeArray?safearray_inp;

long?len,k;

/*unsigned?intdata[1024]={0};*/

BYTE?rxdata[1024];//設置BYTE數組

CString?strtemp;

cnt++;

variant_inp=?m_mscomm.get_Input();//讀取緩沖區

safearray_inp=?variant_inp;//變量轉換

len=?safearray_inp.GetOneDimSize();//得到有效的數據長度

for?(k=0;k<len;k++)

{

safearray_inp.GetElement(&k,rxdata+k);

}

/*char?c_char;?*/

for?(k=0;k<len;k++)

{

strtemp.Format(_T("%c"),*(rxdata+k));

m_RecveString?+=strtemp;

if(*(rxdata+k)?=='\n')

{

ShowInfoByFilter(m_RecveString);

m_RecveString?="";

}

}

}

6:發送串口數據

void?Ctbox_debug_viewDlg::OnBnClickedBtSend()

{

//?TODO:?Add?your?control?notification?handler?code?here

if(m_OpenStatus?==false)

{

AfxMessageBox(_T("請先打開串口"));

return;

}

UpdateData(TRUE);

if(m_SendString.IsEmpty())

return;

if(m_AutoAddLF)

{

m_SendString?+="\r\n";

}

m_mscomm.put_Output(COleVariant(m_SendString));

ShowInfo(m_SendString);

}

  • 上一篇:怎樣學習炒股票,新手炒股有哪些入門知識需要了解?
  • 下一篇:數據訪問與ADO.NET
  • copyright 2024編程學習大全網