串口与界面设计文档

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1串口虚拟软件VSPD软件的使用VSPD是纯软件模拟实现的虚拟串口软件,对串口通讯应用系统程序的调试具有很好的帮助作用。安装并启动该软件后出现如下图1界面。图1VSPD操作界面图1、添加串口单击“添加端口”将成对添加虚拟串口,如图1中所示。该计算机中已有物理串口COM1和COM2,已经添加了COM3、COM4虚拟串口。再次点击“添加串口”时将添加COM5、COM6串口。2、重置串口单击“重置端口”将出现删除所有虚拟串口的界面,确定后将删除所有虚拟串口。3、虚拟串口的使用虚拟串口你的使用与物理串口一样。但需要注意的是必须按照前面添加时的顺序而成对使用。如上述图1中COM3只能与COM4配对使用。打开两个串口调试助手窗口,一个使用COM3,另一个使用COM4。若波特率、数据位数、奇偶校验都一致时,即可顺利实现双方的数据发送与接收。如图2所示。当用户设计开发应用程序时,使用串口调试助手使用其中一个虚拟串口,而用户程序使用该对的另一个虚拟串口,在串行通讯参数设置一致的情况下,2进行发送和接收程序的调试。图2使用串口调试助手实现两个虚拟串口之间的通讯3串口调试助手软件的使用目前辅助用户调试串口应用程序的软件很多,如串口调试助手等,它们的主要功能基本一样,但也有细微区别。有些软件可以实时反映当前计算机的所有串口,包括物理与虚拟串口,有些软件则是提供一定范围内的串口号,供用户选择,如从COM1到COM10。此类软件的使用很简单,不再叙述。4用户串口应用程序的设计实现目前编写串口应用程序的方法主要有三种。一是使用串行通讯API函数,二是使用MSCOMM控件,三是使用第三方开发的串行通讯类(如Serialport)或动态链接库。在此介绍使用简单的MSCOMM控件。1、MSCOMM控件的注册在VS2005/VS2010环境下使用该控件时首先要进行注册。将MSCOMM控件文件mscomm32.ocx放到windows/system32文件夹下。点击开始-运行,输入:Regsvr32mscomm32.ocx,按确定按钮,弹出对话框表示成功。图3MSCOMM控件注册成功界面2、使用方法(1)新建一个MFC应用程序(基于对话框)(2)在对话框上右击鼠标,出现如图4快捷菜单。图4快捷菜单5(3)单击“插入ActiveX控件”,出现如图5界面。选择MicrosoftCommunicationControl.Version6.0,即可在对话框上出现以电话图标形式的MSCOMM控件。图5选择MSCOMM控件(4)右击该图标,在快捷菜单中选择“添加变量”,如m_mscomm1。然后在该控件的属性里添加OnComm函数(右侧属性栏上方有一个闪电图标,就是添加消息响应的地方)。(5)添加两个编辑控件,分别添加其对应CString变量m_rev、m_send。添加一个命令按钮IDC_BUTTON1,用于发送数据。图6对话框设计(6)编写代码1)在BOOLCXXXDlg::OnInitDialog()初始化函数里添加如下代码://TODO:在此添加额外的初始化代码m_mscomm1.put_CommPort(3);//端口号为3m_mscomm1.put_InBufferSize(1024);//设置输入缓冲区的大小,Bytesm_mscomm1.put_OutBufferSize(512);//设置输出缓冲区的大小,Bytes6if(!m_mscomm1.get_PortOpen())//打开串口{m_mscomm1.put_PortOpen(true);}m_mscomm1.put_InputMode(1);//设置输入方式为二进制方式m_mscomm1.put_Settings(L9600,n,8,1);//设置波特率等参数m_mscomm1.put_RThreshold(1);//为1表示有一个字符即引发事件m_mscomm1.put_InputLen(0);2)OnCommMscomm1()接收数据代码VARIANTvariant_inp;COleSafeArraysafearray_inp;longi=0;intlen;charrxdata[1000];switch(m_mscomm1.get_CommEvent()){case2://表示接缓冲区内有字符variant_inp=m_mscomm1.get_Input();//接收数据safearray_inp=variant_inp;len=safearray_inp.GetOneDimSize();for(i=0;ilen;i++){safearray_inp.GetElement(&i,&rxdata[i]);}rxdata[i]='\0';m_rev=rxdata;UpdateData(false);//将接收数据进行显示break;7default:break;}3)发送代码如果是字符串CString:UpdateData();m_mscomm1.put_Output(COleVariant(m_send));如果发送的是字节,程序如下:byteinst[9];CByteArraysendArr;sendArr.SetSize(9);for(intj=0;j9;j++){sendArr.SetAt(j,inst[j]);}m_mscomm1.put_Output(COleVariant(sendArr));图7通讯结果8串口通讯参数设置界面的设计实现串行通讯参数包括串口号、数据位位数、波特率、校验类型及停止位位数等。在对话框界面中通常使用组合框或列表框来实现。1、使用MFC向导建立对话框在对话框中添加MSCOMM控件,添加其控件变量m_mscomm1。在对话框中添加组合框IDC_COMBO1,为其添加变量m_comnum,类型为int。在IDC_COMBO1属性中的数据项中,添加COM1;COM2;COM3;COM4。注意要用西文。添加组合框IDC_COMBO2,为其添加变量m_boderate,类型为int。在IDC_COMBO2属性中的数据项中,添加4800;9600;19200;38400。添加组合框IDC_COMBO3,为其添加变量m_check,类型为int。在IDC_COMBO3属性中的数据项中,添加n;O;P。添加两个编辑控件,分别添加其对应CString变量m_rev、m_send。添加一个命令按钮IDC_BUTTON1,用于打开串口。添加一个命令按钮IDC_BUTTON2,用于发送数据。2、打开串口在打开串口按钮的代码中,首先判断各个组合框的值,然后打开相应的串口端口。代码如下:9UpdateData();m_mscomm1.put_CommPort(m_comnum+1);//端口号m_mscomm1.put_InBufferSize(1024);//设置输入缓冲区的大小,Bytesm_mscomm1.put_OutBufferSize(512);//设置输出缓冲区的大小,Bytesif(!m_mscomm1.get_PortOpen())//打开串口{m_mscomm1.put_PortOpen(true);}m_mscomm1.put_InputMode(1);//设置输入方式为二进制方式//m_mscomm1.put_Settings(L9600,n,8,1);//设置波特率等参数CStringstr,str0,str1,str2,str3,strr;intboderate;strr=,;str2=8;str3=1;boderate=pow(2.0,m_boderate)*4800;str0.Format(_T(%d),boderate);if(m_check==0)str1=n;elseif(m_check==1)str1=O;elsestr1=P;str=str0+strr+str1+strr+str2+strr+str3;m_mscomm1.put_Settings(str);m_mscomm1.put_RThreshold(1);//为表示有一个字符即引发事件m_mscomm1.put_InputLen(0);3、接收数据接收事件中的代码如下:10VARIANTvariant_inp;COleSafeArraysafearray_inp;longi=0;intlen;charrxdata[1000];switch(m_mscomm1.get_CommEvent()){case2://表示接缓冲区内有字符variant_inp=m_mscomm1.get_Input();//接收数据safearray_inp=variant_inp;len=safearray_inp.GetOneDimSize();for(i=0;ilen;i++){safearray_inp.GetElement(&i,&rxdata[i]);}rxdata[i]='\0';m_rev+=rxdata;UpdateData(false);break;default:break;}4、发送数据发送数据按钮的代码为:UpdateData();m_mscomm1.put_Output(COleVariant(m_send));11利用CStdioFile类读写文件在使用VisualC++.NET进行编程时,我们经常需要把程序中得到的数据进行保存,以便日后进行数据处理。本文介绍一种使用CStdioFile类的方法将得到的数据保存为txt格式的文本文件,并且可以利用CStdioFile类读取txt文本文件中的数据。MFC中使用CStdioFile类封装了C++运行时刻文件流的操作,流文件采用缓冲方式,支持文件模式和二进制模式文件操作,默认方式为文本模式。CStdioFile类从CFile类继承,具有如下三个构造函数:1、CStdioFile():建立一个CStdioFile类的对象,但不打开文件;2、CStdioFile(FILE*pOpenStream):建立一个CStdioFile类的对象,并将该对象同一个已经打开的文件相联系;3、CStdioFile(LPCTSTRlpszFileName,UINTnOpenFlags):建立一个CStdioFile类的对象,同时打开一个文件,nOpenFlags是打开文件的方式,它可以取值如下所述:以上是几种常用的打开方式,还有另外几种可以去查阅相关资料。例如你可以这样创建一个新文件:CStdioFileFile;File.Open(文本名.txt,CFile::modeCreate|CFile::modeWrite);表示创建一个名为“文本名”扩展名为TXT的只写文件,另外因为没有说明,默认为以文本方式打开而不是二进制方式。文件的关闭:File.Close();CStdioFile类中有两种特殊的读/写文件的方法,ReadStrng和WriteString,分别读出或写入一个文本行。例如使用WriteString时,可以这样使用:CStringstr=这是一行文本\n;file.WriteString(str);若要达到同样的目的,对应CFile而言,则应这样定义str=这是一行文本\r\n。下面是几个读写txt文件的例子:写文件的例子:例一:写入一段字符串。//创建文件12CStdioFilefile1;file1.Open(_T(文件名.txt),CFile::modeCreate|CFile::modeWrite);//写入文件CStringstr1;str1.Format(_T(%s\n),_T(hello,world!));file1.WriteString(str1);//关闭文件file1.Close();例二:写入一组数据//创建文件CStdioFilefile2;file2.Open(_T(文件名1.txt),CFile::modeCreate|CFile::modeWrite);//写入文件for(inti=1;i=1

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功