新VB串口通信程序设计典型实例{修}.pdf

上传人:l**** 文档编号:73524394 上传时间:2023-02-19 格式:PDF 页数:36 大小:2.43MB
返回 下载 相关 举报
新VB串口通信程序设计典型实例{修}.pdf_第1页
第1页 / 共36页
新VB串口通信程序设计典型实例{修}.pdf_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《新VB串口通信程序设计典型实例{修}.pdf》由会员分享,可在线阅读,更多相关《新VB串口通信程序设计典型实例{修}.pdf(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、、信号地线)便可实现全双工异步串行通信。本设计通过两台 PC 串口 3 线连接,介绍了利用 API 函数和 MSComm 控件设计串口通信程序的方法,包括字符与文件的发送与接收。6.1.1PC 与 PC 串口通信程序设计目的(1)掌握 PC 与 PC 串口通信的线路连接方法。(2)利用 MSComm 控件和 API 函数实现 PC 与 PC 串口通信的程序设计方法。6.1.2PC 与 PC 串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-1 所示。表 6-1序号123PC 或 IPC串口通信线(三线制)Visual Basic 6.0设计用软、硬件名称数量2116.1.3PC 与

3、PC 串口通信程序硬件线路图线路说明,在计算机通电前,按图6-1 所示将两台 PC 通过串口线连接起来:计算机A串口 COM1 端口的 TXD 与计算机B 串口COM1端口的RXD相连,计算机A 串口 COM1 端口的 RXD 与计算机 B 串口 COM1 端口的 TXD 相连,计算机 A 串口 COM1 端口的 GND 与计算机 B 串口 COM1 端口的 GND 相连。PC机AA计算机PC机BB计算机TXDCOM1RXDGNDTXDRXDGNDCOM1图 6-1PC 与 PC 串口通信线路6.1.4设计任务利用 MSComm控件和 VB API函数编写程序实现 PC 与 PC 串口通信。任

4、务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please returnabc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。实际上就是编写一个简单的双机聊天程序。6.1.5任务实现6.1.5.1利用 MSComm 控件实现字符型数据发送与接收1建立新工程VB 使用“工程”来管理每一个应用程序要使用的所有文件,每建立一个新程序,就要新建一个工程。一个工程由窗体、标准模块、控件及应用所需的开发环境设置等组成。运行 VB 程序,出现“新建工程”对话框,选择“标准 EXE”,单击“打开”命令按钮,进入

5、VB 工程集成开发环境,窗体设计器中自动出现一个名为Form1 的空白窗体。2程序界面设计向空白窗体添加各种控件,以完成预定的各种功能。开始一个项目的设计时,VB 的工具箱中会有许多默认的控件让设计者予以选用,这些原本就出现在工具箱中的控件是内置控件,它提供了一些基本的系统设计组件给设计者,但功能比较特别的控件就不会出现在其中,如用来设计串口通信功能的控件MSComm 就不在其中。(1)添加串口通信控件 MSComm。由于 VB 的串行通信组件并不会主动出现在工具箱里中,当我们需要 MSComm控件时,首先要把它加入到工具箱中。让 MSComm 控件出现在工具箱中的步骤如下。选择“工程”菜单下

6、的“部件”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“Microsoft Comm Control 6.0”复选框,单击“确定”按钮后,在工具箱中就出现了一个形似“电话”的图标,它就是MSComm 控件。工具箱中有了 MSComm 控件,就可以选择 MSComm 控件的图标后将其添加到程序窗体上,利用该控件编程,PC 就可以通过 VB 实现与串口设备的串口通信了。由于每个使用的 MSComm 控件对应着一个串行端口,如图 6-2程序窗体界面果应用程序需要访问多个串行端口,必须添加多个MSComm 控件。(2)为了实现连续的自动接收,将工具箱中的Timer控件添加到程序窗体上。

7、(3)添加两个文本框控件:Text1 和 Text2,用于输入要发送的字符和显示要接收的字符。(4)添加两个标签控件:Label1 和 Label2,作为发送和接收字符区的标签。(5)添加一个按钮控件:Command1执行发送字符命令。程序设计界面如图 6-2 所示。3属性设置从属性窗口设置属性时,只需从对象列表框中选择待设置属性的对象,然后从属性列表的左列选择属性,最后在属性列表的右列中输入或选择新的属性值。程序窗体、控件对象的主要属性设置如表6-2 所示。表 6-2控 件 类 型窗体、控件对象的主要属性设置主 要 属 性(名称)=COMFormFormBorderStyle=3Captio

8、n=PC 与 PC 串口通信(名称)=Label1LabelCaption=显示接收字符区:(名称)=Label2LabelCaption=输入发送字符区:(名称)=TextsendTextBoxMultiLine=TrueScrollBars=2-Vertical(名称)=TextReceiveTextBoxMultiLine=TrueScrollBars=2-VerticalCommandButton(名称)=CmdsendCaption=发送字符(名称)=MSComm1其他属性在程序中设置(名称)=Timer1TimerEnabled=TrueInterval=500标签文本文本框控件允

9、许多行显示垂直滚动条可用文本框控件允许多行显示垂直滚动条可用按钮控件手动发送字符串口通信控件时钟控件时钟初始可用设置发送周期(ms)标签文本标签控件窗体控件运行时窗体固定大小窗体标题栏显示程序名称标签控件功能MSComm两台计算机中VB 程序界面及属性设置应完全相同,尤其MSComm控件的InputMode 和Settings属性值应相同。4程序代码设计程序要实现自动发送或读取,在 VB 程序中有两个方式可以达到,一是查询方式,利用查询事件是否发生,当发生时,去执行默认的程序代码。可以使用计时器控件(Timer),该控件属性中的 Interval 可以控制计时器被启动的时间间隔,当时间间隔一到

10、,便会执行原先放在计时器中的程序代码。下面是利用查询方式编写的PC 与 PC 串口通信的参考程序,代码如下所示:串口初始化Private Sub Form_Load()MSComm1.CommPort=1 设置通信端口号为 COM1MSComm1.Settings=9600,n,8,1 设置串口 1 参数MSComm1.InputMode=0 接收文本型数据MSComm1.PortOpen=True 打开通信端口 1End Sub 把字符通过串口发送出去Private Sub Cmdsend_Click()If Textsend.Text=Thenpp=MsgBox(发送的数据不能为空!,16

11、)Exit SubEnd IfMSComm1.Output=Trim(Textsend.Text)For i=1 To 20000000Next iEnd Sub 通过时钟控制来自动接收字符Private Sub Timer1_Timer()Dim buf$buf=Trim(MSComm1.Input)将缓冲区内的数据读入 buf 变量中If Len(buf)0 Then 判断缓冲区内是否存在数据TextReceive.Text=TextReceive.Text+Chr(13)+Chr(10)+buf/回车换行End IfEnd Sub 关闭通信端口,停止程序运行Private Sub Cmd

12、quit_Click()MSComm1.PortOpen=FalseUnload MeEnd Sub在 Windows 系统环境下,串口是系统资源的一部分。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。在 Windows系统的系统函数中,均包含了支持通信中断的功能。二是使用事件方式。MSComm 控件提供事件回应功能,可以利用此功能达到自动发送/接收的目的。下面是利用事件方式编写的PC 与 PC 串口通信的参考程序,界面设计与图 6-2基本相同,区别是事件方式不需要时间控件。串口初始化Private Sub Form_Lo

13、ad()MSComm1.CommPort=1设置通信端口号为 COM1MSComm1.Settings=9600,n,8,1设置串口参数MSComm1.InputMode=0接收文本型数据MSComm1.RThreshold=1 接收缓冲区每收到一个字符都会使 MSComm 控件触发 OnComm 事件MSComm1.PortOpen=True打开通信端口 1End Sub把字符通过串口发送出去启动定时器Private Sub Cmdsend_Click()If Textsend.Text=Thenpp=MsgBox(发送的数据不能为空!,16)Exit SubEnd IfMSComm1.Ou

14、tput=Trim(Textsend.Text)End SubMSComm 的 OnComm 事件程序由 CommEvent 属性值的不同,将各自的程序代码写入相关的子程序中只要 RThresold 中的设定字符数到达时便会使得 CommEvent 属性值变成 comEvReceive因此接收的子程序便会被执行Private Sub MSComm1_OnComm()Dim buf$Select Case MSComm1.CommEvent通过取代每一个 case 表达式来处理每个事件与错误Case comEvCD CD 线的状态发生变化Case comEvCTS CTS 线的状态发生变化Cas

15、e comEvDSR DSR 线的状态发生变化Case comEvReceivebuf=Trim(MSComm1.Input)将缓冲区内的数据读入 buf 变量中Case comEvSendEnd SelectTextReceive.Text=TextReceive.Text&bufEnd Sub停止程序运行Private Sub Cmdquit_Click()Unload MeEnd Sub关闭通信端口,Private Sub Form_Unload(Cancel As Integer)MSComm1.PortOpen=FalseEnd Sub5运行程序程序设计、调试完毕,单击工具栏快捷按钮

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

17、Label控件 添加一个 Timer 控件,用于周期性地读取串口数据。添加两个 CommandButton 控件,分别执行发送字符、关闭程序等命令。设计的程序界面如图 6-4所示。2属性设置程序窗体、控件对象的主要属性设置如表6-3所示。表 6-3控 件 类 型FormLabelLabelTextBox名称COMFormLabel1Label2Textsend窗体、控件对象的主要属性设置主 要 属 性BorderStyle=3Caption=API 串口通讯Caption=发送数据区:Caption=接收数据区:MultiLine=TrueScrollBars=2-VerticalMultiL

18、ine=TrueScrollBars=2-VerticalCaption=发送数据Caption=关闭程序Interval=500功能运行时窗体固定大小窗体标题栏显示程序名称标签标签允许多行显示垂直滚动条可用允许多行显示垂直滚动条可用手动间断发送字符关闭程序设置发送周期(ms)图 6-4程序窗体界面TextBoxCommandButtonCommandButtonTimerTextReceiveBTNSendBTNCloseComTMRComm3程序代码设计在程序标准模块 SerialPort.bas的说明部分放置使用的 API 函数声明及所用的结构、常数的声明:Option Explicit

19、Global ComNum As LongGlobal bRead(255)As ByteType COMSTATfCtsHold As LongfDsrHold As LongfRlsdHold As LongfXoffHold As LongfXoffSent As LongfEof As LongfTxim As LongfReserved As LongcbInQue As LongcbOutQue As LongEnd TypeType COMMTIMEOUTSReadIntervalTimeout As LongReadTotalTimeoutMultiplier As LongR

20、eadTotalTimeoutConstant As LongWriteTotalTimeoutMultiplier As LongWriteTotalTimeoutConstant As LongEnd TypeType DCBDCBlength As LongBaudRate As LongfBinary As LongfParity As LongfOutxCtsFlow As LongfOutxDsrFlow As LongfDtrControl As LongfDsrSensitivity As LongfTXContinueOnXoff As LongfOutX As LongfI

21、nX As LongfErrorChar As LongfNull As LongfRtsControl As LongfAbortOnError As LongfDummy2 As LongwReserved As IntegerXonLim As IntegerXoffLim As IntegerByteSize As ByteParity As ByteStopBits As ByteXonChar As ByteXoffChar As ByteErrorChar As ByteEofChar As ByteEvtChar As ByteEnd TypeType OVERLAPPEDIn

22、ternal As LongInternalHigh As Longoffset As LongOffsetHigh As LonghEvent As LongEnd TypeType SECURITY_ATTRIBUTESnLength As LonglpSecurityDescriptor As LongbInheritHandle As LongEnd TypeDeclare Function CloseHandle Lib kernel32(ByVal hObject As Long)As LongDeclare Function GetLastError Lib kernel32()

23、As LongDeclareFunctionReadFileLibkernel32(ByValhFileAsLong,lpBufferAsAny,ByValnNumberOfBytesToRead As Long,lpNumberOfBytesRead As Long,lpOverlapped As Long)As LongDeclareFunctionWriteFileLibkernel32(ByValhFileAsLong,lpBufferAsAny,ByValnNumberOfBytesToWrite As Long,lpNumberOfBytesWritten As Long,lpOv

24、erlapped As Long)As LongDeclare Function SetCommTimeouts Lib kernel32(ByVal hFile As Long,lpCommTimeouts AsCOMMTIMEOUTS)As LongDeclare Function GetCommTimeouts Lib kernel32(ByVal hFile As Long,lpCommTimeouts AsCOMMTIMEOUTS)As LongDeclare Function BuildCommDCB Lib kernel32 Alias BuildCommDCBA(ByVal l

25、pDef As String,lpDCB As DCB)As LongDeclare Function SetCommState Lib kernel32(ByVal hCommDev As Long,lpDCB As DCB)As LongDeclare Function CreateFile Lib kernel32 Alias CreateFileA(ByVal lpFileName As String,ByValdwDesiredAccess As Long,ByVal dwShareMode As Long,ByVal lpSecurityAttributes As Long,ByV

26、aldwCreationDisposition As Long,ByVal dwFlagsAndAttributes As Long,ByVal hTemplateFile As Long)AsLongDeclare Function FlushFileBuffers Lib kernel32(ByVal hFile As Long)As Long窗体模块程序如下:初始化串口Private Sub Form_Load()If Not Init_Com(COM1:,9600,n,8,1)ThenMsgBox 端口&无效!Exit SubEnd IfEnd Sub发送字符Private Sub B

27、TNSend_Click()If WriteCOM32(txt(2)&vbCr Len(txt(2)ThenMsgBox 写入错误Exit SubEnd IfEnd Sub向串口写数据Function WriteCOM32(COMString As String)As IntegerOn Error GoTo handelwritelptDim RetBytes As Long,LenVal As LongDim retval As LongIf Len(COMString)255 ThenWriteCOM32 Left$(COMString,255)WriteCOM32 Right$(COM

28、String,Len(COMString)-255)Exit FunctionEnd IfFor LenVal=0 To Len(COMString)-1bRead(LenVal)=Asc(Mid$(COMString,LenVal+1,1)Next LenValretval=WriteFile(ComNum,bRead(0),Len(COMString),RetBytes,0)WriteCOM32=RetByteshandelwritelpt:Exit FunctionEnd Function读取数据Private Sub TMRComm_Timer()Dim Ans As String,i

29、 As Integer,RtnStr As StringAns=ReadCommPure()If Ans=Then Exit SubRtnStr=RtnStr&CleanStr(Ans)txtRec.Text=RtnStrFlushCommEnd Sub从串口读取数据Function ReadCommPure()As StringOn Error GoTo handelpurecomDim RetBytes As Long,i As Integer,ReadStr As String,retval As LongDim CheckTotal As Integer,CheckDigitLC As

30、 Integerretval=ReadFile(ComNum,bRead(0),255,RetBytes,0)ReadStr=If(RetBytes 0)ThenFor i=0 To RetBytes-1ReadStr=ReadStr&Chr(bRead(i)Next iElseFlushCommEnd IfReadCommPure=ReadStrhandelpurecom:Exit FunctionEnd FunctionFunction CleanStr(TextLine As String)As StringDim i As Integer,RtnStr As StringRtnStr=

31、For i=1 To Len(TextLine)Select Case Asc(Mid$(TextLine,i,1)Case&H5DRtnStr=RtnStr&Case&H5BRtnStr=RtnStr&Case Is=&H30RtnStr=RtnStr&Mid$(TextLine,i,1)Case 13RtnStr=RtnStr&Case 10RtnStr=RtnStr&Case ElseRtnStr=RtnStr&End SelectNext iCleanStr=RtnStrEnd Function清空文件缓冲区Function FlushComm()FlushFileBuffers(Co

32、mNum)End Function初始化端口Function Init_Com(ComNumber As String,Comsettings As String)As BooleanOn Error GoTo handelinitcomDim ComSetup As DCB,Answer,Stat As COMSTAT,RetBytes As LongDim retval As LongDim CtimeOut As COMMTIMEOUTS,BarDCB As DCB 打开通讯口读/写(&HC0000000).必须指定存在的文件(3).ComNum=CreateFile(ComNumber

33、,&HC0000000,0,0&,&H3,0,0)If ComNum=-1 ThenMsgBox 端口&ComNumber&无效.请设置正确.,48Init_Com=FalseExit FunctionEnd If超时CtimeOut.ReadIntervalTimeout=20CtimeOut.ReadTotalTimeoutConstant=1CtimeOut.ReadTotalTimeoutMultiplier=1CtimeOut.WriteTotalTimeoutConstant=10CtimeOut.WriteTotalTimeoutMultiplier=1retval=SetCom

34、mTimeouts(ComNum,CtimeOut)If retval=-1 Thenretval=GetLastError()MsgBox 端口超时设定无效&ComNumber&错误:&retvalretval=CloseHandle(ComNum)Init_Com=FalseExit FunctionEnd Ifretval=BuildCommDCB(Comsettings,BarDCB)If retval=-1 Thenretval=GetLastError()MsgBox 无效设备 DCB 块&Comsettings&错误:&retvalretval=CloseHandle(ComNu

35、m)Init_Com=FalseExit FunctionEnd Ifretval=SetCommState(ComNum,BarDCB)If retval=-1 Thenretval=GetLastError()MsgBox 无效设备 DCB 块&Comsettings&错误:&retvalretval=CloseHandle(ComNum)Init_Com=FalseExit FunctionEnd IfInit_Com=Truehandelinitcom:Exit FunctionEnd Function关闭程序Private Sub BTNCloseCom_Click()Unload

36、MeEnd Sub关闭端口Private Sub Form_Unload(Cancel As Integer)CloseHandle(ComNum)End Sub4运行程序程序设计、调试完毕,执行菜单“运行/启动”命令或单击工具栏快捷按钮“启动”,运行程序。(1)首先在程序窗体中发送字符区输入要发送的字符,单击“发送数据”按钮,发送区的字符串通过 COM1 口发送出去。(2)另一台计算机发送数据,本计算机自动读入并显示在接收数据区中。程序运行界面如图 6-5 所示。图 6-5程序运行界面6.1.5.3利用 MSComm 控件实现 PC 双串口互通信如果一台计算机有两个串口,可通过串口线将两个串

37、口连接起来:COM1 端口的 TXD与 COM2 端口的 RXD 相连,COM1 端口的 RXD 与 COM2 端口的 TXD 相连,COM1 端口的 GND 与 COM2 端口的 GND 相连,如图 6-6(a)所示,这是串口通信设备之间的最简单连接(即三线连接),图中的 2 号接收脚与 3 号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可以发送也可以接收。COM159 COM21643827615438254382761979(a)(b)图 6-6串口设备最简单连接如果一台计算机只有一个串行通信端口可以使用,那么将第2 脚与第3 管脚短路,如图6-6(b)所示

38、,那么第3 脚的输出信号就会被传送到第 2 脚,用以发送到同一串行端口的输入缓冲区,程序只要再由相同的串行端口上作读取的操作,即可将数据读入,一样可以形成一个测试环境。设计的参考代码如下:串口初始化 串口 1 与串口 2 的通信参数应一致Private Sub Form_Load()MSComm1.CommPort=1 设置通信端口号为 COM1MSComm1.Settings=9600,n,8,1 设置串口 1 参数MSComm1.InputMode=0 接收文本型数据MSComm1.PortOpen=True 打开通信端口 1MSComm2.CommPort=2 设置通信端口号为 COM2

39、MSComm2.Settings=9600,n,8,1 设置串口 2 参数MSComm2.InputMode=0 接收文本型数据MSComm2.PortOpen=True 打开通信端口 2End Sub 把字符通过串口发送出去 启动定时器Private Sub Cmdsend_Click()MSComm1.Output=Trim(Textsend.Text)Timer1.Enabled=TrueEnd Sub 接收字符Private Sub Timer1_Timer()Dim buf$Timer1.Enabled=Falsebuf=Trim(MSComm2.Input)将缓冲区内的数据读入 b

40、uf 变量中If Len(buf)=0 Then 判断缓冲区内是否存在数据TextReceive.Text=ElseTextReceive.Text=bufEnd IfEnd Sub 停止程序运行Private Sub Cmdquit_Click()Unload MeEnd Sub 关闭通信端口,Private Sub Form_Unload(Cancel As Integer)MSComm1.PortOpen=FalseMSComm2.PortOpen=FalseEnd Sub程序运行界面如图 6-7 所示。图 6-7程序运行界面6.2PC 与单片机串口通信程序设计目前,在许多单片机应用系统

41、中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台。为便于查询和保存数据,还需要数据库的支持,这种应用的核心是数据通信,它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而单片机和上位机之间数据通信则是整个系统的基础。单片机和PC的通信是通过单片机的串口和PC 串口之间的硬件连接实现的。图 6-8单片机实验板图 6-8 是本设计使用的单片机实验板。有关单片机实验板的详细信息请查询电子开发网http:/ 与单片机串口通信程序实训目的(1)掌握 PC 与单片机串口通信的线路连接方法。(2)掌

42、握 PC 与单片机串口通信的 Keil C51 和 VB 程序设计方法。6.2.2PC 与单片机串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-4 所示。表 6-4序号1234PC(计算机)单片机实验板(AT89C51、MAX232 等)串口通信线(三线制)VB 6.0设计用软、硬件名称数量11116.2.3PC 与单片机串口通信程序硬件线路图线路说明,如图 6-9 所示,数据通信的硬件上采用三线制,将单片机和PC 串口的 3 个引脚(RXD、TXD、GND)分别连在一起,即将PC 和单片机的发送数据线TXD 与接收数据 RXD 交叉连接,两者的地线 GND 直接相连,而其他信号线

43、如握手信号线均不用,采用软件握手的方式,这样既可以实现预定的任务又可以简化电路设计。但由于单片机的 TTL 逻辑电平和 RS-232C 的电气特性完全不同,RS-232C 的逻辑 0 电平规定为+3+15V 之间,逻辑 1 电平为315V 之间,因此,在将 PC 和单片机的 RXD和 TXD 交叉连接时必须进行电平转换,这里使用的是MAX232 电平转换芯片。PC机MAX232RXDCOM1TXDGNDTOUTRINTINROUTTXDRXDGNDAT89C51图 6-9PC 与单片机串口通信线路单片机系统有 LED 显示器模块、继电器输出模块、蜂鸣器模块等。6.2.4设计任务利用 Keil

44、C51 和 VB 编写程序实现 PC 与单片机串口通信。任务要求。1设计任务 1PC 通过串行口将数字(00,01,02,03,FF,十六进制)发送给单片机,单片机收到后回传这个数字,PC 接收到回传数据后显示出来,若发送的数据和接收到的数据相等,则串行通信正确,否则有错误。启始符是数字00,结束符是数字 FF。2设计任务 2(1)测试通信状态。先在文本框中输入字符串“Hello”,单击“测试”按钮,将字符串“Hello”发送到单片机,若PC 与单片机通信正常,在PC 程序的文本框中显示字符串“OK!”;否则,显示字符串“ERROR!”。(2)循环计数。单击“开始”按钮,文本框中数字从 0 开

45、始累加,0、1、2、3,并将此数发送到单片机的显示器上显示。当累加到10时,回到0 重新开始累加,依次循环。任何时候,单击“停止”按钮,PC 程序中和单片机显示器都停止累加,再单击“开始”按钮,接着停下的数继续累加。(3)控制指示灯。在单片机继电器接线端子的两个通道上分别接上两个指示灯,在 PC 程序界面上选择指示灯号,如1 号灯,单击界面“打开”按钮,单片机上1 号灯亮,同时蜂鸣器响;单击界面“关闭”按钮,1 号灯灭,蜂鸣器停止响;同样控制2 号灯的亮灭(蜂鸣器同时动作)。6.2.5任务实现单片机和 PC 通信,在程序设计上涉及两个部分的内容。一是单片机的 C51 程序,二是 PC 的串口通

46、信程序和界面的编制。6.2.5.1利用 Keil C51 实现单片机与 PC 串口通信任务 1网络详细地址为:http:/www.china- VB 实现 PC 与单片机串口通信任务 11程序界面设计运行 VB,创建标准的工程项目文件,设计程序窗体。设计的程序界面如图6-11所示。(1)添加一个 MSComm 控件:默认的工具箱中没有MSComm串口通信控件,因此,首先要把它添加到工具箱中,再将MSComm控件添加到程序窗体上。(2)添加两个按钮控件CommandButton,用于发送数字和关闭程序。图 6-11程序窗体界面(3)添加一个框架控件 Frame,用于功能显示。(4)添加一个文本控

47、件TextBox,用于输入数字。(5)添加一个标签控件 Label,用于显示通信状态。2属性设置程序窗体、控件对象的主要属性设置如表6-5 所示。表 6-5控 件 类 型FormFrameTextBoxLabelCommandButtonCommandButtonMSComm网络详细地址为:http:/www.china- 要 属 性BorderStyle=3Caption=PC与单片机串口通信Caption=输入数据Text=0Caption=通信状态?Caption=发送Caption=关闭在程序中设置功能运行时窗体固定大小窗体标题栏显示程序名称测试功能区数据输入框显示串口通信状态发送数据

48、命令关闭程序命令串口参数设置6.2.5.3利用 Keil C51 实现单片机与 PC 串口通信任务 2(方法 1)网络详细地址为:http:/www.china- VB 实现 PC 与单片机串口通信任务 2(方法 1)1程序界面设计运行 VB,创建标准的工程项目文件,设计程序窗体。添加一个 MSComm 控件。默认的工具箱中没有MSComm 串口通信控件,因此,首先要把它添加到工具箱中,再将 MSComm控件添加到程序窗体上。为了实现连续的字符发送和循环计数,添加两个 Timer控件。为了功能分类,添加3 个 Frame 控件。为了选择指示灯号,添加两个OptionButton控件。图 6-1

49、3程序窗体界面 添加其他控件。两个文本控件TextBox,6 个按钮控件 CommandButton。设计的程序界面如图 6-13 所示。2属性设置程序窗体、控件对象的主要属性设置见表6-6。表 6-6控 件 类 型FormFrameFrame名称MainFormFrame1Frame2窗体、控件对象的主要属性设置主 要 属 性BorderStyle=3功能运行时窗体固定大小Caption=PC机与单片机串口通信 窗体标题栏显示程序名称Caption=测试通信状态Caption=循环计数Enabled=FalseCaption=控制指示灯Enabled=FalseText=HelloText=

50、0Caption=1 号灯Value=TrueCaption=2 号灯Caption=测试Caption=开始Caption=停止Caption=打开Caption=关闭Caption=退出在程序中设置Enabled=FalseInterval=1000测试功能区循环计数功能区初始不可用控制指示灯功能区初始不可用测试信息显示框循环计数显示框1 号指示灯,初始选择2 号指示灯测试单片机命令开始计数命令停止计数命令打开指定指示灯命令关闭指定指示灯命令关闭程序命令串口参数设置时钟初始不可用循环计数周期FrameTextBoxTextBoxOptionButtonOptionButtonCommand

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁