MSComm32.ocx控件的使用(串口通信)

研究了好几天,终于研究出怎么用了,实践出书上的代码不完全正确,甚至很多都是错的,总结如下:

1.注册MSComm32控件

     网上下载这个控件,然后把它拷贝到到C:\Windows\system32文件夹下,我装的是64位的Win7系 统,是在C:\Windows\sysWOW64文件夹下,然后打开cmd,写入代码 regsvr32 C:\Windows\system32\MSComm32.ocx然后按enter会提示你注册成功

2.在对话框中添加控件

     打开工具箱->右键选择选择项,等待一会会出现选择工具箱项,在COM组件下找到Microsoft communications control中的MSComm32.ocx项,勾选后添加,成功后在工具箱中就多了这么一个空间图标,可以拖进对话框中使用。

3.具体操作

      功能是实现串口发送出"Hello World!",串口实现自动接受串口数据。VC++编程,新建个对话框工程,然后添加"打开串口","关闭串口","发送数据","清空数据"等按钮, 接受数据可以自动实现就不用添加了,加入一个编辑框用来显示接收到的串口数据。下面具体实现这几个功能编程:

a.头文件添加#include "mscomm1.h"

在对话框中拖入这个控件,右键添加事件处理,在里面编程如下:

void CtestDlg::OnCommMscomm1()   //CtestDlg是我对话框项目实现文件中定义的类

{

VARIANT input1;
 BYTE rxdata[2048];
 long len1,k;
 COleSafeArray safearray1;
 int iLineNum=m_Edit1.GetLineCount();
 CString strDis,strTemp;
// short e=m_Com.get_CommEvent();
 if(iLineNum < 24)
    { 
  switch (m_Com.get_CommEvent())   //响应事件
  {
   case 2:      //当达到阈值字符时候处理
    input1 = m_Com.get_Input();
    safearray1 = input1;
    len1 = safearray1.GetOneDimSize();  //返回一维参数的长度
    for(k = 0;k < len1;k ++)
     safearray1.GetElement(&k,rxdata + k);//第一个参数是开始的数组指针,第二个是存放的数组指针
    for(k = 0;k < len1;k ++)
    {

      strTemp.Format("%02X-",rxdata[k]);  //十六进制显示
       strDis += strTemp;
       m_Edit1.ReplaceSel(strDis);
       strDis = "";
       UpdateData(false);
      }

    else
    {
  m_Edit1.SetSel(0, -1);
  m_Edit1.Clear();   
    }

}

b.打开串口按钮处理事件:

void CtestDlg::OnBnClickedOpencom()
{
 // TODO: 在此添加控件通知处理程序代码
 DWORD style = WS_VISIBLE | WS_CHILD;
 m_Com.put_CommPort(1);
 m_Com.put_Settings("9600,O,8,1");
 m_Com.put_InBufferSize(1024);
 m_Com.put_InBufferCount(0);
 m_Com.put_InputMode(1);
 m_Com.put_InputLen(0);
 m_Com.put_RThreshold(1);
 m_Com.put_PortOpen(1);
 AfxMessageBox("串口打开成功!");
 m_Opencom.EnableWindow(FALSE);
 m_Closecom.EnableWindow(TRUE);
 m_Edit1.EnableWindow(TRUE);
}

c.关闭串口按钮处理事件:

void CtestDlg::OnBnClickedClosecom()
{
 // TODO: 在此添加控件通知处理程序代码
 m_Com.put_PortOpen(0);
 AfxMessageBox("关闭串口成功!");
 m_Opencom.EnableWindow(TRUE);
 m_Closecom.EnableWindow(FALSE);
 m_Edit1.EnableWindow(TRUE);
}

d.发送数据按钮事件处理:

void CtestDlg::OnBnClickedSenddata()
{
 // TODO: 在此添加控件通知处理程序代码
 CString aa;
 aa = "Hello Word!!";
 m_Com.put_Output(COleVariant(aa));
}

e.清空数据按钮事件处理:

void CtestDlg::OnBnClickedClear()
{
 // TODO: 在此添加控件通知处理程序代码
 m_Edit1.SetSel(0, -1);
 m_Edit1.Clear();
 UpdateData(false);
}

你可能感兴趣的:(MSComm32.ocx控件的使用(串口通信))