SerialPort类连接串口
一、VC6.0下,建立MFC(.exe)工程。
图1:建立工程
二、引入类文件:
1、把SerialPort.cpp和SerialPort.h文件复制到工程目录文件夹内。
2、点击"工程"菜单,“添加工程”子目录的“Files”子项。
3、选取工程目录文件夹内的SerialPort.cpp和SerialPort.h文件,点击确定按钮。
查看FileView视图内,已经成功添加相关类文件。
4、在SerialPortTestDlg.h文件内添加语句,引入SerialPort类。
/*-----------------------------------------
* SerialPortTestDlg.h文件
*---------------------------------------*/
#include "SerialPort.h" //添加CSerailPort类的头文件
三、声明类对象和接口状态变量。
- /*-----------------------------------------
- * SerialPortTestDlg.h文件
- *---------------------------------------*/
- class CSerialPortTestDlg : public CDialog
- {
- // Construction
- public:
- CSerialPort m_SerialPort; //CSerailPort类对象
- BOOL m_bSerialPortOpened; //标志串口是否打开
- //自动生成代码省略……
- protected:
- //自动生成代码省略……
- };
四、界面设计和初始化代码。
1、设计界面
图2:设计界面
2、修改控件的ID,名称如图3所示。
3、添加控制变量:
“查看”菜单,进入“建立类向导”,弹出对话框,添加控件变量,如图3所示。
图3:添加控制变量
4、系统初始化代码
- /*-----------------------------------------
- * SerialPortTestDlg.cpp文件
- *---------------------------------------*/
- BOOL CSerialPortTestDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- …
- // TODO: Add extra initialization here
- /*-------------------------------------------------
- * 初始化
- *-------------------------------------------------*/
- m_ctrlComboComPort.SetCurSel(0); //初始选择串口1
- //以下两句分别设置“打开串口”、“关闭串口”两个按状态的使能状态
- GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
- GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);
- return TRUE; // return TRUE unless you set the focus to a control
- }
五、连接串口。
- /*-------------------------------------------------
- * 打开串口
- *-------------------------------------------------*/
- void CSerialPortTestDlg::OnButtonOpen()
- {
- // TODO: Add your control notification handler code here
- int nPort=m_ctrlComboComPort.GetCurSel()+1; //得到串口号,想想为什么要加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 CSerialPortTestDlg::OnButtonClose()
- {
- // TODO: Add your control notification handler code here
- m_SerialPort.ClosePort();//关闭串口
- m_bSerialPortOpened=FALSE;
- //按钮可用和不可用处理
- GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
- GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);
- }