VC2010 用MSComm打开串口

56 篇文章 2 订阅
43 篇文章 0 订阅

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C Builder是一个功能强大的集成开发环境(IDE),用于开发Windows平台上的应用程序。在C Builder中,可以使用MSComm控件进行串口编程。 MSComm是一个串口通信控件,可以用于在Windows系统上通过串口与外部设备进行数据交互。使用C Builder进行MSComm串口编程可以实现以下功能: 1. 打开和关闭串口:通过设置MSComm控件的PortOpen属性为True或False,可以打开或关闭串口连接。在初始化时,可以设置串口的端口号、波特率、数据位、停止位和校验位等参数。 2. 发送和接收数据:通过设置MSComm控件的Output和Input属性,可以向串口发送数据和从串口接收数据。可以使用Write和InputLen方法来发送和接收字符串,也可以使用Output和Input属性来直接访问串口数据。 3. 事件处理:MSComm控件提供了多个事件(如OnComm、OnCommEvent、OnCommError),可以用于处理串口通信过程中的各种情况,如接收到数据、通信错误等。通过编写事件处理程序,可以在特定情况下执行相应的操作。 4. 控制流控制:MSComm控件支持软件流控制和硬件流控制,可以通过设置控件的HandShaking属性来选择使用哪种流控制方式。软件流控制包括Xon/Xoff协议,硬件流控制包括CTS/RTS和DSR/DTR信号线。 总的来说,C Builder提供了强大的工具和库来进行串口编程,而MSComm控件则是其中一个常用的工具,可以方便地实现串口通信功能。通过C Builder和MSComm串口编程,可以与外部设备进行数据交互,实现数据采集、控制和通信等应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值