一、初始化并打开串口
1.新建一个名为“MSCommDemo”的单文档应用程序,加入MSComm控件,方法见“20120904-加载MSComm控件的方法”一文。
2.在视图类头文件MSCommDemoView.h中的头部加入如下语句
#include "mscomm.h"
3.点击View->ClassWizard,创建CMscommDemoView类中点击WM_CREATE,创建消息响应函数,添加如下语句
int CMSCommDemoView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
DWORD style=WS_VISIBLE|WS_CHILD;
if (!m_Comm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM))
{
TRACE0("Failed to create OLE Communication Control!\n");//创建不成功时报错
return -1;
}
return 0;
}
4.注意:IDC_MSCOMM是MSComm控件的ID号。
5.把MSComm控件拖到About对话框中。
6.初始化串口。在OnCreate函数中添加如下代码
m_Comm.SetCommPort(3);
m_Comm.SetInputMode(1);
m_Comm.SetSettings("9600,n,8,1");
m_Comm.SetSThreshold(1);
m_Comm.SetInputLen(0);
if (!m_Comm.GetPortOpen())
{
m_Comm.SetPortOpen(TRUE);
}
else
AfxMessageBox("Open The Serial Port 1 Failurre!");
m_Comm.GetInput();
二、捕获串口事件
1.在MSCommDemoView.h中添加
protected:
//{{AFX_MSG(CMSCommDemoView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnComm();
DECLARE_EVENTSINK_MAP();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
2.在MSCommDemoView.cpp中添加事件驱动
BEGIN_EVENTSINK_MAP(CMSCommDemoView,CView)
ON_EVENT(CMSCommDemoView,IDC_MSCOMM,1,OnComm,VTS_NONE)
END_EVENTSINK_MAP()
三、串口数据读写
1.为CMSCommDemoView类添加OnComm函数
void CMSCommDemoView::OnComm()
{
VARIANT m_input;
char *str,*str1;
int k,nEvent,i;
CString str2,m_RcvData;
nEvent=m_Comm.GetCommEvent();
switch (nEvent)
{
case 2:
k=m_Comm.GetInBufferCount();
if (k>0)
{
m_input=m_Comm.GetInput();
str=(char*)(unsigned char*)m_input.parray->pvData;
}
i=0;
str1=str;
while (i<k)
{
i++;
str1++;
}
*str1='\0';
str2=(const char*)str;
m_RcvData=(const char*)str;
break;
}
}
2..为CMSCommDemoView类添加SendData函数
void CMSCommDemoView::SendData()
{
int i,Count;
CString m_SendData;
m_SendData="Hello";
Count=m_SendData.GetLength();
CByteArray m_Array;
m_Array.RemoveAll();
m_Array.SetSize(Count);
for (i=0;i<Count;i++)
{
m_Array.SetAt(i,m_SendData[i]);
}
m_Comm.SetOutput(COleVariant(m_Array));
}
小结:本程序上传至我的资源当中。