VC串口小程序(用SerialPort类)

原创 2010年07月16日 21:57:00

先建立一个基于对话框的小程序,做好界面有串口号,打开串口按钮,关闭串口按钮,发送按钮,接收数据区和发送数据区。然后给串口号即组合框添加变量 CComboBox m_ctrlComPort;给接收数据编辑框添加关联变量 CString m_strRxMsg;给发送数据编辑框添加关联变量 CString m_strTxMsg;然后将SerialPort类的头文件和C++文件复制到工程中区,然后将它们添加到工程中去,将SerialPort的头文件包含到对话框中文件中去。在对话框头文件中定义一个布尔变量,用来表示标志串口是否打开,再定义一个对象用来调用SerialPort类中的函数。源码 BOOL m_bPortOpen;  //定义一个布尔变量标志串口是否打开;CSerialPort m_SerialPort;  //定义一个串口类的对象。

然后开始编辑代码,在SerialPort类中有多个串口事件可以响应,在一般串口编程中,只需要处理WM_COMM_RXCHAR消息就可以了,该类所有的消息处理都需要人工添加消息处理函数。将处理函数名字定义为OnComm()。首先向对话框头文件中添加串口字符接收消息WM_COMM_RXCHAR(串口接收缓冲区中有一个字符)的消息响应声明: 

// Generated message map functions
 //{{AFX_MSG(CSmSerialPortDlg)
 afx_msg LONG OnComm(WPARAM ch,LPARAM port);   //串口字符接收消息(WM_ONCOMM_RXCHAR)(串口接收缓冲区内有一个字符)的响应函数

然后再向对话框CPP文件中添加WM_ONCOMM_RXCHAR的消息映射

BEGIN_MESSAGE_MAP(CSmSerialPortDlg, CDialog)
 //{{AFX_MSG_MAP(CSmSerialPortDlg)
 ON_MESSAGE(WM_COMM_RXCHAR, OnComm)  //消息映射

接着,在对话框CPP文件中加入函数OnComm()的实现

//字符接收消息响应函数
LONG CSmSerialPortDlg::OnComm(WPARAM ch,LPARAM port)
{
 m_strRxMsg+=ch; //将接收到的字符存入编辑框对应的变量中
 UpdateData(FALSE);  //将接收到的字符显示在接受编辑框中
 return 0;
}

每当串口接收缓冲区中有一个字符时,就会产生一个WM_ONCOMM_RXCHAR消息,触发OnComm()函数,这时就可以在函数中进行数据处理,所以这个消息就是整个程序的发动机。

在CSmSerialPortDlg::OnInitDialog()初始化函数中将串口默认设置为COM1; m_ctrlComPort.SetCurSel(0); //初始选择串口1

添加 

GetDlgItem(IDC_BUTTON_OPENPORT)->EnableWindow(!m_bPortOpen);
 GetDlgItem(IDC_BUTTON_CLOSEPORT)->EnableWindow(m_bPortOpen);

使能打开串口或关闭串口按钮。

添加打开串口,关闭串口和发送按钮的消息响应处理函数如下:

void CSmSerialPortDlg::OnButtonCloseport()   //关闭串口按钮消息响应函数
{
 // TODO: Add your control notification handler code here
  
 m_bPortOpen=FALSE;

 GetDlgItem(IDC_BUTTON_OPENPORT)->EnableWindow(!m_bPortOpen);
 GetDlgItem(IDC_BUTTON_CLOSEPORT)->EnableWindow(m_bPortOpen);
}

void CSmSerialPortDlg::OnButtonOpenport()  //打开串口按钮消息响应函数
{
 // TODO: Add your control notification handler code here
 
 int nPort=m_ctrlComPort.GetCurSel()+1;   //得到串口号
 if(m_SerialPort.InitPort(this,nPort,9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512))
 {
  m_SerialPort.StartMonitoring();  //启动串口通信检测线程函数
  m_bPortOpen=TRUE;
 }
 else
 {
  AfxMessageBox("没有发现此串口或者被占用");
  m_bPortOpen=FALSE;
 }
 GetDlgItem(IDC_BUTTON_OPENPORT)->EnableWindow(!m_bPortOpen);
 GetDlgItem(IDC_BUTTON_CLOSEPORT)->EnableWindow(m_bPortOpen);
}

void CSmSerialPortDlg::OnButtonSend()
{
 // TODO: Add your control notification handler code here
 if(!m_bPortOpen)
 return ;      //检测串口是否打开
 UpdateData(TRUE);     //读入编辑框的数据
 m_SerialPort.WriteToPort((LPCTSTR)m_strTxMsg);  //发送数据
}
好了,这时此小串口程序就基本上完成了。

VC++ SerialPort类 串口调试程序vs2013工程

  • 2015年03月08日 10:39
  • 11.5MB
  • 下载

串口通信Serial Port类C++实现

串口介绍 串口叫做串行接口,也称串行通信接口,按电气标准及协议来分包括RS-232、RS-422、RS485、USB等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规...
  • luxiaoxun
  • luxiaoxun
  • 2012年06月08日 17:54
  • 35641

Win8+VS2012 配置OpenGL SuperBible5 环境

(1)glew:版本:1.7.0-win32下载地址:https://sourceforge.net/projects/glew/files/glew/安装步骤:将include文件夹下的.h文件拷贝...
  • Augusdi
  • Augusdi
  • 2014年03月04日 16:31
  • 8809

C++串口编程

本文为本人为满足个人项目需要而进行编写,不足之处还请见谅
  • lingtianyulong
  • lingtianyulong
  • 2016年06月15日 15:23
  • 4777

vc++基于VS2010用SerialPort类实现串口通信

  • 2014年01月02日 15:32
  • 29.2MB
  • 下载

[MFC]使用强大的第三方串口类 CSerialPort

最近要写一个串口程序,用MFC自带COM组件的效果很差(一次接收一个缓冲区的数据,没办法像写嵌入式程序那样单字节就能触发中断接收那样),所以进行了一些研究,发现了一个 第三方串口类 很强大,效果非常好...
  • humanking7
  • humanking7
  • 2015年08月30日 22:02
  • 7435

SerialPort串口类 VC串口类

  • 2012年09月09日 17:10
  • 7KB
  • 下载

C++ Serialport 串口通信类

  • 2012年09月20日 21:20
  • 7KB
  • 下载

一个印度人写的VC串口类CSerialCom(有串口基础介绍)

http://www.vc-rs232.com/html/VC_SSCOM_Control/2011/0117/34.html   一个印度人写的VC串口类CSerialCom(有串口基础介绍) ...
  • sunjianjun1981
  • sunjianjun1981
  • 2014年02月12日 15:32
  • 1161

VC++用第三方类实现串口通信

【原文】http://dev.yesky.com/29/2310029.shtml 与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控件进行串口访问要来的方便许多...
  • u012234115
  • u012234115
  • 2014年07月17日 22:23
  • 1981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC串口小程序(用SerialPort类)
举报原因:
原因补充:

(最多只允许输入30个字)