版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录第一章 课程设计要求 1第二章 系统的组成及原理 2 2.1 系统的组成 2 2.2 系统设计的原理 2第三章 串口调试助手的设计 3 3.1 串口调试助手的概要设计 3 3.2 串口调试助手的详细设计 3 3.2.1 窗体设计 3 3.2.2 打开端口部分设计 4 3.2.3 接收数据部分的设计 5 3.2.4 发送数据部分的设计 11第四章 调试及测试结果与分析 15第五章 结论 16参考文献 17附录A:程序清单及注释 18第一章 课程设计要求利用Delphi或C+作为开发工具,根据SPCOM或MSCOMM控件、PCOMM.DLL等,设计出一串口调试助手,要求在不同计算机之间实现串
2、口间数据通信,并以此为基础,实现对不同数据格式间的转换功能。要求:1、串口通信。2、数据格式。3、系统软件(Delphi7.0)。第二章 系统的组成及原理2.1系统的组成串口调试助手经常用于对串口的调试和检查,也可传送一些简单的数据。本软件主要包括:1、接收部分接收时能够分别以十六进制、二进制、十进制等格式接收数据,并能以*.Txt或*.Doc 保存接收的数据。2、发送部分 发送部分分为手动发送和自动发送,并且都能以ASCII码和文本格式发送。2.2 系统设计的原理Microsoft Communication Control(简称MSCOMM控件)是微软公司为Visual Basic提供的一
3、个串口控件,在Visval C+、Visval Basic、Delphi等开发环境中均可使用。它通过串行端口传送和接收数据,为应用程序提供基本的串口通信功能,使得程序员不必花费大量的时间去了解较为复杂的API函数,因此被广泛使用。所以本软件可以利用Delphi7.0根据MSCOMM控件设计。利用MSCOMM控件可以简化很多较繁琐的程序。它提供了两种处理通信问题的方法:一是事件驱动方法,一是查询法。用于串口调试助手的功能比较简单,不需要太复杂的处理方式,所以使用查询法就足够了。查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEve
4、nt 属性的值来查询事件和错误。通信MSCOMM控件提供了27个关于通信控制方面的属性和5个标准属性。其中主要的和本次使用的属性如下:CommPort 设置并返回通信端口号;Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位;PortOpen 设置并返回通信端口的状态,也可以打开和关闭端口;Input 从接收缓冲区返回和删除字符;Output 向传送缓冲区写一个字符。第三章 串口调试助手的设计3.1 串口调试助手的概要设计串口调试助手的系统层次结构图如图3-1所示。3.2 串口调试助手的详细设计3.2.1 窗体设计由于串口调试助手的功能比较简单,所以只需一个窗体就足够了
5、,其窗体如图3-2所示。3.2.2 打开端口部分设计 1.打开端口部分设计流程图如图3-3所示2.端口初始化就是对波特率、校验、数据位和停止位的设置,端口的设置参数赋给ComSetting函数,然后赋给 MSComm1.Setting即可。当端口打开时指示灯为绿色,当端口为打开时指示灯为红色。代码如下:procedure TForm1.Button1Click(Sender: TObject);begin if not MSComm1.PortOpen then begin /打开串口 MSComm1.CommPort:= CmbComPort.ItemIndex +1; ComSetting
6、:= ComboBox1.Text; ComSetting:= ComSetting + , + ComboBox2.Text; ComSetting:= ComSetting + , + ComboBox3.Text; ComSetting:= ComSetting + , + ComboBox4.Text; MSComm1.Settings:= ComSetting; try MSComm1.PortOpen:= True; except showmessage(该COM错误!); application.Terminate;/关闭程序 end ; Panel1.Enabled:=fals
7、e; ShowComSetting; /变换各个组件的状态 ShpSerialPort.Brush.Color:= clLime; /指示灯变绿 Button1.Caption:= 关闭串口; end else begin /关闭串口 /变换各个组件的状态 MSComm1.PortOpen:= False; ShpSerialPort.Brush.Color:= clRed; /指示灯变红 Panel1.Enabled:= True; Button1.Caption:= 打开串口; end;end;3.2.3 接收数据部分的设计 1.接收数据部分的设计流程图如图3-4所示。2.当接收数据后对数
8、据进行变换时,要先判断接收的数据是否符合变换的条件,例如当以十进制显示时,接收的数据不是十六进制数就会报错。判断数据是否是十六进制的代码如下:function PanDuan16(Str: string):boolean;var mLen, i: Integer;begin mLen:= Length(Str); for i:= mLen downto 1 do begin if Stri in 0.9,a.f,A.F then begin Continue; Result:=true; end else Result:=false; break; end;end;判断数据是否是十进制的代码如
9、下:function PanDuan(Str: string):boolean;var mLen, i: Integer;begin mLen:= Length(Str); for i:= mLen downto 1 do begin if Stri in 0,1,2,3,4,5,6,7,8,9 then begin Continue; Result:=true; end else Result:=false; break; end;end;procedure TForm1.MSComm1Comm(Sender: TObject);var InputLen: Integer; tmpvar:
10、Variant; a:string;begin InputLen:= 0; if MSComm1.CommEvent = 2 then /接收数据时 begin InputLen:= MSComm1.InBufferCount; /返回输入缓冲区内等待读取的字节数 /接收二进制数据,转换为ASCII码显示 if ASCIIRecv.Checked = true then /ASCII码 begin tmpvar:= MSComm1.Input; /读取接收缓冲区中的数据 InputStr:=; inputstr:= inputstr+ StrToASCIIStr(tmpvar)+#72+#32
11、; end else if zifu.Checked = true then /ASCII码字符 begin tmpvar:= MSComm1.Input; /读取接收缓冲区中的数据 if PanDuan16(tmpvar) then begin InputStr:=; InputStr:= InputStr + chr(strtoint($+tmpvar) + #32; end else begin showmessage(输入数据有错!); InputStr:=; end; end else if HRecv.Checked=true then /十六进制 begin tmpvar:= M
12、SComm1.Input; /读取接收缓冲区中的数据 if PanDuan(tmpvar)then begin InputStr:=; a:= tmpvar; InputStr:=InputStr +inttohex(strtoint(a),2)+#72+ #32; end else begin showmessage(请输入09之间的数); InputStr:=; end; end else if BRecv.Checked=true then /二进制 begin tmpvar:= MSComm1.Input; /读取接收缓冲区中的数据 if PanDuan16(tmpvar) then
13、begin InputStr:=; a:= tmpvar; InputStr:=InputStr +dtoB(strtoint($+a) +#66+ #32; end else begin showmessage(输入数据有错!); InputStr:=; end; end else if DRecv.Checked=true then /十进制 begin tmpvar:= MSComm1.Input; /读取接收缓冲区中的数据 if PanDuan16(tmpvar) then begin InputStr:=; a:= tmpvar; InputStr:=InputStr +inttos
14、tr(strtoint($+a) + #32; end else begin showmessage(输入数据有错!); InputStr:=; end; end else /直接接收字符 begin InputStr:=; InputStr:= MSComm1.Input; end; MemRecv.Text:= MemRecv.Text + InputStr; end; /加入数据显示模块 RecvStr:= MemRecv.Text; RXNum:= RXNum + InputLen; ShowRX;end;3.2.4 发送数据部分的设计1.发送数据部分的设计流程图如图3-5所示。2.发
15、送数据之前必须保证串口打开,所以先判断端口有没有打开。由于发送空内容没有意义,所以还要保证发送内容不能为空。procedure TForm1.BtnSendClick(Sender: TObject);var Len: Integer; i, Count, MaxCount, tmpInt: Integer; tmpvar: Variant; tmpStr, Output: string;begin Len:= 0; Count:= 1; MaxCount:= 1; if not MSComm1.PortOpen then begin ShowMessage(没有打开串口!); Exit; end else begin output:=stringreplace(MemSend.Text,#13#10,rfReplaceAll); /去掉换行符 Len:= Length(output); if len=0 then ShowM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国水果酵素市场消费前景及未来供应渠道研究研究报告
- 首医大口腔科学教学大纲
- 医院神经内科护理年度汇报
- (2026年)IABP的检测与护理课件
- 火灾事故的应急演练方案
- 油漆稀释剂储存安全规定要求
- 医学影像病例随访制度
- 2025至2030预制菜产业消费升级趋势与品牌竞争策略研究报告
- 燃料集控值班员操作知识评优考核试卷含答案
- 非织造布卷绕分切工风险评估考核试卷含答案
- GB 11174-2025液化石油气
- 肝素钠工艺流程
- 热工仪表工试题全集
- 2025-2030老年婚恋市场需求分析与服务平台优化方向
- 《JJG 875-2019数字压力计》解读
- 急性发热课件
- 疼痛科医师进修总结汇报
- 舞蹈症鉴别诊断课件
- 非法营运执法培训课件
- 门诊主任述职报告课件
- 萝莉妹子的缤纷暑假2900字9篇
评论
0/150
提交评论