vc++mfc串口通信Word下载.docx
《vc++mfc串口通信Word下载.docx》由会员分享,可在线阅读,更多相关《vc++mfc串口通信Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CSerilDlgdialog
CSerilDlg:
CSerilDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CSerilDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CSerilDlg)
m_strRXData=_T("
"
);
m_strTXData=_T("
m_TestFlag=_T("
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
voidCSerilDlg:
//{{AFX_DATA_MAP(CSerilDlg)
DDX_Control(pDX,IDC_OPENSERIL,m_Opensril);
DDX_Control(pDX,IDC_COM,m_serilcom);
DDX_Text(pDX,IDC_EDIT_RXDATA,m_strRXData);
DDX_Text(pDX,IDC_EDIT_TXDATA,m_strTXData);
DDX_Control(pDX,IDC_MSCOMM1,m_ctrlComm);
DDX_Text(pDX,IDC_TESTFLAG,m_TestFlag);
BEGIN_MESSAGE_MAP(CSerilDlg,CDialog)
//{{AFX_MSG_MAP(CSerilDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_CLEAR,OnClear)
ON_BN_CLICKED(IDC_CLEARSEND,OnClearsend)
ON_CBN_CLOSEUP(IDC_COM,OnCloseupCom)
ON_BN_CLICKED(IDC_FASONG,OnFasong)
ON_BN_CLICKED(IDC_OPENSERIL,OnOpenseril)
//CSerilDlgmessagehandlers
BOOLCSerilDlg:
OnInitDialog()
OnInitDialog();
//Add"
About..."
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
CDialog:
OnSysCommand(nID,lParam);
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
OnPaint()
if(IsIconic())
CPaintDCdc(this);
//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&
rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
OnPaint();
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCSerilDlg:
OnQueryDragIcon()
return(HCURSOR)m_hIcon;
BEGIN_EVENTSINK_MAP(CSerilDlg,CDialog)
//{{AFX_EVENTSINK_MAP(CSerilDlg)
ON_EVENT(CSerilDlg,IDC_MSCOMM1,1/*OnComm*/,OnComm,VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
OnComm()
Addyourcontrolnotificationhandlercodehere
VARIANTvariant_inp;
COleSafeArraysafearray_inp;
LONGlen,k;
BYTErxdata[20480],rxtemp[20480]={0},top[20480],down[20480],jm[20480],jm1[20480];
//设置BYTE数组An8-bitintegerthatisnotsigned.
CStringstrtemp,test,test1;
if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
{//CStringrw="
rw"
;
////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput();
//读缓冲区
safearray_inp=variant_inp;
//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();
//得到有效数据长度
for(k=0;
k<
len;
k++)
safearray_inp.GetElement(&
k,rxdata+k);
//转换为BYTE型数组
}
if(rxdata[0]=='
r'
&
rxdata[1]=='
e'
rxdata[2]=='
c'
rxdata[3]=='
i'
rxdata[4]=='
v'
rxdata[5]=='
)
m_TestFlag="
已被成功接收"
else
m_ctrlComm.SetOutput(COleVariant("
recive"
));
for(k=0;
k<
5;
top[k]=rxdata[k];
for(k=0;
4;
down[k]=rxdata[len-4+k];
if(top[0]=='
b'
&
top[1]=='
top[2]=='
g'
top[3]=='
top[4]=='
n'
down[0]=='
o'
down[1]=='
down[2]=='
down[3]=='
for(k=0;
len-9;
rxtemp[k]=rxdata[k+5];
jm1[k]=(rxtemp[k]-len+9);
len-9;
k++)//将数组转换为Cstring型变量
BYTEbt=*(char*)(jm1+k);
//字符型
strtemp.Format("
%c"
bt);
//将字符送入临时变量strtemp存放
m_strRXData+=strtemp;
}
UpdateData(FALSE);
//更新编辑框内容(主要是接收编辑框中的)
OnFasong()
longsiz,k;
CStringSendAll,sendal;
UpdateData(TRUE);
//读取编辑框内容
siz=strlen(m_strTXData);
charcha[20480];
charcha1[20480];
charcha2[20480];
strcpy(cha,m_strTXData);
for(k=0;
siz;
cha1[k]=cha[k]+siz;
CStringstr(cha1,siz);
SendAll="
begin"
+str+"
over"
m_ctrlComm.SetOutput(COleVariant(SendAll));
//发送数据
数据已发送"
OnOpenseril()
m_ctrlComm.SetCommPort(comseril);
//选择com口
if(m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(FALSE);
//关闭串口
//AfxMessageBox("
cannotopenserialport"
AfxMessageBox("
串口已关闭"
else
m_ctrlComm.SetPortOpen(TRUE);
//打开串口
串口打开成功"
SetDlgItemText(IDC_OPENSERIL,"
关闭串口"
//显示串口已经关闭
m_ctrlComm.SetSettings("
115200,n,8,1"
//波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputMode
(1);
//1:
表示以二进制方式检取数据
m_ctrlComm.SetRThreshold
(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0);
//设置当前接收区数据长度为0
m_ctrlComm.GetInput();
//先预读缓冲区以清除残留数据
//m_TestFlag="
未测试"
OnCloseupCom()
comseril=m_serilcom.GetCurSel();
OnClear()
m_strRXData="
//更新编辑框内容
OnClearsend()
m_strTXData="
}、
Seril.h内代码
//serilDlg.h:
headerfile
//
//{{AFX_INCLUDES()
mscomm.h"
//}}AFX_INCLUDES
#if!
defined(AFX_SERILDLG_H__1B7176B4_DDC7_45B3_B636_2597E461F275__INCLUDED_)
#defineAFX_SERILDLG_H__1B7176B4_DDC7_45B3_B636_2597E461F275__INCLUDED_
#if_MSC_VER>
1000
#pragmaonce
#endif//_MSC_VER>
classCSerilDlg:
//Construction
CSerilDlg(CWnd*pParent=NULL);
//standardconstructor
//{{AFX_DATA(CSerilDlg)
enum{IDD=IDD_SERIL_DIALOG};
CButtonm_Opensril;
CComboBoxm_serilcom;
CStringm_strRXData;
CStringm_strTXData;
CMSCommm_ctrlComm;
CStringm_TestFlag;
//{{AFX_VIRTUAL(CSerilDlg)
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CSerilDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnClear();
afx_msgvoidOnClearsend();
afx_msgvoidOnCloseupCom();
afx_msgvoidOnFasong();
afx_msgvoidOnComm();
afx_msgvoidOnOpenseril();
DECLARE_EVENTSINK_MAP()
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif//!
defined(AFX_SERILDLG_H__1B