串口编程中SerialPort类介绍以及应用
来源:互联网 发布:刺客信条叛变优化设置 编辑:程序博客网 时间:2024/05/22 10:43
SerialPort类的源代码已经放在下面,SerialPort类是由Remon Spekreijse提供的免费串口类。
CSerialPort支持线连接的串口编程,而且是基于多线程的,工作流程:
1.设置串口参数。
函数原型:
BOOL CSerialPort::InitPort(CWnd* pPortOwner, // the owner (CWnd) of the port (receives message) UINT portnr, // portnumber (1..4) UINT baud, // baudrate char parity, // parity UINT databits, // databits UINT stopbits, // stopbits DWORD dwCommEvents, // EV_RXCHAR, EV_CTS etc UINT writebuffersize) // size to the writebuffer
2.串口监测线程。
BOOL CSerialPort::StartMonitoring() BOOL CSerialPort::RestartMonitoring()BOOL CSerialPort::StopMonitoring()void CSerialPort::WriteChar(CSerialPort* port)void CSerialPort::ReceiveChar(CSerialPort* port, COMSTAT comstat)void CSerialPort::WriteToPort(char* string)
3.监测线程接收事件信息,再进行消息处理即可。
SerialPort类的应用
基于对话框的串口程序开发:
1.将SerialPort类添加进工程;
2.进行消息的映射;
(注意:在SerialPort类的头文件中的:#define WM_COMM_RXCHAR WM_USER+7需要手动进行映射)在工程的主对话框头文件中,格式如下:afx_msg LONG OnComm(WPARAM ch,LPARAM port);在工程的主对话框的CPP文件中,格式如下:BEGIN_MESSAGE_MAP(CMy20040889SerialPortTestDlg, CDialog)//{{AFX_MSG_MAP(CMy20040889SerialPortTestDlg)ON_MESSAGE(WM_COMM_RXCHAR,OnComm)...//}}AFX_MSG_MAPEND_MESSAGE_MAP()然后在CPP中添加消息处理函数,本例中为OnComm。例如:LONG CTestDlg::OnComm(WPARAM ch, LPARAM port){m_strEditReceiveMsg += ch;UpdateData(FALSE);return 0;}//m_strEditReceiveMsg 为EDIT控件(接收框)的变量。//下面的m_strEditSendMsg同样处理。
3.实现串口的初始化,打开/关闭串口按钮的响应函数,最后是发送信息按钮的函数实现。
void CTestDlg::OnButtonOpen(){int nPort=m_ctrlComboComPort.GetCurSel()+1;if(m_SerialPort.InitPort(this, nPort, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512)){m_SerialPort.StartMonitoring();m_bSerialPortOpened=TRUE;}else{AfxMessageBox("没有发现此串口或被占用");m_bSerialPortOpened=FALSE;}GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);}void CTestDlg::OnButtonClose(){m_SerialPort.ClosePort();m_bSerialPortOpened=FALSE;GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);}void CTestDlg::OnButtonSend(){if(!m_bSerialPortOpened) return; UpdateData(TRUE); //读入编辑框中的数据m_SerialPort.WriteToPort((LPCTSTR)m_strEditSendMsg);//发送数据}
0 0
- 串口编程中SerialPort类介绍以及应用
- 串口编程中SerialPort类介绍以及应用
- C#中使用SerialPort类实现简单串口编程
- C#中使用SerialPort类实现简单串口编程
- C#中使用SerialPort类实现简单串口编程
- C#中使用SerialPort类实现简单串口编程
- 串口SerialPort编程(C#)
- C#中串口类serialPort的用法!
- C#中显现串口通信SerialPort类
- C#中串口类serialPort的用法!
- SerialPort类连接串口
- C#中用SerialPort类实现简单串口编程
- 在VC中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 出现C#编辑后,窗口中的txetBox中无法输入文字
- GEF(Graphical Editor Framework) Eclipse项目入门系列(1)---概述
- 《数据结构》实验二:线性表实验(1)
- 使用Dom4j解析XML
- c++ 一维数组转二维数组
- 串口编程中SerialPort类介绍以及应用
- 全画幅与半画幅
- 条件注释判断浏览器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]>
- 常用sublime text3插件
- JAVA获取客户端的MAC地址
- 2015年学习及工作计划(一)
- H.264视频编解码技术总结
- HDU - 2057 A + B Again
- Think In Java Chapter18 IO系统 练习12 读取文件到list,添加行号并写入另一文件