📄 uarttest.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 + -