20120904-串口编程-MSComm使用1

一、初始化并打开串口

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对话框中。

20120904-串口编程-MSComm使用1_第1张图片

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));
}

小结:本程序上传至我的资源当中。


你可能感兴趣的:(20120904-串口编程-MSComm使用1)