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文件
- *---------------------------------------*/
- classCSerialPortTestDlg:publicCDialog
- {
- //Construction
- public:
- CSerialPortm_SerialPort;//CSerailPort类对象
- BOOLm_bSerialPortOpened;//标志串口是否打开
- //自动生成代码省略……
- protected:
- //自动生成代码省略……
- };
四、界面设计和初始化代码。
1、设计界面
图2:设计界面
2、修改控件的ID,名称如图3所示。
3、添加控制变量:
“查看”菜单,进入“建立类向导”,弹出对话框,添加控件变量,如图3所示。
图3:添加控制变量
4、系统初始化代码
- /*-----------------------------------------
- *SerialPortTestDlg.cpp文件
- *---------------------------------------*/
- BOOLCSerialPortTestDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- …
- //TODO:Addextrainitializationhere
- /*-------------------------------------------------
- *初始化
- *-------------------------------------------------*/
- m_ctrlComboComPort.SetCurSel(0);//初始选择串口1
- //以下两句分别设置“打开串口”、“关闭串口”两个按状态的使能状态
- GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
- GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);
- returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
- }
五、连接串口。
- /*-------------------------------------------------
- *打开串口
- *-------------------------------------------------*/
- voidCSerialPortTestDlg::OnButtonOpen()
- {
- //TODO:Addyourcontrolnotificationhandlercodehere
- intnPort=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);
- }
六、断开串口。
- /*-------------------------------------------------
- *关闭串口
- *-------------------------------------------------*/
- voidCSerialPortTestDlg::OnButtonClose()
- {
- //TODO:Addyourcontrolnotificationhandlercodehere
- m_SerialPort.ClosePort();//关闭串口
- m_bSerialPortOpened=FALSE;
- //按钮可用和不可用处理
- GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
- GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);
- }