VC6下用控件进行串口通信

打开VC++6.0,建立一个基于对话框的MFC应用程序。

  菜单中依次选择Project -> Add To Project -> Components and Controls

  在弹出的Components and Controls Gallery 窗口中双击Registered Activex Controls文件夹

  选中Microsoft Communications Control,version 6.0,点击Insert添加控件,如下图

  在这里如果没有找到Microsoft Communications Control,version 6.0怎么办?

  如果没有,说明这个控件还没有注册。那么需要先注册此控件,方法如下:

  开始 -> 运行 中输入 regsvr32 mscomm32.ocx

  点击确定注册

  添加控件后会弹出一个确认框

  点击“确定”

  再点击"OK",控件就添加成功了

  把此控件拖入界面中,利用MFC ClassWizard添加成员变量(我在这里用的变量名是m_msCom,可变),如图

  然后在控件的属性里进行一些必要的配置:

  CommPort设置串口号

  InputMode设置为1-Binary,表示以二进制方式检取数据

  RThreshold设置为1,表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

  其它的用默认值。

  也可以在OnInitDialog()函数中用代码设置,如下:

 m_msCom.SetCommPort(1);  // 指定串口号为1(视实际情况而定)

 if (m_msCom.GetPortOpen())

 {

  m_msCom.SetPortOpen(FALSE);

 }

 m_msCom.SetInputMode(1); //1:表示以二进制方式检取数据

 m_msCom.SetRThreshold(1);

  //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

  设置好以后,要在程序的开始打开串口,不然是没发使用的。在OnInitDialog中加入以下代码:

 m_msCom.SetPortOpen(TRUE);  // 打开串口

 m_msCom.GetInput();//先预读缓冲区以清除残留数据

  OK,在你需要的地方可以随时发送串口数据了,很简单:

m_msCom.SetOutput(COleVariant(TXData));   //发送数据TXData

  接收串口数据:

  首先要添加串口事件消息处理函数,双击控件,弹出添加成员函数对话框,我们用默认的函数名OnOnCommMscomm1,这里也可以更改函数名。

  这个函数是用来处理串口消息事件的,如每当串口接收到数据(正如我们前面设置的RThreshold,每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件),就会产生一个串口接收数据缓冲区中有字符的消息事件,刚才添加的函数就会执行,我们在OnOnCommMscomm1函数加入相应的处理代码就能实现自已想要的功能了。在该函数中加入如下代码以接收数据:

 // TODO: Add your control notification handler code here

 if (m_msCom.GetCommEvent() == 2)   //事件值为2表示接收缓冲区内有字符

 {

  Sleep(100);

  VARIANT rec_data;

  int data_len;

  char cData[1024];

  rec_data = m_msCom.GetInput();  // 读取缓冲区

  data_len = rec_data.parray->rgsabound->cElements;

  memcpy(cData,(char *)rec_data.parray->pvData,data_len);

  cData[data_len] = 0;

  // cData就是指向接收到的字符串的指针

  m_list.AddString(cData); //在listBox控件中显示接收到的数据

 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值