v60做的串口助手程序.docx
- 文档编号:4099446
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:13
- 大小:18.23KB
v60做的串口助手程序.docx
《v60做的串口助手程序.docx》由会员分享,可在线阅读,更多相关《v60做的串口助手程序.docx(13页珍藏版)》请在冰豆网上搜索。
v60做的串口助手程序
//sCommTestDlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"sCommTest.h"
#include"sCommTestDlg.h"
intm_b;
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
intm_c;
intm_a;
ints=0;
intm_d;
/////////////////////////////////////////////////////////////////////////////
//CSCommTestDlgdialog
CSCommTestDlg:
:
CSCommTestDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CSCommTestDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CSCommTestDlg)
m_strRecvData=_T("");
m_strSendData=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCSCommTestDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSCommTestDlg)
DDX_Text(pDX,IDC_EDIT_RECV,m_strRecvData);
DDX_Control(pDX,IDC_MSCOMM1,m_cComm);
DDX_Text(pDX,IDC_EDIT_SEND,m_strSendData);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSCommTestDlg,CDialog)
//{{AFX_MSG_MAP(CSCommTestDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_SEND,OnButtonSend)
ON_BN_CLICKED(IDC_RADIO3,OnRadio3)
ON_BN_CLICKED(IDC_RADIO4,OnRadio4)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_R,OnR)
ON_BN_CLICKED(IDC_RADIO2,OnRadio2)
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
ON_BN_CLICKED(IDC_RADIO5,OnRadio5)
ON_BN_CLICKED(IDC_RADIO1,OnRadio1)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CSCommTestDlgmessagehandlers
BOOLCSCommTestDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
m_editFont.CreatePointFont(140,"宋体");
//IDC_EDIT_RECV.SetFont(&m_editFont);//设置新字体
GetDlgItem(IDC_EDIT_RECV)->SetFont(&m_editFont);
//添加的对串口的初始化语句
if(m_cComm.GetPortOpen())//如果发现串口本来是打开的,则关闭串口
m_cComm.SetPortOpen(FALSE);
m_cComm.SetCommPort
(1);//选择COM1端口
m_cComm.SetInputMode
(1);//输入方式为二进制方式
m_cComm.SetInBufferSize(1024);//设置输入缓冲区
m_cComm.SetOutBufferSize(1024);//设置输出缓冲区
m_cComm.SetSettings("9600,e,8,1");//波特率9600,无校验,8个数据位,1个停止位
if(!
m_cComm.GetPortOpen())
{
m_cComm.SetPortOpen(TRUE);//打开串口
m_cComm.SetRThreshold
(1);//每当接收缓冲区有1个字符则接收串口数据
m_cComm.SetInputLen(0);//设置当前缓冲区长度为0
m_cComm.GetInput();//预读缓冲区以清除残留数据
}
else
AfxMessageBox("打开端口失败!
",MB_ICONSTOP,0);
CBitmapbmp;
bmp.LoadBitmap(IDB_BITMAP1);
m_backbrush.CreatePatternBrush(&bmp);
bmp.DeleteObject();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCSCommTestDlg:
:
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);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCSCommTestDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
BEGIN_EVENTSINK_MAP(CSCommTestDlg,CDialog)
//{{AFX_EVENTSINK_MAP(CSCommTestDlg)
ON_EVENT(CSCommTestDlg,IDC_MSCOMM1,1/*OnComm*/,OnComm,VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
voidCSCommTestDlg:
:
OnComm()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
//从串口接收数据并显示在编辑框中
VARIANTvariant_inp;
COleSafeArraysafearray_inp;
longlen,k;
byterxdata[512];//设置BYTE数组
CStringstrtemp,bs;
if(m_cComm.GetCommEvent()!
=0)//值为2表示接收缓冲区内有字符
{
variant_inp=m_cComm.GetInput();//读缓冲区消息
//safearray_inp=variant_inp;///变量转换
//len=safearray_inp.GetOneDimSize();//得到有效的数据长度
//variant_inp=m_ComPort.GetInput();//读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
//m_strRecvData.SetSel(-1,-1);//自动滚屏(其中m_Edit是EDIT筐所关联的EDIT控制对象)?
//m_strRecvData.ReplaceSel(sNewString+"\r\n");//自动换行?
if(m_a==1)
{
bs.Format("%d",s);
m_strRecvData+=bs;
m_a=0;
}
for(k=0;k safearray_inp.GetElement(&k,rxdata+k); //m_strRecvData=m_a; for(k=0;k { BYTEbt=*(char*)(rxdata+k);//字符型 if(m_c) strtemp.Format("%02X",bt); else strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放 m_strRecvData+=strtemp;//加入接收编辑框对应字符串 } } /* CStringtemp=("\r\n");//显示完成后要自动换行 if(len<=7) { m_strRecvData+=temp; s=s+1; }*/ UpdateData(FALSE);//更新编辑框内容 CEdit*output=(CEdit*)GetDlgItem(IDC_EDIT_RECV); //随时跟踪滚动条的位置 output->LineScroll(output->GetLineCount()); } voidCSCommTestDlg: : OnButtonSend() { //TODO: Addyourcontrolnotificationhandlercodehere /* CByteArrayArray; Array.RemoveAll(); Array.SetSize(8); Array.SetAt(0,1); Array.SetAt(1,2); Array.SetAt(2,00); Array.SetAt(3,00); Array.SetAt(4,00); Array.SetAt(5,06); Array.SetAt(6,248); Array.SetAt(7,8); m_cComm.SetOutput(COleVariant(Array));//以数组的形式发送整形数据 */ /* unsignedcharchData[8]; chData[0]=1; chData[1]=2; chData[2]=0; chData[3]=0; chData[4]=0; chData[5]=6; chData[6]=248; chData[7]=8; CByteArraybinData; binData.RemoveAll(); for(inti=0;i<8;i++) binData.Add(chData[i]); COleVariantvar(binData); m_cComm.SetOutput(var);//以字符数组的方式发送数据 */ //单击发送按钮的操作 /*UpdateData(TRUE); intlen; CByteArrayarray; len=m_strSendData.GetLength(); array.RemoveAll(); array.SetSize(len); for(inti=0;i array.SetAt(i,m_strSendData[i]); for(intj=0;j {if((array[j]>='0')&&(array[j]<='9')) array[j]=array[j]-0x30; elseif((array[j]>='A')&&(array[j]<='F')) array[j]=array[j]-'A'+10; elseif((array[j]>='a')&&(array[j]<='f')) array[j]=array[j]-'a'+10; } m_cComm.SetOutput(COleVariant(array));//发送数据 */ m_a=1; UpdateData(TRUE);//读取编辑框内容 if(m_b) { SetTimer(1,100,NULL);//时间为1000毫秒 } if(m_b==0) { KillTimer (1);//取消定时 } CByteArrayhexdata; intlen=String2Hex(m_strSendData,hexdata);//此处返回的len可以用于计算发送了多少个十六进制数 m_cComm.SetOutput(COleVariant(hexdata));//发送十六进制数据 //m_cComm.SetOutput(COleVariant(m_strSendData));//发送数据 //charm_s=0; //m_cComm.SetOutput(COleVariant(m_s));//发送数据 //m_strSendData.Empty();//发送后清空输入框 //UpdateData(false);//更新编辑框内容 //对发送的数据进行强制类型转换,由CString字符串数据转换为VARIANT类型。 //UpdateData(TRUE); //intleng[]={010200000006f808}; //CByteArrayarray; //leng=m_strSendData.GetLength(); //array.RemoveAll(); //array.SetSize(leng); //for(inti=0;i //array.SetAt(i,m_strSendData[i]); //m_cComm.SetOutput(01);//发送数据 CStringtemp=("\r\n");//显示完成后要自动换行 //if(len<=7) { m_strRecvData+=temp; s=s+1; } if(m_d==1) m_strRecvData.Empty();//发送后清空输入框 //UpdateData(false);//更新编辑框内容 UpdateData(false);//更新编辑框内容 } charCSCommTestDlg: : ConvertHexChar(charch) { if((ch>='0')&&(ch<='9')) returnch-0x30; elseif((ch>='A')&&(ch<='F')) returnch-'A'+10; elseif((ch>='a')&&(ch<='f')) returnch-'a'+10; elsereturn(-1); } intCSCommTestDlg: : String2Hex(CStringstr,CByteArray&senddata) { inthexdata,lowhexdata; inthexdatalen=0; intlen=str.GetLength(); senddata.SetSize(len/2); for(inti=0;i { charlstr,hstr=str[i]; if(hstr=='') { i++; continue; } i++; if(i>=len) break; lstr=str[i]; hexdata=ConvertHexChar(hstr); lowhexdata=ConvertHexChar(lstr); if((hexdata==16)||(lowhexdata==16)) break; else hexdata=hexdata*16+lowhexdata; i++; senddata[hexdatalen]=(char)hexdata; hexdatalen++; } senddata.SetSize(hexdatalen); returnhexdatalen; } voidCSCommTestDlg: : OnRadio3() { //TODO: Addyourcontrolnotificationhandlercodehere m_c=0; } voidCSCommTestDlg: : OnRadio4() { //TODO: Addyourcontrolnotificationhandlercodehere m_c=1; } voidCSCommTestDlg: : OnTimer(UINTnIDEvent) { //TODO: Addyourmessagehandlercodehereand/orcalldefault OnButtonSend(); CDialog: : OnTimer(nIDEvent); } voidCSCommTestDlg: : OnR() { //TODO: Addyourcontrolnotificationhandlercodehere m_b=1; } voidCSCommTestDlg: : OnRadio2() { //TODO: Addyourcontrolnotificationhandlercodehere m_b=0; } voidCSCommTestDlg: : OnButton1() { //TODO: Addyourcontrolnotificationhandlercodehere s=0; m_strRecvData.Empty();//发送后清空输入框 UpdateData(false);//更新编辑框内容 } voidCSCommTestDlg: : OnRadio5() { //TODO: Addyourcontrolnotificationhandlercodehere m_d=0; } voidCSCommTestDlg: : OnRadio1() { //TODO: Addyourcontrolnotificationhandlercodehere m_d=1; } HBRUSHCSCommTestDlg: : OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor) { HBRUSHhbr=CDialog: : OnCtlColor(pDC,pWnd,nCtlColor); //TODO: ChangeanyattributesoftheDChere if(pWnd==this) returnm_backbrush; //TODO: Returnadifferentbrushifthedefaultisnotdesired returnhbr; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- v60 串口 助手 程序