串口数据通信程序实现(SerialPort类方法)
一、数据的接收和显示
1、在SerialPortTestDlg.h文件中添加OnComm函数声明,该函数在串口“字符接收消息”后进行处理,字符显示。
- /*-------------------------------------
- * SerialPortTestDlg.h文件
- *-------------------------------------*/
- class CSerialPortTestDlg : public CDialog
- {
- // Construction
- public:
- CSerialPort m_SerialPort; //CSerailPort类对象
- BOOL m_bSerialPortOpened; //标志串口是否打开
- //省略自动生成代码...
- protected:
- // Generated message map functions
- //{{AFX_MSG(CSerialPortTestDlg)
- //省略自动生成代码...
- /*----------------------------------------
- * OnComm函数声明,该函数在串口“字符接收”
- * 消息后进行相应处理,显示问题。
- *----------------------------------------*/
- afx_msg LONG OnComm(WPARAM ch, LPARAM port);
- afx_msg void OnButtonOpen();
- afx_msg void OnButtonClose();
- afx_msg void OnButtonSend();
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
2、在SerialPortTestDlg.cpp文件中进行消息对应(字符接收消息WM_COMM_RXCHAR)。
- /*----------------------------------------------
- * SerialPortTestDlg.cpp文件
- *----------------------------------------------*/
- BEGIN_MESSAGE_MAP(CSerialPortTestDlg, CDialog)
- //{{AFX_MSG_MAP(CSerialPortTestDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- /*----------------------------------------------
- * WM_COMM_RXCHAR消息<---->OnComm函数 映射声明
- *----------------------------------------------*/
- ON_MESSAGE(WM_COMM_RXCHAR, OnComm)
- ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpen)
- ON_BN_CLICKED(IDC_BUTTON_CLOSE, OnButtonClose)
- ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
3、在SerialPortTestDlg.cpp文件中加入OnComm函数实现。
- /*------------------------------------------------------
- * OnComm函数实现
- * 触发条件:当输入缓冲区有字符时,有消息触发
- * 执行结果:字符接收,并显示在文本框m_strEditReceiveMsg
- *------------------------------------------------------*/
- LONG CSerialPortTestDlg::OnComm(WPARAM ch, LPARAM port)
- {
- m_strEditReceiveMsg += ch;//接收字符
- UpdateData(FALSE); //将接收到的字符显示在接收编辑框中
- return 0;
- }
二、数据的发送
- /*-----------------------------------------------------------
- * 功 能:发送字符
- * 执行条件:点击“发送”按钮时(ButtonSend)
- * 执行结果:文本框m_strEditSendMsg中文字被发送。
- *----------------------------------------------------------*/
- void CSerialPortTestDlg::OnButtonSend()
- {
- // TODO: Add your control notification handler code here
- if(!m_bSerialPortOpened) return; //检查串口是否打开,如果没打开,退出
- //发送信息处理
- UpdateData(TRUE); //读入编辑框中的数据
- m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);//发送数据
- }
连接串口成功后,如果输入缓冲区有字符,将会被显示到接收文本框内,如果点击发送按钮,将会把输入文本框内数据发送到该串口的输出缓冲区内。数据将会通过该串口,与连接的另一个串口进行数据通信。