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

📄 uarttest.cpp

📁 在WinCE下面
💻 CPP
字号:
// UartTest.cpp : implementation file
//

#include "stdafx.h"
#include "SBC2442.h"
#include "UartTest.h"
#include "CSerial.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUartTest dialog
CSerial m_Port; 
DWORD m_nBaud;        
UINT m_nCom;       
BYTE m_cParity;   
BYTE m_nDatabits;    
BYTE m_nStopbits;   
BOOL m_bOpenPort;

    
CUartTest::CUartTest(CWnd* pParent /*=NULL*/)
	: CDialog(CUartTest::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUartTest)
	m_ReceiveData = _T("");
	m_strSendData = _T("");
	//}}AFX_DATA_INIT
    m_nBaud = 115200;        //波特率
	m_nCom = 1;         //串口号
	m_cParity = 0;     //校验
	m_nDatabits = 8;    //数据位
	m_nStopbits = 0;    //停止位
	m_bOpenPort = TRUE;
	m_ctrlPortStatus.SetWindowText(_T("状态:串口关闭!"));
}


void CUartTest::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUartTest)
	DDX_Control(pDX, IDC_STATIC_STATUS, m_ctrlPortStatus);
	DDX_Control(pDX, IDC_EDIT_SEND, m_ctrlEditSend);
	DDX_Control(pDX, IDC_EDIT_RECIVE, m_ctrlReceiveData);
	DDX_Control(pDX, IDC_COMBO_STOPBITS, m_StopBits);
	DDX_Control(pDX, IDC_COMBO_SPEED, m_Speed);
	DDX_Control(pDX, IDC_COMBO_PARITY, m_Parity);
	DDX_Control(pDX, IDC_COMBO_DATABITS, m_DataBits);
	DDX_Control(pDX, IDC_COMBO_COMSELECT, m_Com);
	DDX_Control(pDX, IDC_BUTTON_OPENPORT, m_ctrlOpenPort);
	DDX_Control(pDX, IDC_BUTTON_MANUALSEND, m_ctrlManualSend);
	DDX_Text(pDX, IDC_EDIT_RECIVE, m_ReceiveData);
	DDX_Text(pDX, IDC_EDIT_SEND, m_strSendData);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUartTest, CDialog)
	//{{AFX_MSG_MAP(CUartTest)
	ON_BN_CLICKED(IDC_BUTTON_OPENPORT, OnButtonOpenport)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR_RECI_AREA, OnButtonClearReciArea)
	ON_BN_CLICKED(IDC_BUTTON_CLEANSEND, OnButtonCleansend)
	ON_BN_CLICKED(IDC_BUTTON_MANUALSEND, OnButtonManualsend)
	ON_CBN_SELCHANGE(IDC_COMBO_COMSELECT, OnSelchangeComboComselect)
	ON_CBN_SELCHANGE(IDC_COMBO_DATABITS, OnSelchangeComboDatabits)
	ON_CBN_SELCHANGE(IDC_COMBO_PARITY, OnSelchangeComboParity)
	ON_CBN_SELCHANGE(IDC_COMBO_SPEED, OnSelchangeComboSpeed)
	ON_CBN_SELCHANGE(IDC_COMBO_STOPBITS, OnSelchangeComboStopbits)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUartTest message handlers

void CUartTest::response(BYTE* buf,int bufLen)
{
	UpdateData(TRUE);
	CString tmp;
	for (int i = 0; i < bufLen; i++, buf++)
	{
		tmp.Format(_T("%c"), *buf);						/* 将字符转换为字符串 */
		m_ReceiveData += tmp;
	}
	UpdateData(FALSE);
}

void CUartTest::OnButtonOpenport() 
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
	CString strStatus;
    m_bOpenPort=(!m_bOpenPort);
	if(m_bOpenPort)  //关闭串口
	{
		m_ctrlOpenPort.SetWindowText(_T("打开串口"));
		UpdateData();
		strStatus.Format(_T("状态:COM%d 关闭,%d,%d,%d,%d"),m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
        m_ctrlPortStatus.SetWindowText(strStatus);
	    UpdateData(FALSE);
		m_Port.ClosePort();//关闭串口
		
	}
	else  //打开串口
	{
		m_ctrlOpenPort.SetWindowText(_T("关闭串口"));	
		UpdateData();
		m_ctrlPortStatus.SetWindowText(_T("状态:串口已经打开!"));
		UpdateData(FALSE);
	    if (m_Port.OpenPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits))
		{
			UpdateData();
			strStatus.Format(_T("状态:COM%d 打开,%d,%d,%d,%d"),m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
            m_ctrlPortStatus.SetWindowText(strStatus);
			UpdateData(FALSE);
		}
		else
		{
			UpdateData();
		    m_ctrlPortStatus.SetWindowText(_T("状态:不能打开串口!"));
			UpdateData(FALSE);
			AfxMessageBox(_T("打开串口出错!"));
		}
	}	
}

void CUartTest::OnButtonClearReciArea() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	m_ReceiveData.Empty();
	UpdateData(FALSE);
}

void CUartTest::OnButtonCleansend() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	m_strSendData.Empty();
	UpdateData(FALSE);
}

void CUartTest::OnButtonManualsend() 
{
	// TODO: Add your control notification handler code here
	BYTE *buffer=NULL;
	BYTE *change=NULL;
	DWORD mLength;
	DWORD temp;
	if (m_bOpenPort)//打开端口
	{
		AfxMessageBox(_T("Please open port first!!"));
	}
	else
	{
		UpdateData(TRUE);
		change=(BYTE*)(LPCTSTR)m_strSendData;
		mLength=m_strSendData.GetLength();
		buffer=new BYTE[mLength];
		for(temp=0;temp<mLength;temp++)
		{
			(*buffer)=(*change);
			change=change+2;
			buffer=buffer+1;
		}
		buffer=buffer-mLength;
		m_Port.WritePort(buffer,mLength);
		UpdateData(FALSE);
	}	
}



void CUartTest::OnSelchangeComboComselect() 
{
	// TODO: Add your control notification handler code here
	if(m_Port.m_hComm!=NULL)
	{
		m_Port.ClosePort();
	}
	m_nCom=m_Com.GetCurSel()+1;
}

void CUartTest::OnSelchangeComboSpeed() 
{
	// TODO: Add your control notification handler code here
		int i=m_Speed.GetCurSel();
	switch(i)
	{
	case 0:
		i=300;
		break;
	case 1:
		i=600;
		break;
	case 2:
		i=1200;
		break;
	case 3:
		i=2400;
		break;
	case 4:
		i=4800;
		break;
	case 5:
		i=9600;
		break;
	case 6:
		i=19200;
		break;
	case 7:
		i=38400;
		break;
	case 8:
		i=43000;
		break;
	case 9:
		i=56000;
		break;
	case 10:
		i=57600;
		break;
	case 11:
		i=115200;
		break;
	default:
		break;
	}
	m_nBaud=i;	
}

void CUartTest::OnSelchangeComboParity() 
{
	// TODO: Add your control notification handler code here
	BYTE temp;
	int i=m_Parity.GetCurSel();
	switch(i)
	{
	case 0:
		temp=0;
		break;
	case 1:
		temp=1;
		break;
	case 2:
		temp=2;
		break;
	}
	m_cParity=temp;
}

void CUartTest::OnSelchangeComboDatabits() 
{
	// TODO: Add your control notification handler code here
	int i=m_DataBits.GetCurSel();
	switch(i)
	{
	case 0:
		i=8;
		break;
	case 1:
		i=7;
		break;
	case 2:
		i=6;
		break;
	}
	m_nDatabits=i;	
}

void CUartTest::OnSelchangeComboStopbits() 
{
	// TODO: Add your control notification handler code here
	int i=m_StopBits.GetCurSel();
	switch(i)
	{
	case 0:
		i=0;
		break;
	case 1:
		i=2;
		break;
	}
	m_nStopbits=i;	
}

⌨️ 快捷键说明

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