1. 添加串口通信控件:
在对话框上右键:
2.给控件添加变量
在控件(电话图标)上右键
命名为m_mscomm, 点击完成,工程中会自动添加"mscomm.h"和“mscomm.cpp"两个文件。
3. 添加串口控件的事件处理程序:
点击”添加编辑“即可。
4. 打开串口及串口设置程序:
void CCommSet10Dlg::OnBnClickedBtnOpencomm()
{
// TODO: Add your control notification handler code here
if (m_mscomm.get_PortOpen())
m_mscomm.put_PortOpen(FALSE); //关闭串口
m_mscomm.put_CommPort(4); //设定串口为COM4
m_mscomm.put_Settings(_T("9600,n,8,1")); //设定波特率9600,无奇偶校验,8位数据位,1位停止位
m_mscomm.put_InputMode(1); //设定数据接收模式,1为二进制,0为文本
m_mscomm.put_InputLen(0); //设定当前接收区数据长度,0表示全部读取
m_mscomm.put_InBufferSize(1024); //设定输入缓冲区大小为1024 byte
m_mscomm.put_OutBufferSize(1024); //设定输出缓冲区大小为1024 byte
m_mscomm.put_RThreshold(1); //每接收到1个字符时,触发OnComm事件
m_mscomm.put_SThreshold(0); //设定每发送多少个字符触发OnComm事件,0表示不触发OnComm事件
if (!m_mscomm.get_PortOpen())
m_mscomm.put_PortOpen(TRUE); //打开串口
else
AfxMessageBox("can't open serial port");
}
5. 串口处理函数程序:
void CCommSet10Dlg::OnCommMscomm1()
{
// TODO: Add your message handler code here
//AfxMessageBox("T1");
int nEvent;
nEvent = m_mscomm.get_CommEvent();
VARIANT variant_inp;
COleSafeArray safearray_inp;
BYTE rxdata[1024];
long len,k;
if (nEvent==2)
{
variant_inp = m_mscomm.get_Input(); // 获取 com 口传输过来的数据
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for (k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
if (rxdata[2]==0x10)
AfxMessageBox("Get it!");
else
AfxMessageBox("With wrong");
}
}
6. 发送数据程序
void CCommSet10Dlg::OnBnClickedBtnSenddata()
{
// TODO: Add your control notification handler code here
BYTE TxData[18];
TxData[0] = 0xaa; //preamble code
TxData[1] = 0x10; //command
TxData[2] = 0x0C; //data length
TxData[3] = 0x00; //data type, date edit first byte
TxData[4] = 0x01; //real data
TxData[5] = 0x00; //预留位
TxData[6] = 0x00;
TxData[7] = 0x00;
TxData[8] = 0x00;
TxData[9] = 0x00;
TxData[10] = 0x00;
TxData[11] = 0x00;
TxData[12] = 0x00;
TxData[13] = 0x00;
TxData[14] = 0x00;
TxData[15] = TxData[1]+TxData[2]+TxData[3]+TxData[4]+TxData[5]+TxData[6]+TxData[7]+TxData[8]+TxData[9]
+TxData[10]+TxData[11]+TxData[12]+TxData[13]+TxData[14]; //check sum
if (TxData[15]==0x17)
TxData[15]=0x18;
else
TxData[15]=TxData[15];
TxData[16] = 0x17; //back code
TxData[17] = 0x17; //back code
CByteArray array;
int a;
array.RemoveAll();
array.SetSize(18);
for (a=0;a<18;a++)
{
array.SetAt(a,TxData[a]);
}
m_mscomm.put_Output(COleVariant(array));
}
参考:D:\Yifei\Download\VC++\MFC 目录下《在VS(VC)2010中使用MSComm控件实现串口通信详细步骤》 该文章讲解比较详细