第6章VB串口通信程序设计典型实例.docx

上传人:李司机 文档编号:5901964 上传时间:2023-09-01 格式:DOCX 页数:38 大小:469.84KB
返回 下载 相关 举报
第6章VB串口通信程序设计典型实例.docx_第1页
第1页 / 共38页
第6章VB串口通信程序设计典型实例.docx_第2页
第2页 / 共38页
第6章VB串口通信程序设计典型实例.docx_第3页
第3页 / 共38页
第6章VB串口通信程序设计典型实例.docx_第4页
第4页 / 共38页
第6章VB串口通信程序设计典型实例.docx_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第6章VB串口通信程序设计典型实例.docx》由会员分享,可在线阅读,更多相关《第6章VB串口通信程序设计典型实例.docx(38页珍藏版)》请在三一办公上搜索。

1、第6章VB串口通信程序设计典型实例利用VB开发串口通信程序既可以使用MSCOmm控件也可以调用WindowsAPI函数实现。不过,只要MSCOmm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和APl调用一样强,甚至比它还好且使用起来更加简单。在本章提供的串口通信程序设计中,除了PC与PC串口通信外,PC与单片机、PC与智能仪表、PC与PLC.PC与GSM短信模块等串口通信任务的实现均采用MSComm控件。6.1 PC与PC串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。本设

2、计通过两台PC串口3线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。6.1.1 PC与PC串口通信程序设计目的(1)掌握PC与PC串口通信的线路连接方法。(2)利用MSComm控件和API函数实现PC与PC串口通信的程序设计方法。6.1.2 PC与PC串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-1所示。表6-1设计用软、硬件序号名称数量1PC或IPC22串口通信线(三线制)13VisualBasic6.016.1.3 PC与PC串口通信程序硬件线路图线路说明,在计算机通电前,按图6-1所示将两台PC通过串口线连接起来:计算机A串

3、口COMl端口的TXD与计算机B串口CoMl端口的RXD相连,计算机A串口COMI端口的RXD与计算机B串口CoMl端口的TXD相连,计算机A串口COMl端口的GND与计算机B串口COMl端口的GND相连。IS6-1PC与PC串口通信线路6.1.4 设计任务利用MSComm控件和VBAPI函数编写程序实现PC与PC串口通信。任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Pleasereturnabc123,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abcl23,单击“发送字符”命令,信息返回到第一组的计算机。实际上就是编写一个简单的双机聊天程序。6.1.5 任务

4、实现6. 1.5.1利用MSComm控件实现字符型数据发送与接收1 .建立新工程VB使用“工程”来管理每一个应用程序要使用的所有文件,每建立一个新程序,就要新建一个工程。一个工程由窗体、标准模块、控件及应用所需的开发环境设置等组成。运行VB程序,出现“新建工程”对话框,选择“标准EXE”,单击“打开”命令按钮,进入VB工程集成开发环境,窗体设计器中自动出现一个名为Forml的空白窗体。2 .程序界面设计向空白窗体添加各种控件,以完成预定的各种功能。开始一个项目的设计时,VB的工具箱中会有许多默认的控件让设计者予以选用,这些原本就出现在工具箱中的控件是内置控件,它提供了一些基本的系统设计组件给设

5、计者,但功能比较特别的控件就不会出现在其中,如用来设计串口通信功能的控件MSComm就不在其中。(1)添加串口通信控件MSComm。由于VB的串行通信组件并不会主动出现在工具箱里中,当我们需要MSComm控件时,首先要把它加入到工具箱中。让MSComm控件出现在工具箱中的步骤如下。选择“工程”菜单下的“部件.”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“MicrosoftCommControl6.0,复选框,单击“确定”按钮后,在工具箱中就出现了一个形似“电话”的图标,它就是MSComm控件。工具箱中有了MSComm控件,就可以选择MSComm控件的图标后将其添加到程序窗体上

6、,利用该控件编程,PC就可以通过VB实现与串口设备的串口通信了。由于每个使用的MSComm控件对应着一个串行端口,如果应用程序需要访问多个串行图6-2程序窗体界面端口,必须添加多个MSComm控件。(2)为了实现连续的自动接收,将工具箱中的Timer控件添加到程序窗体上。(3)添加两个文本框控件:TeXtl和Text2,用于输入要发送的字符和显示要接收的字符。(4)添加两个标签控件:Labell和Label2,作为发送和接收字符区的标签。(5)添加一个按钮控件:Commandl执行发送字符命令。程序设计界面如图6-2所示。3 .属性设置从属性窗口设置属性时,只需从对象列表框中选择待设置属性的对

7、象,然后从属性列表的左列选择属性,最后在属性列表的右列中输入或选择新的属性值。程序窗体、控件对象的主要属性设置如表6-2所示。表62窗体、控件对象的主要属性设置控件类型主要属性功能Form(名称)=COMForm窗体控件BorderStyle=3运行时窗体固定大小CaPIion=PC与PC串口通信窗体标题栏显示程序名称Label(名称)=Labell标签控件Caption=显示接收字符区:标签文本Label(名称)=Label2标签控件Caption=输入发送字符区:标签文本TextBox(名称)=Textsend文本框控件MultiLine=TrUe允许多行显示ScrollBars=2-Ve

8、rtical垂直滚动条可用TextBox(名称)=TextReceive文本框控件MultiLine=True允许多行显示ScrollBars=2-Vertical垂直滚动条可用CoinmandBuiion(名称)=Cmdsend按钮控件Caplion=发送字符手动发送字符MSComm(名称)=MSComml串口通信控件其他属性在程序中设置Tinier(名称)=Timerl时钟控件Enabled=True时钟初始可用Interval=500设置发送周期(ms)三两台计算机中VB程序界面及属性设置应完全相同,尤其MSComm控件的InputMode和Settings*电属性值应相同。4 .程序代

9、码设计程序要实现自动发送或读取,在VB程序中有两个方式可以达到,一是查询方式,利用查询事件是否发生,当发生时,去执行默认的程序代码,可以使用计时器控件(Timer),该控件属性中的Interval可以控制计时器被启动的时间间隔,当时间间隔一到,便会执行原先放在计时器中的程序代码。下面是利用查询方式编写的PC与PC串口通信的参考程序,代码如下所示:串口初始化PrivateSubFonnLoad(),设置通信端口号为CoMl,设置串口1参数,接收文本型数据,打开通信端口1MSComml.CommPort=1MSConimLSenings=9600,n,8.MSComml.InputMode=0MS

10、Comml.PortOpen=TrueEndSub,把字符通过串口发送出去PrivateSubCmdsendClick()IfTeXISend.Text=ThenPP=MSgBOX(发送的数据不能为空!,16)ExitSubEndIfMSCornmI.Output=Trim(Textsend-Text)Fori=1To20000000NextiEndSub,通过时钟控制来自动接收字符PrivateSubTimer!Timer()将缓冲区内的数据读入buf变量中 判断缓冲区内是否存在数据Dimbuf$buf=Trim(MSComm1.Input)IfLen(buf)0ThenTextReceiv

11、e1Text=TextReceive1Text+Chr(13)+Chr(IO)+buf回车换行EndIfEndSub,关闭通信端口,停止程序运行PrivateSubCmdquitClick()MSComm1.PortOpen=FalseUnloadMeEndSub在WindoWS系统环境下,串口是系统资源的一部分。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。在WindOWS系统的系统函数中,均包含了支持通信中断的功能。二是使用事件方式。MSComm控件提供事件回应功能,可以利用此功能达到自动发送/接收的目的。下面是利用事

12、件方式编写的PC与PC串口通信的参考程序,界面设计与图6-2基本相同,区别是事件方式不需要时间控件。串口初始化PrivateSubFOrlTLLoad()设置通信端口号为COMlMSComml.CommPort=1MSCommLSetiings=9600,n,8J,设置串口参数MsCommLInputMode=O接收文本型数据MSCornmI.RThreshold=接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件MSComml.PortOpen=True,打开通信端口1EndSub把字符通过串口发送出去启动定时器PrivateSubCmdsendClick()IfTextse

13、nd-Text=,ThenPP=MSgBoX(发送的数据不能为空!,16)ExitSubEndIfMSComml.Output=Trim(Textsend.Text)EndSub,MSComm的OnCOmm事件程序,CommEvent属性值的不同,将各自的程序代码写入相关的子程序中只要RThresold中的设定字符数到达时便会使得CommEvent属性值变成ComEvReceive因此接收的子程序便会被执行PrivateSubMSCommlOnComm()Dimbuf$SelectCaseMSComm1.CommEvent通过取代每一个CaSe表达式来处理每个事件与错误CasecomEvCDC

14、D线的状态发生变化CaseComEvCTS,CTS线的状态发生变化CasecomEvDSRDSR线的状态发生变化CaseComEvReceivebuf=Trim(MSComml.Input),将缓冲区内的数据读入buf变量中CaseComEvSendEndSelectTextReceive,Text=TextReceive.Text&bufEndSub停止程序运行PrivateSubCmdquitClick()UnloadMeEndSub关闭通信端口,PrivateSubFonnUnload(CancelAsInteger)MSComm1.PortOpen=FalseEndSub5 .运行程序

15、程序设计、调试完毕,单击工具栏快捷按钮“启动”,运行程序。*两台计算机同时运行本程序。首先在一台计算机程序窗体中发送字符区输入要发送的字符,如“我是第一组,收到请回话!”,单击“发送字符”按钮,发送区的字符串通过CoMl口发送出去。如果联网通信的另一台计算机程序收到字符,则返回字符串,如“收到,我是第2组!”,如果通信正常该字符串将显示在接收区中。程序运行界面如图6-3所示。 PC机与PC机通信图6-3程序运行界面6.1.5.2利用API函数实现字符型数据发送与接收1 .建立新工程运行VB,创建标准的工程项目文件,设计程序窗体。 添加两个TeXtBoX控件,用于输入 要发送的字符和显示需接收的

16、字符。添加两个Label控件,作为发送和 接收字符区的标签。添加一个Timer控件,用于周期性 地读取串口数据。添加两个COmmandBUtton控件,分 别执行发送字符、关闭程序等命令。设计的程序界面如图6-4所示。2 .属性设置程序窗体、控件对象的主要属性设置如表6-3所示。. APIiB授收数薪区3发送数都.关闭程序| 二画二图6-4程序窗体界面表63窗体、控件对象的主要属性设置控件类型名称主要属性功能FormCOMFormBorderStyle=3运行时窗体固定大小Caption=APl串口通讯窗体标题栏显示程序名称LabelLabellCaption=发送数据区:标签LabelLab

17、el2Caption=接收数据区:标签TextBoxTextsendMuItiLine=True允许多行显示ScrollBars=2-Vertical垂直滚动条可用TextBoxTextReceiveMuItiLine=True允许多行显示ScrollBars=2-Vertical垂直滚动条可用CommandButtonBTNSendCaption=发送数据手动间断发送字符CommandButtonBTNCloseComCaption=关闭程序关闭程序TimerTMRCommInterval=500设置发送周期(ms)3.程序代码设计在程序标准模块SerialPOrtbas的说明部分放置使用的

18、APl函数声明及所用的结构、常数的声明:OptionExplicitGlobalComNumAsLongGlobalbRead(255)AsByteTypeCOMSTATICtsHoldAsLongfDsrHoldAsLongfRlsdHoldAsLongIXoftHoldAsLongfXotTSentAsLongIEofAsLongfximAsLong(ReservedAsLongCbInQueAsLongCbOutQueAsLongEndTypeTypeCOMMTIMEOUTSReadIntei,alTimeoutAsLongReadTotalTimeoutMultiplierAsLong

19、ReadTotalTimeoutConstantAsLongWriteTotalTimeoutMultiplierAsLongWriteTotalTimeoutConstantAsLongEndTypeTypeDCBDCBlengthAsLongBaudRateAsLongIBinaryAsLong(ParityAsLongfOutxCts11owAsLongfOutxDsrFlowAsLongfDtrContolAsLong(DsrSensitivityAsLongfTXContinueOnXoffAsLongfOutXAsLong11nXAsLongffirrorCharAsLong(Nu

20、llAsLongfRtsControlAsLongfAbortOnErrorAsLongfDummy2AsLongwReservedAsIntegerXonLimAsIntegerXottLimAsIntegerByteSizeAsByteParityAsByteStopBitsAsByteXonCharAsByteXoffChai,AsByteEnorCharAsByteEotCharAsByteEvtCharAsByteEndTypeTypeOVERLAPPEDInternalAsLongIntemalHighAsLongoffsetAsLongOffsetHighAsLonghEvent

21、AsLongEndTypeTypeSECURITYATTRIBUTESnLengthAsLongIpsecurityDescriptorAsLongblnheritHandleAsLongEndTypeDeclareFunctionCIoseHandleLibkemel32(ByValhbjectAsLong)AsLongDeclareFunctionGetLastErrorLibkernel32()AsLongDeclareFunctionReadFileLibkernel32(ByValhFileAsLong,IpBufferAsAny,ByValnNumberOfBytesToReadA

22、sLong,IpNumberOfBytesReadAsLong,IpOverlappedAsLong)AsLongDeclareFunctionWriteFileLibkemel32,(ByValhFileAsLong,IpBufferAsAny,ByValnNumberOfBytesToWriteAsLong,IpNumberOfBytesWrittenAsLong,IpOverlappedAsLong)AsLongDeclareFunctionSetCommTimeoutsLibkernel32(ByValhFileAsLong,IpCommTimeoutsAsCOMMTIMEOUTS)A

23、sLongDeclareFunctionGetCommTimeoutsLibkernel32(ByValhFileAsLong,IpCommTimeoutsAsCOMMTIMEOUTS)AsLongDeclareFunctionBuildCommDCBLibkeel32AliasBuildCommDCBA(ByValIpDefAsString,IpDCBAsDCB)AsLongDeclareFunctionSetCommStateLibkemel32(ByValhCommDevAsLong,IpDCBAsDCB)AsLongDeclareFunctionCreateFileLibkeme132

24、,AliasCreateFileA(ByValIpFiIeNameAsString,ByValdwDesiredAccessAsLong,ByValdwShareModeAsLong,ByValIpSecurityAttributesAsLong,ByValCiurCreationDispositionAsLong,ByValdwFlagsAndAttributesAsLong,ByValhTemplateFileAsLong)AsLongDeclareFunctionFlushFileBuffersLibkerHel32(ByVaIhFileAsLong)AsLong窗体模块程序如下:初始化

25、串口PrivateSubFormLoad()IfNotInitCom(,COMl:,9600,n,8J)ThenMSgBOX端口无效!”ExitSubEndIfEndSub发送字符PrivateSubBTNSendClickOIfWriteCOM32(txt(2)&vbCroLen(txt(2)ThenMsgBox写入错误”ExitSubEndIfEndSub向串口写数据FunctionWriteCOM32(COMStringAsString)AsIntegerOnErrorGoTohandelwritelplDimRetBytesAsLong,LenVaIAsLongDimretvalAsL

26、ongIfLen(COMString)255ThenWriteCOM32Left$(COMString,255)WriteCOM32Right$(COMString,Len(COMString)-255)ExitFunctionEndIfForLenVal=OToLen(COMString)-1bRead(LenVal)=Asc(Mid$(COMString,LenVal+1,1)NextLenValretval=WriteFile(ComNum,bRead(O),Len(COMString),RetBytes,O)WriteCOM32=RetByteshandelwritelpt:ExitF

27、unctionEndFunction读取数据PrivateSubTMRCommTimer()DimAnsAsString,iAsInteger,RtnStrAsStringAns=ReadCommPureOIfAns=ThenExitSubRtnStr=RtnStr&CleanStr(Ans)txtRec.Text=RtnStrFlushCommEndSub从串口读取数据FunctionReadCommPureOAsStringOnErrorGoTohandelpurecomDimRetBytesAsLong,iAsInteger,ReadStrAsString,retvalAsLongDim

28、CheckTotalAsInteger,CheckDigitLCAsIntegerretval=ReadFile(ComNum,bRead(O),255,ReiBytes,O)ReadStr=,If(RetBytesO)ThenFori=OToRetBytes-1ReadStr=ReadStr&Chr(bRead(i)NextiElseFlushCommEndIfReadCommPure=ReadStrhandelpurecom:ExitFunctionEndFunctionFunctionCleanStr(TextLineAsString)AsStringDimiAsInteger,RtnS

29、trAsStringRtnStr=,Fori=1ToLen(TextLine)SelectCaseAsc(Mid$(TextLine,i,1)Case&H5DRtnStr=RtnStr&Case&H5BRtnStr=RtnStr&CaseIs=&H30RtnStr=RtnStr&Mid$(TeXtLine,i,1)Case13RtnStr=RtnStr&Case10RtnStr=RtnStr&CaseElseRtnStr=RtnStr&EndSelectNextiCleanStr=RtnStrEndFunction清空文件缓冲区FunctionFlushCommOFlushFileBuffer

30、s(ComNum)EndFunction初始化端口FunctionInitCom(ComNumberAsString,ComsettingsAsString)AsBooleanOnErrorGoTohandelinitcomDimComSetupAsDCB,Answer,StatAsCOMSTAT,RetBytesAsLongDimretvalAsLongDimCtimeOutAsCOMMTIMEOUTS,BarDCBAsDCB打开通讯读/写(&HC0000000).必须指定存在的文件(3).ComNum=CreateFile(ComNUmber,&HC0000000,O,0&,&H3,0,0

31、)IfComNum=-IThenMsgBox端口&ComNumber&无效.请设置正确48InitCom=FalseExitFunctionEndIf,超时Ctimeut.ReadIntervalTimeout=20Ctinieout.ReadTotalTimeoutConstant=1Ctinieout.ReadTotalTimeoutMultiplier=1Ctinieout.WriteTotalTimeoutConstant=10Ctinieout.WriteTotalTimeoutMultiplier=1retval=SetCommTimeouts(ComNum,CtimeOut)If

32、retval=-IThenretval=GetLastErrorOMSgBoX端口超时设定无效&ComNumber&错误:&retvalretval=CloseHandle(ComNum)InitCom=FalseExitFunctionEndIfretval=BuildCommDCB(Comsettings,BarDCB)Ifretval=-IThenretval=GetLastErrorOMsgBox无效设备DCB块&Comsettings&错误:&retvalretval=CloseHandle(ComNum)InitCom=FalseExitFunctionEndIfretval=Se

33、tCommState(ComNum,BarDCB)Ifretval=-IThenretval=GetLastErrorOMsgBox”无效设备DCB块”&Comsettings&错误:&retvalretval=CloseHandle(ComNum)InitCom=FalseExitFunctionEndIfInitCom=TrUehandelinitcom:ExitFunctionEndFunction关闭程序PrivateSubBTNCloseComClick()UnloadMeEndSub关闭端口PrivateSubFormUnload(CancelAsInteger)CloseHand

34、le(ComNum)EndSub4.运行程序图65程序运行界面程序设计、调试完毕,执行菜单“运行/启动”命令或单击工具栏快捷按钮“启动”,运行程序。(1)首先在程序窗体中发送字符区输入要发送的字符,单击“发送数据”按钮,发送区的字符串通过COMl口发送出去。(2)另一台计算机发送数据,本计算机自动读入并显示在接收数据区中。程序运行界面如图6-5所示。6.1.5.3利用MSComm控件实现PC双串口互通信如果一台计算机有两个串口,可通过串口线将两个串口连接起来:COMl端口的TXD与COM2端口的RXD相连,COMI端口的RXD与COM2端口的TXD相连,COMl端口的GND与COM2端口的GN

35、D相连,如图6-6(a)所示,这是串口通信设备之间的最简单连接(即三线连接),图中的2号接收脚与3号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可以发送也可以接收。如果一台计算机只有一个串行通信端口可以使用,那么将第2脚与第3管脚短路,如图&6(b)所示,那么第3脚的输出信号就会被传送到第2脚,用以发送到同一串行端口的输入缓冲区,程序只要再由相同的串行端口上作读取的操作,即可将数据读入,一样可以形成一个测试环境。设计的参考代码如下:,串口初始化串口1与串口2的通信参数应一致PrivateSubForm_Load()MSComml.CommPort=1,设置通信端口

36、号为COMlMSCommLSeitings=9600,n,8.,设置串口1参数MSComml.InputMode=O,接收文本型数据MSComml.PortOpen=True打开通信端口IMSComm2.CommPort=2,设置通信端口号为COM2MSComm2.Settings=9600,n,8,设置串口2参数MSComm2.InputMode=O,接收文本型数据MSComm2.PortOpen=TrueEndSub把字符通过串口发送出去,启动定时器PrivateSubClsend-Click()MSComml.Output=Trim(Textsend1Text)TimerLEnabled

37、=TrueEndSub,接收字符PrivateSubTimerlJTimerODimbuf$TimerLEnabled=False,打开通信端口2buf=Trim(MSComm2.Input),将缓冲区内的数据读入buf变量中IfLen(buf)=OThenTextReceive,Text=ElseTextReceive-Texl=bufEndIfEndSub停止程序运行PrivateSubCmdquitClick()UnloadMeEndSub,关闭通信端口,PrivateSubFonnUnload(CancelAsInteger)MSComm1.PortOpen=FalseMSComm2.

38、PortOpen=FalseEndSub,判断缓冲区内是否存在数据程序运行界面如图6-7所示。PC机双京口互Ji信输入发送字符区:显示搔收字符区:季亘信投异 台以遣工 两可t双 当、全当两台密口设备通信距离较近时 :蕊解雅士懒援髅律号通遍)便可实就全双工异步奉行通信黯圣园关闭程序I6.2PC与单片机串口通信程序设计目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台。图68单片机实验板为便于查询和保存数据,还需要数据库的支持,这种应用的核心是数据通信,它包括单片机和上位机之间、客户端和服

39、务器之间以及客户端和客户端之间的通信,而单片机和上位机之间数据通信则是整个系统的基础。单片机和PC的通信是通过单片机的串口和PC串口之间的硬件连接实现的。图6-8是本设计使用的单片机实验板。有关单片机实验板的详细信息请查询电子开发网。6.2.1 PC与单片机串口通信程序实训目的(1)掌握PC与单片机串口通信的线路连接方法。(2)掌握PC与单片机串口通信的KeilC51和VB程序设计方法。6.2.2 PC与单片机串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-4所示。表6-4设计用软、硬件序号名称数量1PC(计算机)12单片机实验板(AT89C5kMAX232等)13串11通信线(三

40、线制)14VB6.016.2.3 PC与单片机串口通信程序硬件线路图线路说明,如图6-9所示,数据通信的硬件上采用三线制,将单片机和PC串口的3个引脚(RXD、TXDGND)分别连在一起,即将PC和单片机的发送数据线TXD与接收数据RXD交叉连接,两者的地线GND直接相连,而其他信号线如握手信号线均不用,采用软件握手的方式,这样既可以实现预定的任务又可以简化电路设计。但由于单片机的TTL逻辑电平和RS-232C的电气特性完全不同,RS-232C的逻辑0电平规定为+3+15V之间,逻辑1电平为-3T5V之间,因此,在将PC和单片机的RXD和TXD交叉连接时必须进行电平转换,这里使用的是MAX23

41、2电平转换芯片。PC机图6-9PC与单片机串II通信线路单片机系统有LED显示器模块、继电器输出模块、蜂鸣器模块等。6.2.4 设计任务利用KeilC51和VB编写程序实现PC与单片机串口通信。任务要求。1 .设计任务1PC通过串行口将数字(00,01,02,03.,FF,十六进制)发送给单片机,单片机收到后回传这个数字,PC接收到回传数据后显示出来,若发送的数据和接收到的数据相等,则串行通信正确,否则有错误。启始符是数字00,结束符是数字FR2 .设计任务2(1)测试通信状态。先在文本框中输入字符串“Hello”,单击“测试”按钮,将字符串“Hello”发送到单片机,若PC与单片机通信正常,

42、在PC程序的文本框中显示字符串“OK!”;否则,显示字符串“ERROR!”。(2)循环计数。单击“开始”按钮,文本框中数字从0开始累加,0、1、2、3,并将此数发送到单片机的显示器上显示。当累加到10时,回到。重新开始累加,依次循环。任何时候,单击“停止”按钮,PC程序中和单片机显示器都停止累加,再单击“开始”按钮,接着停下的数继续累加。(3)控制指示灯。在单片机继电器接线端子的两个通道上分别接上两个指示灯,在PC程序界面上选择指示灯号,如1号灯,单击界面“打开”按钮,单片机上1号灯亮,同时蜂鸣器响;单击界面“关闭”按钮,1号灯灭,蜂鸣器停止响;同样控制2号灯的亮灭(蜂鸣器同时动作)。6.2.

43、5 任务实现单片机和PC通信,在程序设计上涉及两个部分的内容。一是单片机的C51程序,二是PC的串口通信程序和界面的编制。6.2.5.1利用KeilC51实现单片机与PC串口通信任务1网络详细地址为:。6. 2.5.2利用VB实现PC与单片机串口通信任务11 .程序界面设计运行VB,创建标准的工程项目文件,设计程序窗体。设计的程序界面如图6-11所示。图6-11程序窗体界面(1)添加一个MSComm控件:默认的工具箱中没有MSCOmm串口通信控件,因此,首先要把它添加到工具箱中,再将MSComm控件添加到程序窗体上。(2)添加两个按钮控件COmmandBUUon,用于发送数字和关闭程序。(3)

44、添加一个框架控件Frame,用于功能显示。(4)添加一个文本控件TeXIBoX,用于输入数字。(5)添加一个标签控件LabeL用于显示通信状态。2 .属性设置程序窗体、控件对象的主要属性设置如表6-5所示。表6-5窗体、控件对象的主要属性设置控件类型名称主要属性功能FormMainFormBorderStyle=3运行时窗体固定大小Caption=PC与单片机串门通信窗体标题栏显示程序名称FrameFramelCaption=输入数据测试功能区TextBoxnumTextText=0数据输入框LabelLabel1Caption=通信状态?显示串口通信状态CommandButionCmdsen

45、dCaption=发送发送数据命令CommandButtonCmdquitCaption=关闭关闭程序命令MSCommMSCommI在程序中设置串口参数设置网络详细地址为:。6. 2.5.3利用KeilC51实现单片机与PC串口通信任务2(方法1)网络详细地址为:。7. 2.5.4利用VB实现PC与单片机串口通信任务2(方法1)1 .程序界面设计运行VB,创建标准的工程项目文件,设计程序窗体。IH 6-13程序窗体界面 添加一个MSComm控件。默认的工具箱中没有MSComm串口通信控件,因此,首先要把它添加到工具箱中,再将MSComm控件添加到程序窗体上。为了实现连续的字符发送和循环计数,添加两个Timer控件。 为了功能分类,添加3个Frame控件。 为了选择指示灯号,添加两个OPtiOnBUttOn控件。添加其他控件。两个文本控件TextBox,6个按钮控件Com

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号