串口与界面设计.docx

上传人:b****1 文档编号:2413251 上传时间:2022-10-29 格式:DOCX 页数:21 大小:656.49KB
下载 相关 举报
串口与界面设计.docx_第1页
第1页 / 共21页
串口与界面设计.docx_第2页
第2页 / 共21页
串口与界面设计.docx_第3页
第3页 / 共21页
串口与界面设计.docx_第4页
第4页 / 共21页
串口与界面设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

串口与界面设计.docx

《串口与界面设计.docx》由会员分享,可在线阅读,更多相关《串口与界面设计.docx(21页珍藏版)》请在冰豆网上搜索。

串口与界面设计.docx

串口与界面设计

串口虚拟软件VSPD软件的使用

VSPD是纯软件模拟实现的虚拟串口软件,对串口通讯应用系统程序的调试具有很好的帮助作用。

安装并启动该软件后出现如下图1界面。

图1VSPD操作界面图

1、添加串口

单击“添加端口”将成对添加虚拟串口,如图1中所示。

该计算机中已有物理串口COM1和COM2,已经添加了COM3、COM4虚拟串口。

再次点击“添加串口”时将添加COM5、COM6串口。

2、重置串口

单击“重置端口”将出现删除所有虚拟串口的界面,确定后将删除所有虚拟串口。

3、虚拟串口的使用

虚拟串口你的使用与物理串口一样。

但需要注意的是必须按照前面添加时的顺序而成对使用。

如上述图1中COM3只能与COM4配对使用。

打开两个串口调试助手窗口,一个使用COM3,另一个使用COM4。

若波特率、数据位数、奇偶校验都一致时,即可顺利实现双方的数据发送与接收。

如图2所示。

当用户设计开发应用程序时,使用串口调试助手使用其中一个虚拟串口,而用户程序使用该对的另一个虚拟串口,在串行通讯参数设置一致的情况下,进行发送和接收程序的调试。

图2使用串口调试助手实现两个虚拟串口之间的通讯

 

串口调试助手软件的使用

目前辅助用户调试串口应用程序的软件很多,如串口调试助手等,它们的主要功能基本一样,但也有细微区别。

有些软件可以实时反映当前计算机的所有串口,包括物理与虚拟串口,有些软件则是提供一定范围内的串口号,供用户选择,如从COM1到COM10。

此类软件的使用很简单,不再叙述。

 

 

用户串口应用程序的设计实现

目前编写串口应用程序的方法主要有三种。

一是使用串行通讯API函数,二是使用MSCOMM控件,三是使用第三方开发的串行通讯类(如Serialport)或动态链接库。

在此介绍使用简单的MSCOMM控件。

1、MSCOMM控件的注册

在VS2005/VS2010环境下使用该控件时首先要进行注册。

  将MSCOMM控件文件mscomm32.ocx放到windows/system32文件夹下。

  点击开始->运行,输入:

Regsvr32mscomm32.ocx,按确定按钮,弹出对话框表示成功。

 

图3MSCOMM控件注册成功界面

2、使用方法

(1)新建一个MFC应用程序(基于对话框)

(2)在对话框上右击鼠标,出现如图4快捷菜单。

 

图4快捷菜单

(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);//端口号为3

m_mscomm1.put_InBufferSize(1024);//设置输入缓冲区的大小,Bytes

m_mscomm1.put_OutBufferSize(512);//设置输出缓冲区的大小,Bytes 

if(!

m_mscomm1.get_PortOpen())//打开串口

{

m_mscomm1.put_PortOpen(true); 

}

m_mscomm1.put_InputMode

(1);//设置输入方式为二进制方式 

m_mscomm1.put_Settings(L"9600,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;i

{

safearray_inp.GetElement(&i,&rxdata[i]); 

rxdata[i]='\0';

m_rev=rxdata;

UpdateData(false);//将接收数据进行显示

break;

default:

break;

}

3)发送代码

如果是字符串CString:

UpdateData();

m_mscomm1.put_Output(COleVariant(m_send));

如果发送的是字节,程序如下:

byteinst[9];

CByteArraysendArr;

sendArr.SetSize(9);

for(intj=0;j<9;j++)

{

sendArr.SetAt(j,inst[j]);

}

m_mscomm1.put_Output(COleVariant(sendArr));

图7通讯结果

串口通讯参数设置界面的设计实现

串行通讯参数包括串口号、数据位位数、波特率、校验类型及停止位位数等。

在对话框界面中通常使用组合框或列表框来实现。

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、打开串口

在打开串口按钮的代码中,首先判断各个组合框的值,然后打开相应的串口端口。

代码如下:

UpdateData();

m_mscomm1.put_CommPort(m_comnum+1);//端口号

m_mscomm1.put_InBufferSize(1024);//设置输入缓冲区的大小,Bytes

m_mscomm1.put_OutBufferSize(512);//设置输出缓冲区的大小,Bytes

if(!

m_mscomm1.get_PortOpen())//打开串口

{

m_mscomm1.put_PortOpen(true);

}

m_mscomm1.put_InputMode

(1);//设置输入方式为二进制方式

//m_mscomm1.put_Settings(L"9600,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";

 else

str1="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、接收数据

接收事件中的代码如下:

 

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;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));

 

利用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的只写文件,另外因为没有说

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1