VC2010 用MSComm打开串口

来源:互联网 发布:centos无法挂载ntfs 编辑:程序博客网 时间:2024/06/05 03:38

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();
  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控件实现串口通信详细步骤》      该文章讲解比较详细

0 0