⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialport.cpp

📁 用VC做的小程序
💻 CPP
字号:
// SerialPort.cpp: implementation of the CSerialPort class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SerialPort.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSerialPort::CSerialPort()
{
	m_hComm = INVALID_HANDLE_VALUE;
}

CSerialPort::~CSerialPort()
{
	CloseHandle(m_hComm);
}

int CSerialPort::ListComm(char* pPortGroup)
{
	int pos = 0;
	HANDLE hCom;
	char pPort[5]="COM0";
	pPort[4]='\0';
	for(int i=1;i<10;i++)
	{
		pPort[3]='0'+i;
		hCom = CreateFile(pPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
		if (hCom != INVALID_HANDLE_VALUE)
		{
			strcpy(pPortGroup+pos,pPort);
			pos+=5;
		}
		CloseHandle(hCom);
	}
	return pos/5;
}

int CSerialPort::ReadComm(void *pData, int nLength)
{
	DWORD dwNumRead; // 串口收到的数据长度
	ReadFile(m_hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
	return (int)dwNumRead;
}

void CSerialPort::WriteComm(void *pData, int nLength)
{
	DWORD dwNumWrite; // 串口发出的数据长度
	WriteFile(m_hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}

bool CSerialPort::OpenComm(const char *pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
	DCB dcb; // 串口控制块
	COMMTIMEOUTS timeouts ={3000,1,500,1,10};
	m_hComm = CreateFile(pPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

	if (m_hComm == INVALID_HANDLE_VALUE)
		return FALSE;
	// 打开串口失败
	GetCommState(m_hComm, &dcb); // 取DCB
	dcb.BaudRate = nBaudRate;
	dcb.ByteSize = nByteSize;
	dcb.Parity = nParity;
	dcb.StopBits = nStopBits;
	SetCommState(m_hComm, &dcb); // 设置DCB
	SetupComm(m_hComm, 1024, 1024); // 设置输入输出缓冲区大小
	SetCommTimeouts(m_hComm, &timeouts); // 设置超时
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -