VS2015+MFC+串口通信

前期准备参考:https://blog.csdn.net/qq_20044829/article/details/82902000

在VS2015下通过串口成功之后,移植到MFC上进行串口通信,具体就是通过设置下拉列表选择COM口而不是直接在程序中固定COM口,然后实现数据的发送。

1.新建一个MFC对话框工程,删除中间的框。

VS2015+MFC+串口通信_第1张图片

2.点击右侧工具箱分别选择l两个按钮控件和ComboBox控件,右键点击各个控件进入属性进行设置。第一个按钮名字设置为“打开串口”,ID为IDC_BUTTON_OPEN。第二个按钮名字设置为“发送数据”,ID为IDC_BUTTON_SEND。ComboBox设置为下拉列表,也就是不能编辑只能选择。设置完具体如下图VS2015+MFC+串口通信_第2张图片

3.为ComboBox控件添加变量。

(注意)1)如果对ComboBox控件添加变量时发现控件控件变量是灰色的无法选择时,需要对ComboBox重新定义一个类。右键点击ComboBox控件,选择添加类。因为本文博客工程为MFC_UART,类名写为:CMFC_UARTDlg;基类选择为:CDialog。

VS2015+MFC+串口通信_第3张图片

2)如果直接添加变量可以第一步不用管。对ComboBox右键点击添加变量,变量名为:m_Combo,保存工程。

VS2015+MFC+串口通信_第4张图片

4.添加CnComm.h并添加SerialThread.cpp与SerialThread.h。在建的工程MFC_UARTDlg.cpp的OnInitDialog()中添加如下代码。

BOOL CMFC_UARTDlg::OnInitDialog()
{
	........//这些都是系统代码
	// TODO: 在此添加额外的初始化代码
	m_Combo.AddString(_T("COM1"));
	m_Combo.AddString(_T("COM2"));
	m_Combo.AddString(_T("COM3"));
	m_Combo.AddString(_T("COM4"));
	m_Combo.AddString(_T("COM5"));
	m_Combo.AddString(_T("COM6"));
	m_Combo.AddString(_T("COM7"));
	m_Combo.AddString(_T("COM8"));
	m_Combo.AddString(_T("COM9"));
	m_Combo.SetCurSel(0);//初始时下拉列表为COM1
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

编译程序,然后会出错,这里是因为没有加入#include"stdafx.h",这里需要在SerialThread.cpp的第一行添加,一定记住是第一行添加#include"stdafx.h",添加完之后编译,运行。

VS2015+MFC+串口通信_第5张图片

5.在MFC_UARTDlg.h添加#include "SerialThread.h"。在#include "SerialThread.h"和#include "SerialThread.cpp"中对应修改。

bool SerialThread::ThreadInit(char dat)
{	
	if (!Com.IsOpen())	
	{		
		//CnComm::Open函数就是用来打开串口		
		//bool Open(DWORD dwPort, LPCTSTR szPortName, DWORD dwBaudRate, BYTE btParity = NOPARITY, BYTE btByteSize = 8, BYTE btStopBits = ONESTOPBIT)		
		//dwPort,szPortName可以在“计算机管理->设备管理器->端口(COM和LPT)->双击设备名:位置”		
		//if (!Com.Open(9, _T("COM5"), 115200))//
		if(!Com.Open(dat, 115200))//选择串口4
		{			
			//cout << "open fail" << endl;
                        ::MessageBox(NULL, _T("串口打开失败"), _T("错误"), MB_OK);
			return false;
		}	
		return true;
	}	
	else 
	{		
		//cout << "already open" << endl;
                ::MessageBox(NULL, _T("串口已经打开"), _T("错误"), MB_OK);	
	}
        return true;
} 

这里做的步骤主要是通过获取COMx,然后把x取出来进行输入。

6.修改断言,如果串口没有打开直接返回然后继续选择串口就可以了。

点击上面程序中的open进行修改断言。如下图

VS2015+MFC+串口通信_第6张图片

 

 

7.双击打开串口,在该OnBnClickedButtonOpen()下添加代码

void CMFC_UARTDlg::OnBnClickedButtonOpen()
{
	// TODO: 在此添加控件通知处理程序代码

	char com_ch[5]; char com_data = 0;
	int nIndex = m_Combo.GetCurSel();
	CString strCom; CString strtmp;
	m_Combo.GetLBText(nIndex, strCom);
	strcpy(com_ch, CW2A(strCom));
	com_data = com_ch[3] - 0x30;
	//strtmp.Format(_T("COM:%d\n"), com_data);// 消息显示数字
	//MessageBox(strtmp);
	SerialThread st;
	m_ComPortFlag = st.ThreadInit(com_data);
}

在MFC_UARTDlg.cpp上面定义 bool m_ComPortFlag = false;

8.双击发送数据添加如下代码

void CMFC_UARTDlg::OnBnClickedButtonSend()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_ComPortFlag == true)
	{
		::MessageBox(NULL, _T("串口打开成功"), _T("提示"), MB_OK);
		int num = 6666;
		char str[25];
		itoa(num, str, 10);// 数字转换成字符串
		SerialThread st;
		st.SendDatas(str);//发送控制字符
	}
}

9.结果

这里由于没有写显示因此打开成功直接弹出消息。

VS2015+MFC+串口通信_第7张图片

 

你可能感兴趣的:(串口与通信,MFC)