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类的头文件

三、声明类对象和接口状态变量。

  1. /*-----------------------------------------
  2.  * SerialPortTestDlg.h文件
  3.  *---------------------------------------*/
  4. class CSerialPortTestDlg : public CDialog
  5. {
  6. // Construction
  7. public:
  8.     CSerialPort m_SerialPort; //CSerailPort类对象
  9.     BOOL m_bSerialPortOpened; //标志串口是否打开
  10.     //自动生成代码省略……
  11. protected:
  12.     //自动生成代码省略……
  13. };

四、界面设计和初始化代码。

        1、设计界面

      图2:设计界面

 

            2、修改控件的ID,名称如图3所示。

            3、添加控制变量:

                “查看”菜单,进入“建立类向导”,弹出对话框,添加控件变量,如图3所示。

 

 

图3:添加控制变量

 

                4、系统初始化代码

  1. /*-----------------------------------------
  2.  * SerialPortTestDlg.cpp文件
  3.  *---------------------------------------*/
  4. BOOL CSerialPortTestDlg::OnInitDialog()
  5. {
  6.     CDialog::OnInitDialog();
  7.     …   
  8.     // TODO: Add extra initialization here 
  9.     /*-------------------------------------------------
  10.      * 初始化
  11.      *-------------------------------------------------*/
  12.     m_ctrlComboComPort.SetCurSel(0); //初始选择串口1 
  13.     //以下两句分别设置“打开串口”、“关闭串口”两个按状态的使能状态 
  14.     GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
  15.     GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);
  16.     
  17.     return TRUE;  // return TRUE  unless you set the focus to a control 
  18. }

五、连接串口。

  1. /*-------------------------------------------------
  2.  * 打开串口
  3.  *-------------------------------------------------*/
  4. void CSerialPortTestDlg::OnButtonOpen() 
  5. {
  6.     // TODO: Add your control notification handler code here
  7.     int nPort=m_ctrlComboComPort.GetCurSel()+1; //得到串口号,想想为什么要加1
  8.     
  9.     if(m_SerialPort.InitPort(this, nPort, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512))
  10.     {//能正确打开串口
  11.         m_SerialPort.StartMonitoring();
  12.         m_bSerialPortOpened=TRUE;
  13.     }
  14.     else//不能正确打开串口时
  15.     {
  16.         AfxMessageBox("没有发现此串口或被占用");
  17.         m_bSerialPortOpened=FALSE;
  18.     }
  19.     //按钮 可用和不可用 处理
  20.     GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
  21.     GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);
  22. }

六、断开串口。

  1. /*-------------------------------------------------
  2.  * 关闭串口
  3.  *-------------------------------------------------*/
  4. void CSerialPortTestDlg::OnButtonClose() 
  5. {
  6.     // TODO: Add your control notification handler code here 
  7.     m_SerialPort.ClosePort();//关闭串口 
  8.     m_bSerialPortOpened=FALSE;
  9.     //按钮可用和不可用处理 
  10.     GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);
  11.     GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);    
  12. }
posted @ 2008-11-20 10:46  涛涌四海  阅读(550)  评论(0编辑  收藏  举报