vs mfc简单写串口助手
时间: 2023-06-16 16:06:04 浏览: 143
下面是一个简单的基于 MFC 的串口助手示例代码,可以帮助你开始编写:
1. 创建 MFC 对话框应用程序项目。
2. 在资源视图中双击 IDD_DIALOG1,将对话框设计器打开,将一个编辑框和一个按钮控件拖放到对话框中。
3. 在 ClassView 中添加一个类,命名为 CSerialPort。
4. 将以下代码添加到 CSerialPort.h 文件中:
```cpp
#pragma once
#include <afxwin.h>
#include <afxext.h>
#include <afxdisp.h>
#include <afxdtctl.h>
#include <afxcmn.h>
#include <afxsock.h>
#include <afxtempl.h>
#include <atlimage.h>
class CSerialPort
{
public:
CSerialPort();
virtual ~CSerialPort();
BOOL Open(UINT nPort, UINT nBaud);
BOOL Close();
int ReadData(void *buffer, int limit);
int WriteData(const void *buffer, int count);
protected:
HANDLE m_hComm;
};
```
5. 在 CSerialPort.cpp 文件中实现 CSerialPort 类的方法:
```cpp
#include "stdafx.h"
#include "CSerialPort.h"
CSerialPort::CSerialPort()
: m_hComm(INVALID_HANDLE_VALUE)
{
}
CSerialPort::~CSerialPort()
{
Close();
}
BOOL CSerialPort::Open(UINT nPort, UINT nBaud)
{
CString sPort;
sPort.Format(_T("\\\\.\\COM%d"), nPort);
m_hComm = CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (m_hComm == INVALID_HANDLE_VALUE)
return FALSE;
DCB dcb;
GetCommState(m_hComm, &dcb);
dcb.BaudRate = nBaud;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(m_hComm, &dcb);
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(m_hComm, &timeouts);
return TRUE;
}
BOOL CSerialPort::Close()
{
if (m_hComm == INVALID_HANDLE_VALUE)
return FALSE;
CloseHandle(m_hComm);
m_hComm = INVALID_HANDLE_VALUE;
return TRUE;
}
int CSerialPort::ReadData(void *buffer, int limit)
{
if (m_hComm == INVALID_HANDLE_VALUE)
return -1;
DWORD dwBytesRead = 0;
ReadFile(m_hComm, buffer, limit, &dwBytesRead, NULL);
return dwBytesRead;
}
int CSerialPort::WriteData(const void *buffer, int count)
{
if (m_hComm == INVALID_HANDLE_VALUE)
return -1;
DWORD dwBytesWritten = 0;
WriteFile(m_hComm, buffer, count, &dwBytesWritten, NULL);
return dwBytesWritten;
}
```
6. 在对话框类中添加一个成员变量 CSerialPort m_SerialPort; 以及一个响应按钮点击事件的函数 OnBnClickedButton1()。
7. 在 OnBnClickedButton1() 函数中添加以下代码:
```cpp
void CSerialPortHelperDlg::OnBnClickedButton1()
{
UpdateData();
if (m_SerialPort.Open(m_nPort, m_nBaud))
{
m_SerialPort.WriteData(m_sSend, m_sSend.GetLength());
char buffer[1024] = { 0 };
int len = m_SerialPort.ReadData(buffer, 1024);
if (len > 0)
{
CString sRecv(buffer, len);
m_sRecv = sRecv;
UpdateData(FALSE);
}
m_SerialPort.Close();
}
}
```
8. 在对话框类中添加以下变量:
```cpp
UINT m_nPort;
UINT m_nBaud;
CString m_sSend;
CString m_sRecv;
```
9. 在对话框设计器中,双击按钮控件,将 OnBnClickedButton1() 函数关联到按钮的点击事件上。
现在你可以编译并运行代码,在串口助手中输入要发送的数据,点击按钮将其发送到串口,并等待串口返回数据。串口返回的数据将显示在窗口中。
阅读全文