串口与界面设计.docx
- 文档编号:2413251
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:21
- 大小:656.49KB
串口与界面设计.docx
《串口与界面设计.docx》由会员分享,可在线阅读,更多相关《串口与界面设计.docx(21页珍藏版)》请在冰豆网上搜索。
串口与界面设计
串口虚拟软件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的只写文件,另外因为没有说
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 界面设计