VB 串口通信程序设计典型实例

VB 串口通信程序设计典型实例
VB 串口通信程序设计典型实例

VB 串口通信程序设计典型实例
利用 VB 开发串口通信程序既可以使用 MSComm 控件也可以调用 Windows API 函数实 现。不过,只要 MSComm 控件可以被选用,我们推荐选择此控件实现,因为 MSComm 控 件的功能和 API 调用一样强,甚至比它还好且使用起来更加简单。 在本章提供的串口通信程序设计中,除了 PC 与 PC 串口通信外,PC 与单片机、PC 与 智能仪表、PC 与 PLC、PC 与 GSM 短信模块等串口通信任务的实现均采用 MSComm 控件。
6.1 PC 与 PC 串口通信程序设计
当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需 3 根线 (发送线、接收线、信号地线)便可实现全双工异步串行通信。 本设计通过两台 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 序 1 2 3 号 PC 或 IPC 串口通信线(三线制) Visual Basic 6.0 设计用软、硬件 名 称 数 2 1 1 量
6.1.3 PC 与 PC 串口通信程序硬件线路图
线路说明,在计算机通电前,按图 6-1 所示将两台 PC 通过串口线连接起来:计算机 A 串口 COM1 端口的 TXD 与计算机 B 串口 COM1 端口的 RXD 相连, 计算机 A 串口 COM1 端 口的 RXD 与计算机 B 串口 COM1 端口的 TXD 相连, 计算机 A 串口 COM1 端口的 GND 与 计算机 B 串口 COM1 端口的 GND 相连。

PC机A 计算机 A
PC机B 计算机 B
TXD COM1 RXD GND
TXD RXD GND COM1
图 6-1 PC 与 PC 串口通信线路
6.1.4 设计任务
利用 MSComm 控件和 VB API 函数编写程序实现 PC 与 PC 串口通信。 任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123” ,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123” ,单击“发 送字符”命令,信息返回到第一组的计算机。 实际上就是编写一个简单的双机聊天程序。
6.1.5 任务实现
6.1.5.1 利用 MSComm 控件实现字符型数据发送与接收
1.建立新工程 VB 使用“工程”来管理每一个应用程序要使用的所有文件,每建立一个新程序,就要 新建一个工程。一个工程由窗体、标准模块、控件及应用所需的开发环境设置等组成。 运行 VB 程序,出现“新建工程”对话框,选择“标准 EXE” ,单击“打开”命令按钮, 进入 VB 工程集成开发环境,窗体设计器中自动出现一个名为 Form1 的空白窗体。 2.程序界面设计 向空白窗体添加各种控件,以完成预定的各种功能。开始一个项目的设计时,VB 的工 具箱中会有许多默认的控件让设计者予以选用, 这些原本就出现在工具箱中的控件是内置控 件, 它提供了一些基本的系统设计组件给设计者, 但功能比较特别的控件就不会出现在其中, 如用来设计串口通信功能的控件 MSComm 就不在其中。 (1)添加串口通信控件 MSComm。 由于 VB 的串行通信组件并不会主动出现在工具箱里中, 当我们需要 MSComm 控件时, 首先要把它加入到工具箱中。 让 MSComm 控件出现在工具箱中的步骤如下。 选择“工程”菜单下的“部件…”子菜单,在弹出的“部件”对话框中,在“控件”选 项卡属性中选中“Microsoft Comm Control 6.0”复选框,单击“确定”按钮后,在工具箱中 就出现了一个形似“电话”的图标,它就是 MSComm 控件。 工具箱中有了 MSComm 控件,就可以选择 MSComm 控件的图标后将其添加到程序窗 体上,利用该控件编程,PC 就可以通过 VB 实现与串口设备 的串口通信了。 由于每个使用的 MSComm 控件对应着一个串行端口, 如 果应用程序需要访问多个串行端口,必须添加多个 MSComm
图 6-2
程序窗体界面

控件。 (2)为了实现连续的自动接收,将工具箱中的 Timer 控件添加到程序窗体上。 (3)添加两个文本框控件:Text1 和 Text2,用于输入要发送的字符和显示要接收的字 符。 (4)添加两个标签控件:Label1 和 Label2,作为发送和接收字符区的标签。 (5)添加一个按钮控件:Command1 执行发送字符命令。 程序设计界面如图 6-2 所示。 3.属性设置 从属性窗口设置属性时, 只需从对象列表框中选择待设置属性的对象, 然后从属性列表 的左列选择属性,最后在属性列表的右列中输入或选择新的属性值。 程序窗体、控件对象的主要属性设置如表 6-2 所示。
表 6-2 控 件 类 型 窗体、控件对象的主要属性设置 主 要 属 性 (名称) = COMForm Form BorderStyle = 3 Caption = PC 与 PC 串口通信 (名称) = Label1 Label Caption = 显示接收字符区: (名称) = Label2 Label Caption = 输入发送字符区: (名称) = Textsend TextBox MultiLine = True ScrollBars = 2-Vertical (名称) = TextReceive TextBox MultiLine = True ScrollBars = 2-Vertical (名称) = Cmdsend CommandButton Caption = 发送字符 (名称) = MSComm1 MSComm 其他属性在程序中设置 (名称) = Timer1 Timer Enabled = True Interval = 500 时钟控件 时钟初始可用 设置发送周期(ms) 标签文本 文本框控件 允许多行显示 垂直滚动条可用 文本框控件 允许多行显示 垂直滚动条可用 按钮控件 手动发送字符 串口通信控件 标签文本 标签控件 窗体控件 运行时窗体固定大小 窗体标题栏显示程序名称 标签控件 功 能
两台计算机中 VB 程序界面及属性设置应完全相同, 尤其 MSComm 控件的 InputMode 和 Settings 属性值应相同。

4.程序代码设计 程序要实现自动发送或读取,在 VB 程序中有两个方式可以达到,一是查询方式,利用 查询事件是否发生,当发生时,去执行默认的程序代码。可以使用计时器控件(Timer) ,该 控件属性中的 Interval 可以控制计时器被启动的时间间隔,当时间间隔一到,便会执行原先 放在计时器中的程序代码。 下面是利用查询方式编写的 PC 与 PC 串口通信的参考程序,代码如下所示:
' 串口初始化 Private Sub Form_Load() https://www.360docs.net/doc/0212040517.html,mPort = 1 ' 设置通信端口号为 COM1 MSComm1.Settings = "9600,n,8,1" ' 设置串口 1 参数 MSComm1.InputMode = 0 ' 接收文本型数据 MSComm1.PortOpen = True ' 打开通信端口 1 End Sub ' 把字符通过串口发送出去 Private Sub Cmdsend_Click() If Textsend.Text = "" Then pp = MsgBox("发送的数据不能为空!", 16) Exit Sub End If MSComm1.Output = Trim(Textsend.Text) For i = 1 To 20000000 Next i End 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 If End Sub ' 关闭通信端口,停止程序运行 Private Sub Cmdquit_Click() MSComm1.PortOpen = False Unload Me End Sub
在 Windows 系统环境下,串口是系统资源的一部分。应用程序要使用串口进行通信, 必须在使用之前向操作系统提出资源申请要求(打开串口) ,通信完成后必须释放资源(关 闭串口) 。在 Windows 系统的系统函数中,均包含了支持通信中断的功能。 二是使用事件方式。MSComm 控件提供事件回应功能,可以利用此功能达到自动发送/ 接收的目的。 下面是利用事件方式编写的 PC 与 PC 串口通信的参考程序, 界面设计与图 6-2 基本相同,区别是事件方式不需要时间控件。
'串口初始化 Private Sub Form_Load() https://www.360docs.net/doc/0212040517.html,mPort = 1 '设置通信端口号为 COM1 MSComm1.Settings = "9600,n,8,1" '设置串口参数 MSComm1.InputMode = 0 '接收文本型数据 MSComm1.RThreshold = 1 '接收缓冲区每收到一个字符都会使 MSComm 控件触发 OnComm 事件 MSComm1.PortOpen = True '打开通信端口 1 End Sub '把字符通过串口发送出去 '启动定时器 Private Sub Cmdsend_Click() If Textsend.Text = "" Then

pp = MsgBox("发送的数据不能为空!", 16) Exit Sub End If MSComm1.Output = Trim(Textsend.Text) End Sub 'MSComm 的 OnComm 事件程序 '由 CommEvent 属性值的不同,将各自的程序代码写入相关的子程序中 '只要 RThresold 中的设定字符数到达时便会使得 CommEvent 属性值变成 comEvReceive '因此接收的子程序便会被执行 Private Sub MSComm1_OnComm() Dim buf$ Select Case https://www.360docs.net/doc/0212040517.html,mEvent '通过取代每一个 case 表达式来处理每个事件与错误 Case comEvCD ' CD 线的状态发生变化 Case comEvCTS ' CTS 线的状态发生变化 Case comEvDSR ' DSR 线的状态发生变化 Case comEvReceive buf = Trim(MSComm1.Input) '将缓冲区内的数据读入 buf 变量中 Case comEvSend End Select TextReceive.Text = TextReceive.Text & buf End Sub '停止程序运行 Private Sub Cmdquit_Click() Unload Me End Sub '关闭通信端口, Private Sub Form_Unload(Cancel As Integer) MSComm1.PortOpen = False End Sub
5.运行程序 程序设计、调试完毕,单击工具栏快捷按钮“启动” ,运行程序。
两台计算机同时运行本程序。
首先在一台计算机程序窗体中发送字符区输入要发送的字符,如“我是第一组,收到请 回话!,单击“发送字符”按钮,发送区的字符串通过 COM1 口发送出去。 ” 如果联网通信的另一台计算机程序收到字符, 则返回字符串, “收到, 如 我是第 2 组!, ” 如果通信正常该字符串将显示在接收区中。 程序运行界面如图 6-3 所示。
图 6-3
程序运行界面
6.1.5.2
利用 API 函数实现字符型数据发送与接收

1.建立新工程 运行 VB,创,作为发送和接收字符区的标签。建标准的工程项目文件,设计程序窗体。 ① 添加两个 TextBox 控件,用于输入 要发送的字符和显示需接收的字符。 ② 添加两个 Label 控件 ③ 添加一个 Timer 控件,用于周期性 地读取串口数据。 ④ 添加两个 CommandButton 控件, 分 别执行发送字符、关闭程序等命令。 设计的程序界面如图 6-4 所示。 2.属性设置 程序窗体、控件对象的主要属性设置如表 6-3 所示。
表 6-3 控 件 类 型 Form Label Label TextBox 名 称 窗体、控件对象的主要属性设置 主 要 属 性 BorderStyle = 3 COMForm Label1 Label2 Textsend ScrollBars = 2-Vertical MultiLine = True TextBox CommandButton CommandButton Timer TextReceive ScrollBars = 2-Vertical BTNSend BTNCloseCom TMRComm Caption = 发送数据 Caption = 关闭程序 Interval = 500 Caption = API 串口通讯 Caption =发送数据区: Caption =接收数据区: MultiLine = True 功 能 图 6-4 程序窗体界面
运行时窗体固定大小 窗体标题栏显示程序名称 标签 标签 允许多行显示 垂直滚动条可用 允许多行显示 垂直滚动条可用 手动间断发送字符 关闭程序 设置发送周期(ms)
3.程序代码设计
' 在程序标准模块 SerialPort.bas 的说明部分放置使用的 API 函数声明及所用的结构、常数的声明: Option Explicit Global ComNum As Long Global bRead(255) As Byte Type COMSTAT fCtsHold As Long fDsrHold As Long fRlsdHold As Long fXoffHold As Long fXoffSent As Long fEof As Long fTxim As Long fReserved As Long cbInQue As Long cbOutQue As Long

End Type Type COMMTIMEOUTS ReadIntervalTimeout As Long ReadTotalTimeoutMultiplier As Long ReadTotalTimeoutConstant As Long WriteTotalTimeoutMultiplier As Long WriteTotalTimeoutConstant As Long End Type Type DCB DCBlength As Long BaudRate As Long fBinary As Long fParity As Long fOutxCtsFlow As Long fOutxDsrFlow As Long fDtrControl As Long fDsrSensitivity As Long fTXContinueOnXoff As Long fOutX As Long fInX As Long fErrorChar As Long fNull As Long fRtsControl As Long fAbortOnError As Long fDummy2 As Long wReserved As Integer XonLim As Integer XoffLim As Integer ByteSize As Byte Parity As Byte StopBits As Byte XonChar As Byte XoffChar As Byte ErrorChar As Byte EofChar As Byte EvtChar As Byte End Type Type OVERLAPPED Internal As Long InternalHigh As Long offset As Long OffsetHigh As Long hEvent As Long End Type Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Declare Function GetLastError Lib "kernel32" () As Long Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long Declare Function SetCommTimeouts Lib "kernel32" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long Declare Function GetCommTimeouts Lib "kernel32" (ByVal hFile As Long, lpCommTimeouts As

COMMTIMEOUTS) As Long Declare Function BuildCommDCB Lib "kernel32" Alias "BuildCommDCBA" (ByVal lpDef As String, lpDCB As DCB) As Long Declare Function SetCommState Lib "kernel32" (ByVal hCommDev As Long, lpDCB As DCB) As Long Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long
窗体模块程序如下:
'初始化串口 Private Sub Form_Load() If Not Init_Com("COM1:", "9600,n,8,1") Then MsgBox "端口" & " 无效!" Exit Sub End If End Sub '发送字符 Private Sub BTNSend_Click() If WriteCOM32(txt(2)) & vbCr <> Len(txt(2)) Then MsgBox "写入错误" Exit Sub End If End Sub '向串口写数据 Function WriteCOM32(COMString As String) As Integer On Error GoTo handelwritelpt Dim RetBytes As Long, LenVal As Long Dim retval As Long If Len(COMString) > 255 Then WriteCOM32 Left$(COMString, 255) WriteCOM32 Right$(COMString, Len(COMString) - 255) Exit Function End If For LenVal = 0 To Len(COMString) - 1 bRead(LenVal) = Asc(Mid$(COMString, LenVal + 1, 1)) Next LenVal retval = WriteFile(ComNum, bRead(0), Len(COMString), RetBytes, 0) WriteCOM32 = RetBytes handelwritelpt: Exit Function End Function '读取数据 Private Sub TMRComm_Timer() Dim Ans As String, i As Integer, RtnStr As String Ans = ReadCommPure() If Ans = "" Then Exit Sub RtnStr = RtnStr & CleanStr(Ans) txtRec.Text = RtnStr FlushComm End Sub '从串口读取数据 Function ReadCommPure() As String On Error GoTo handelpurecom Dim RetBytes As Long, i As Integer, ReadStr As String, retval As Long Dim CheckTotal As Integer, CheckDigitLC As Integer retval = ReadFile(ComNum, bRead(0), 255, RetBytes, 0) ReadStr = ""

If (RetBytes > 0) Then For i = 0 To RetBytes - 1 ReadStr = ReadStr & Chr(bRead(i)) Next i Else FlushComm End If ReadCommPure = ReadStr handelpurecom: Exit Function End Function Function CleanStr(TextLine As String) As String Dim i As Integer, RtnStr As String RtnStr = "" For i = 1 To Len(TextLine) Select Case Asc(Mid$(TextLine, i, 1)) Case &H5D RtnStr = RtnStr & "" Case &H5B RtnStr = RtnStr & "" Case Is >= &H30 RtnStr = RtnStr & Mid$(TextLine, i, 1) Case 13 RtnStr = RtnStr & "" Case 10 RtnStr = RtnStr & "" Case Else RtnStr = RtnStr & "@" End Select Next i CleanStr = RtnStr End Function '清空文件缓冲区 Function FlushComm() FlushFileBuffers (ComNum) End Function '初始化端口 Function Init_Com(ComNumber As String, Comsettings As String) As Boolean On Error GoTo handelinitcom Dim ComSetup As DCB, Answer, Stat As COMSTAT, RetBytes As Long Dim retval As Long Dim CtimeOut As COMMTIMEOUTS, BarDCB As DCB ' 打开通讯口读/写(&HC0000000). ' 必须指定存在的文件 (3). ComNum = CreateFile(ComNumber, &HC0000000, 0, 0&, &H3, 0, 0) If ComNum = -1 Then MsgBox "端口 " & ComNumber & "无效. 请设置正确.", 48 Init_Com = False Exit Function End If '超时 CtimeOut.ReadIntervalTimeout = 20 CtimeOut.ReadTotalTimeoutConstant = 1 CtimeOut.ReadTotalTimeoutMultiplier = 1 CtimeOut.WriteTotalTimeoutConstant = 10 CtimeOut.WriteTotalTimeoutMultiplier = 1 retval = SetCommTimeouts(ComNum, CtimeOut) If retval = -1 Then

retval = GetLastError() MsgBox "端口超时设定无效 " & ComNumber & " 错误: " & retval retval = CloseHandle(ComNum) Init_Com = False Exit Function End If retval = BuildCommDCB(Comsettings, BarDCB) If retval = -1 Then retval = GetLastError() MsgBox "无效设备 DCB 块 " & Comsettings & " 错误: " & retval retval = CloseHandle(ComNum) Init_Com = False Exit Function End If retval = SetCommState(ComNum, BarDCB) If retval = -1 Then retval = GetLastError() MsgBox "无效设备 DCB 块 " & Comsettings & " 错误: " & retval retval = CloseHandle(ComNum) Init_Com = False Exit Function End If Init_Com = True handelinitcom: Exit Function End Function '关闭程序 Private Sub BTNCloseCom_Click() Unload Me End Sub '关闭端口 Private Sub Form_Unload(Cancel As Integer) CloseHandle (ComNum) End Sub
4.运行程序 程序设计、调试完毕,执行菜单“运行/ 启动”命令或单击工具栏快捷按钮“启动” , 运行程序。 (1)首先在程序窗体中发送字符区输入 要发送的字符,单击“发送数据”按钮,发 送区的字符串通过 COM1 口发送出去。 (2)另一台计算机发送数据,本计算机 自动读入并显示在接收数据区中。 程序运行界面如图 6-5 所示。
图 6-5
程序运行界面
6.1.5.3
利用 MSComm 控件实现 PC 双串口互通信
如果一台计算机有两个串口,可通过串口线将两个串口连接起来:COM1 端口的 TXD 与 COM2 端口的 RXD 相连,COM1 端口的 RXD 与 COM2 端口的 TXD 相连,COM1 端口 的 GND 与 COM2 端口的 GND 相连,如图 6-6(a)所示,这是串口通信设备之间的最简单 连接(即三线连接) ,图中的 2 号接收脚与 3 号发送脚交叉连接是因为在直连方式时,把通 信双方都当作数据终端设备看待,双方都可以发送也可以接收。

COM1 5 4 3 2 1 5 4 3 2
COM2 1 5 4 3 2 1
9
8
7
6
9
8
7
6
9
8
7
6
(a)
(b)
图 6-6
串口设备最简单连接
如果一台计算机只有一个串行通信端口可以使用, 那么将第 2 脚与第 3 管脚短路, 如图 6-6 (b)所示,那么第 3 脚的输出信号就会被传送到第 2 脚,用以发送到同一串行端口的输入缓冲 区,程序只要再由相同的串行端口上作读取的操作,即可将数据读入,一样可以形成一个测试 环境。 设计的参考代码如下:
' 串口初始化 ' 串口 1 与串口 2 的通信参数应一致 Private Sub Form_Load() https://www.360docs.net/doc/0212040517.html,mPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.InputMode = 0 MSComm1.PortOpen = True https://www.360docs.net/doc/0212040517.html,mPort = 2 MSComm2.Settings = "9600,n,8,1" MSComm2.InputMode = 0 MSComm2.PortOpen = True End Sub ' 把字符通过串口发送出去 ' 启动定时器 Private Sub Cmdsend_Click() MSComm1.Output = Trim(Textsend.Text) Timer1.Enabled = True End Sub ' 接收字符 Private Sub Timer1_Timer() Dim buf$ Timer1.Enabled = False buf = Trim(MSComm2.Input) If Len(buf) = 0 Then TextReceive.Text = "" Else TextReceive.Text = buf End If End Sub ' 停止程序运行 Private Sub Cmdquit_Click() Unload Me End Sub ' 关闭通信端口, Private Sub Form_Unload(Cancel As Integer) MSComm1.PortOpen = False MSComm2.PortOpen = False End Sub
' ' ' ' ' ' ' '
设置通信端口号为 COM1 设置串口 1 参数 接收文本型数据 打开通信端口 1 设置通信端口号为 COM2 设置串口 2 参数 接收文本型数据 打开通信端口 2
' 将缓冲区内的数据读入 buf 变量中 ' 判断缓冲区内是否存在数据
程序运行界面如图 6-7 所示。

图 6-7
程序运行界面

6.2 PC 与单片机串口通信程序设计
目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机 往往只负责数据的采集和通信, 而上位机通常以基于图形界面的 Windows 系统为操作平台。 为便于查询和保存数据,还需要数据库的支持,这种 应用的核心是数据通信, 它包括单片机和上位机之间、 客户端和服务器之间以及客户端和客户端之间的通 信,而单片机和上位机之间数据通信则是整个系统的 基础。 单片机和 PC 的通信是通过单片机的串口和 PC 串 口之间的硬件连接实现的。 图 6-8 单片机实验板 图 6-8 是本设计使用的单片机实验板。有关单片 机实验板的详细信息请查询电子开发网 https://www.360docs.net/doc/0212040517.html,/。
6.2.1 PC 与单片机串口通信程序实训目的
(1)掌握 PC 与单片机串口通信的线路连接方法。 (2)掌握 PC 与单片机串口通信的 Keil C51 和 VB 程序设计方法。
6.2.2 PC 与单片机串口通信程序设计用软、硬件
本设计用到的硬件和软件清单如表 6-4 所示。
表 6-4 序 1 2 3 4 号 PC(计算机) 单片机实验板(AT89C51、MAX232 等) 串口通信线(三线制) VB 6.0 设计用软、硬件 名 称 数 1 1 1 1 量
6.2.3 PC 与单片机串口通信程序硬件线路图
线路说明,如图 6-9 所示,数据通信的硬件上采用三线制,将单片机和 PC 串口的 3 个 引脚(RXD、TXD、GND)分别连在一起,即将 PC 和单片机的发送数据线 TXD 与接收数 据 RXD 交叉连接,两者的地线 GND 直接相连,而其他信号线如握手信号线均不用,采用 软件握手的方式,这样既可以实现预定的任务又可以简化电路设计。 但由于单片机的 TTL 逻辑电平和 RS-232C 的电气特性完全不同,RS-232C 的逻辑 0 电 平规定为+3~+15V 之间,逻辑 1 电平为?3~?15V 之间,因此,在将 PC 和单片机的 RXD 和 TXD 交叉连接时必须进行电平转换,这里使用的是 MAX232 电平转换芯片。

PC机
MAX232 RXD COM1 TXD GND TOUT RIN TIN ROUT TXD RXD GND AT89C51
图 6-9 PC 与单片机串口通信线路
单片机系统有 LED 显示器模块、继电器输出模块、蜂鸣器模块等。
6.2.4 设计任务
利用 Keil C51 和 VB 编写程序实现 PC 与单片机串口通信。任务要求。 1.设计任务 1 PC 通过串行口将数字(00,01,02,03…,FF,十六进制)发送给单片机,单片机收 到后回传这个数字,PC 接收到回传数据后显示出来,若发送的数据和接收到的数据相等, 则串行通信正确,否则有错误。启始符是数字 00,结束符是数字 FF。 2.设计任务 2 (1)测试通信状态。 先在文本框中输入字符串“Hello” ,单击“测试”按钮,将字符串“Hello”发送到单片 机,若 PC 与单片机通信正常,在 PC 程序的文本框中显示字符串“OK!” ;否则,显示字符 串“ERROR!” 。 (2)循环计数。 单击“开始”按钮,文本框中数字从 0 开始累加,0、1、2、3……,并将此数发送到单片 机的显示器上显示。当累加到 10 时,回到 0 重新开始累加,依次循环。任何时候,单击“停止” 按钮,PC 程序中和单片机显示器都停止累加,再单击“开始”按钮,接着停下的数继续累加。 (3)控制指示灯。 在单片机继电器接线端子的两个通道上分别接上两个指示灯, PC 程序界面上选择指 在 示灯号,如 1 号灯,单击界面“打开”按钮,单片机上 1 号灯亮,同时蜂鸣器响;单击界面 “关闭”按钮,1 号灯灭,蜂鸣器停止响;同样控制 2 号灯的亮灭(蜂鸣器同时动作) 。
6.2.5 任务实现
单片机和 PC 通信,在程序设计上涉及两个部分的内容。 一是单片机的 C51 程序,二是 PC 的串口通信程序和界面的编制。
6.2.5.1
利用 Keil C51 实现单片机与 PC 串口通信任务 1
网络详细地址为:https://www.360docs.net/doc/0212040517.html,/51161。
6.2.5.2
利用 VB 实现 PC 与单片机串口通信任务 1

1.程序界面设计 运行 VB,创建标准的工程项目文件,设计程序窗体。设计的程序界面如图 6-11 所示。 (1)添加一个 MSComm 控件:默认的工具箱中没有 MSComm 串口通信控件,因此,首先要把它添加到工具箱 中,再将 MSComm 控件添加到程序窗体上。 (2) 添加两个按钮控件 CommandButton, 用于发送数 字和关闭程序。 图 6-11 程序窗体界面 (3)添加一个框架控件 Frame,用于功能显示。 (4)添加一个文本控件 TextBox,用于输入数字。 (5)添加一个标签控件 Label,用于显示通信状态。 2.属性设置 程序窗体、控件对象的主要属性设置如表 6-5 所示。
表 6-5 控 件 类 型 Form Frame TextBox Label CommandButton CommandButton MSComm 名 称 窗体、控件对象的主要属性设置 主 要 属 性 BorderStyle = 3 MainForm Frame1 numText Label1 Cmdsend Cmdquit MSComm1 Caption = PC 与单片机串口通信 Caption = 输入数据 Text = 0 Caption = 通信状态? Caption = 发送 Caption = 关闭 在程序中设置 功 能
运行时窗体固定大小 窗体标题栏显示程序名称 测试功能区 数据输入框 显示串口通信状态 发送数据命令 关闭程序命令 串口参数设置
网络详细地址为:https://www.360docs.net/doc/0212040517.html,/51161。
6.2.5.3
利用 Keil C51 实现单片机与 PC 串口通信任务 2(方法 1)
网络详细地址为:https://www.360docs.net/doc/0212040517.html,/51161。
6.2.5.4
利用 VB 实现 PC 与单片机串口通信任务 2(方法 1)
1.程序界面设计 运行 VB,创建标准的工程项目文件,设计程序窗体。 ① 添加一个 MSComm 控件。默认的工具箱中没有 MSComm 串口通信控件,因此,首 先要把它添加到工具箱中, 再将 MSComm 控件添加到 程序窗体上。 ② 为了实现连续的字符发送和循环计数, 添加两 个 Timer 控件。 ③ 为了功能分类,添加 3 个 Frame 控件。 ④ 为了选择指示灯号, 添加两个 OptionButton 控件。
图 6-13
程序窗体界面

⑤ 添加其他控件。两个文本控件 TextBox,6 个按钮控件 CommandButton。 设计的程序界面如图 6-13 所示。 2.属性设置 程序窗体、控件对象的主要属性设置见表 6-6。
表 6-6 控 件 类 型 Form Frame Frame 名 称 窗体、控件对象的主要属性设置 主 要 属 性 BorderStyle = 3 MainForm Frame1 Frame2 Enabled = False Caption = 控制指示灯 Frame TextBox TextBox OptionButton OptionButton CommandButton CommandButton CommandButton CommandButton CommandButton CommandButton MSComm Timer Frame3 Enabled = False ReturnText NumText Option1 Value = True Option2 CmdTest CmdStart CmdStop CmdOpen CmdClose Cmdquit MSComm1 Timer1 Interval = 1000 Caption = 2 号灯 Caption = 测试 Caption = 开始 Caption = 停止 Caption = 打开 Caption = 关闭 Caption = 退出 在程序中设置 Enabled = False 2 号指示灯 测试单片机命令 开始计数命令 停止计数命令 打开指定指示灯命令 关闭指定指示灯命令 关闭程序命令 串口参数设置 时钟初始不可用 循环计数周期 Text = Hello Text = 0 Caption = 1 号灯 Caption = PC 机与单片机串口通信 Caption = 测试通信状态 Caption = 循环计数 功 能
运行时窗体固定大小 窗体标题栏显示程序名称 测试功能区 循环计数功能区 初始不可用 控制指示灯功能区 初始不可用 测试信息显示框 循环计数显示框 1 号指示灯,初始选择
3.编写程序代码 以下是实现 PC 与单片机串口通信任务 2(方法 1)的参考程序:
网络详细地址为:https://www.360docs.net/doc/0212040517.html,/51161。
6.2.5.5
利用 Keil C51 实现单片机与 PC 串口通信任务 2(方法 2)
以下是完成单片机与 PC 串口通信任务 2(方法 2)的 C51 参考程序:
网络详细地址为:https://www.360docs.net/doc/0212040517.html,/51161。

6.2.5.6
利用 VB 实现 PC 与单片机串口通信任务 2(方法 2)
程序界面设计如同方法 1,如图 6-13 所示。 以下是实现 PC 与单片机串口通信任务 2(方法 1)的参考程序: '网络详细地址为:https://www.360docs.net/doc/0212040517.html,/51161。
6.3
PC 与智能仪器串口通信程序设计
目前仪器仪表的智能化程度越来越高,大量的智能仪器都配备了 RS-232 通信接口,并 提供了相应的通信协议,能够将测试、采集的数据传输给计算 机等设备,以便进行大量数据的储存、处理、查询和分析。图 6-15 是某型号智能仪器示意图。 通常个人计算机(PC)或工控机(IPC)是智能仪器上位 机的最佳选择,因为 PC 或 IPC 不仅能解决智能仪器(作为下 位机)所不能解决的问题,如数值运算、曲线显示、数据查询、 图 6-15 智能仪器示意图 报表打印等;而且具有丰富和强大的软件开发环境。
6.3.1 PC 与智能仪器串口通信程序设计目的
(1)掌握 PC 与智能仪器串口通信的线路连接方法。 (2)掌握 PC 与智能仪器串口通信的 VB 程序设计方法。
6.3.2 PC 与智能仪器串口通信程序设计用软、硬件
本设计用到的硬件和软件清单如表 6-7 所示。
表 6-7 序 1 2 3 4 5 6 号 PC(计算机) XMT-3000A 型智能仪表(需配置 RS-232 通信,上、下限报警继电器, DC24V 电源等模块) 串口通信线(三线制) 热电阻传感器(Cu50) 指示灯(DC24V) Visual Basic 6.0 设计用软、硬件 名 称 数 1 1 1 1 2 1 量
6.3.3 PC 与智能仪器串口通信程序硬件线路图
1.线路说明 观察所用计算机主机箱后 RS-232C 串口的数量、位置和几何特征;查看计算机与智能

仪器的串口连接线及其端口。 在计算机与智能仪器通电前,按图 6-16 所示将传感器 Cu50、上、下限报警指示灯与 XMT-3000A 智能仪器连接。
PC PC机
COM1 TXD RXD GND 3 2 5 RS232 14 15 16 常开 20 21 ALM2
L2
+ 24
25 -
RXD TXD GND
DC24V
XMT-3000A
2 3 4 9 10 常开 AC220V Cu50 L1 ALM1 12 13
图 6-16 PC 与智能仪表串口通信线路
通过串口线将计算机与智能仪器连接起来:智能仪器的 14 端子(RXD)与计算机串口 COM1 的 3 脚 (TXD) 相连, 智能仪器的 15 端子 (TXD) 与计算机串口 COM1 的 2 脚 (RXD) 相连,智能仪器的 16 端子(GND)与计算机串口 COM1 的 5 脚(GND)相连。
连接仪器与计算机串口线时,仪器与计算机严禁通电,否则极易烧毁串口。
2.XMT-3000A 智能仪器的参数设置 XMT-3000A 智能仪器在使用前应对其输入/输出参数进行正确设置,设置好的仪器才能 投入正常使用。关于 XMT-3000A 智能仪器的通信协议参见第 5.6.2 节。 请按表 6-8 所示设置仪器的主要参数。
表 6-8 参 数 仪器的主要参数设置 参 数 含 义 上限绝对值报警值 下限绝对值报警值 输入规格 小数点位置 仪器功能定义 通信地址 通信波特率 30 20 传感器为:Cu50,则 Sn=20 要求显示一位小数,则 diP=1 ALP =10 1 4800 设 置 值
HiAL LoAL Sn diP ALP Addr bAud
有关 XMT-3000A 智能仪表的详细信息请查询网站 https://www.360docs.net/doc/0212040517.html,/。

6.3.4 设计任务
编写 VB 程序实现 PC 与智能仪表串口通信。任务要求。 (1)自动连续读取并显示智能仪器温度测量值(十进制) 。 (2)统计测量温度的平均值、最大值、最小值等。 (3)绘制温度实时变化曲线。
6.3.5 任务实现
网络详细地址为:https://www.360docs.net/doc/0212040517.html,/51161。
6.4 PC 与 PLC 串口通信程序设计
可编程序逻辑控制器(简称 PLC)主要是为现场控制而设计的,其人机界面主要是开 关、按钮、指示灯等。其良好的适应性和可扩展能力而得到越来越广泛的应用。采用 PLC 的控制系统或装置具有可靠性高、易于控制、系统设计灵活、能模拟现场调试、编程使用简 单、性价比高、有良好的抗干扰能力等特点。但是,PLC 也有不易显示各种实时图表/曲线 (趋势线)和汉字、无良好的用户界面、不便于监控等缺陷。 二十世纪 90 年代后,许多的 PLC 都配备有计算机通信接口,通过总线将一台或多台 PLC 相连接。 计算机作为上位机可以提供良好的人机界面, 进行系统的监控和管理, 进行程序编制、 参数设定和修改、 数据采集等,既能保证系统性能,又能使系统操作简便, 便于生产过程的有效监督。而 PLC 作为下位机,执行可靠 有效的分散控制。用一台计算机(上位机)去监控下位机 (PLC) ,这就要求 PC 与 PLC 之间稳定、可靠的数据通信。 图 6-19 PLC 产品示意图 图 6-19 是某型号 PLC 示意图。

6.4.1 PC 与 PLC 串口通信程序设计目的
(1)掌握 PC 与 PLC 串口通信的线路连接方法。 (2)掌握 PC 与 PLC 串口通信的 VB 程序设计方法。
6.4.2 PC 与 PLC 串口通信程序设计用软、硬件
本设计用到的硬件和软件清单如表 6-10 所示。
表 6-10 序 1 2 3 4 5 6 7 号 PC(计算机) PLC(西门子:S7-200,CPU224) PLC(三菱:FX2N-32MR) SC-09 编程电缆,PC/PPI 电缆 开关,指示灯(DC24V) 直流电源(OUT:DC24V) Visual Basic 6.0 设计用软、硬件 名 称 数 1 1 1 各1 各 10 1 1 量
6.4.3 PC 与 PLC 串口通信程序设计硬件线路图
线路说明:西门子 S7-200PLC 系统为用户提供了灵活的通信功能。集成在 S7-200 中的点 对点接口(PPI)可用普通的双绞线作波特率高达 9600bit/s 的数据通信,用 RS-485 接口实现高 速用户可编程接口,可使用专用位通信协议(如 ASCII)做波特率高达 38.4 kbit/s 的高速通信并 可按步调整。而 PC 的接口为 RS-232,两者之间需要进行电平转换。利用西门子公司的 PC/PPI 电缆, 可将 S7-200CPU 与计算机连接起来组成 PC/PPI 网络, 实现点对点通信,如图 6-20 所示。
+ DC24V PC 1L 0.0 0.1 0.2 2L 0.4 0.5 0.6 3L 0.7 1.0 1.1 N S7-200 PLC RS232 COM1 PC/PPI RS485 编程口 DC24V 1M 0.0 0.1 0.2 0.3 0.4 2M 1.0 1.1 1.2 1.3 M L+ L1 AC220V
图 6-20 PC 与 S7-200PLC 串口通信线路
FX2N 型 PLC 可以通过自身的编程口和 PC 通信,也可以通过通信口和 PC 通信。通过 编程口,PC 只能和一台 PLC 通信,实现对 PLC 中软元件的间接访问(每个软元件具有惟 一的地址映射) ;通过通信口,一台 PC 可以和多台 PLC 通信,并实现对 PLC 中软元件的直 接访问,两者使用不同的通信协议。PC 通过 FX2N 的编程口构成的二级控制系统如图 6-21 所示,按钮、行程开关等的常开触点接 PLC 开关量输入 1 通道,PLC 开关量输出 1 通道接

vb程序设计的几个简单例子

Option Explicit Private Sub Command1_Click() Dim i%, j%, r! i = Val(Text1.Text) j = Val(Text2.Text) Picture1.Print i; j; Call gysh(i, j) Picture1.Print "最大公约数是" & i r = Val(InputBox("输入半径")) Call S(r) End Sub Public Function gysh(m As Integer, n As Integer) As Integer Dim t% Do t = m Mod n: m = n: n = t Loop While t <> 0 End Function Public function S(r!) Const pi = 3.1415926 S = pi * r ^ 2 MsgBox "圆面积为:" & S End function Public Function 定积分() End Function

Dim a() As Integer, i%, j%, n%, t% Private Sub Command1_Click() Picture1.Print "排序前的数组为:" n = V al(InputBox("请输入一个3到100的整数")) ReDim a(1 To n) Randomize For i = 1 To n a(i) = Int(Rnd * 100) + 1 Picture1.Print Tab(((i - 1) Mod 5) * 6); a(i); Next i End Sub Private Sub Command2_Click() Picture1.Print Picture1.Print "排序后的数组为:" For i = 1 To n - 1 For j = i + 1 To n If a(i) > a(j) Then t = a(i) a(i) = a(j) a(j) = t End If Next Next For i = 1 To n Picture1.Print Tab(((i - 1) Mod 5) * 6); a(i); Next End Sub

完整word版,VB程序设计例题12例

索引 一、在窗体上画一个文本框,其名称为Text1,Text属性为空白。再画一个命令按钮,其名称为C1,Visible属性为False。编写适当的事件过程。程序运行后,如果在文本框中输入字符,则命令按钮出现。 二、计算圆的周长和面积:在窗体中添加一个文本框(Text1)和一个对应的标签(Label1),再添加两个命令按钮(Command1和Command2)和一个图片框(Picture1)。程序运行时,当单击Command1按钮后,计算圆的周长;当单击Command2按钮后,计算圆的面积;计算结果输出在图片框中。(要求在未输入半径前两个按钮呈灰色不可用。) 三、在窗体上添加三个文本框和对应的三个标签,标签的标题分别是“个位”、“十位”、“百位”。程序运行时,当单击窗体后,随机产生一个【100,999】区间内的整数,将它的个位、十位、百位数字分别显示在对应的文本框中。 四、设计一个计算程序:在窗体上添加四个文本框和四个对应的标签,标签的标题分别是“语文”、“数学”、“外语”、“平均成绩”,三个命令按钮,标题分别为“清除”、“计算”、“退出”。程序运行后,用户按“清除”按钮,则清除文本框中显示的内容,按“计算”按钮,则计算三科平均成绩,将计算结果显示在第四个文本框中(计算结果保留小数点后一位)。单击退出按钮则程序退出。 五、某税务部门征收所得税,规定如下:(1)收入200元以内,免征。(2)收入在200~400元,超过200元的部分纳税3%。(3)收入超过400元的部分,纳税4%。(4)当收入达5000元或超过时,将4%税金改为5%。编程序实现上述操作。 六、给定三角形的三条边的边长,计算三角形的面积。编写程序,首选判断给出的三条边能否构成三角形,如可以构成,则计算并输出该三角形的面积,否则要求重新输入。当输入-1时结束程序。 七、编程求100以内的全部素数。 八、编程打印钻石图案。 九、输出杨辉三角形。 十、有一个数组,包含了10个不同的随机整数(20~90),要求计算出它们的平均值,并输出这个数组中最接近于平均值的数。 十一、在一个窗体上建有包含三个命令按钮的控件数组和一个文体框。编程实现当按下标题不同的命令按钮时,使文体框中文字的字体发生相应的变化。 十二、编程求1000以内的完全数。所谓完全数是指这样的自然数:它的各个约数(不包括该数本身)。如28=1+2+4+7+14就是一个完全数。

vb程序设计实例

vb程序设计实例 2009-5-22 15:37 提问者:淘淘的某在|悬赏分:20 |浏览次数:1688次 编写程序,设银行定期存款的年利率为:1年期2.25%,2年期2.43%,3年期为2.70%,5年期为2.88%(不记复利)。今有X元,5年以后使用,共有如下6中存法: ①存一次5年期; ②存一次3年期,一次2年期; ③存一次3年期,两次1年期; ④存两次2年期,一次1年期; ⑤存一次2年期,三次1年期; ⑥存五次1年期. 分别计算各种存法5年后到期的本息合计,如图所示 2009-5-22 17:06 最佳答案 Private Sub Form_Activate() '1年期2.25%,2年期2.43%,3年期为2.70%,5年期为2.88%(不记复利)。今有X元,5年以后使用,共有如下6中存法: Const x1 As Double = 0.0225, x2 As Double = 0.0243, x3 As Double = 0.027, x5 As Double = 0.0288 Dim x As Double x = Val(InputBox("")) Print "①存一次5年期,5年后到期的本息合计"; ss(x, 5, x5) Print "②存一次3年期,一次2年期,5年后到期的本息合计"; ss(ss(x, 3, x3), 2, x2) Print "③存一次3年期,两次1年期,5年后到期的本息合计"; ss(ss(ss(x, 3, x3), 1, x1), 1, x1) Print "④存两次2年期,一次1年期,5年后到期的本息合计"; ss(ss(ss(x, 2, x2), 2, x2), 1, x1) Print "⑤存一次2年期,三次1年期,5年后到期的本息合计"; ss(ss(ss(ss(x, 2, x2), 1, x1), 1, x1), 1, x1) Print "⑥存五次1年期,5年后到期的本息合计"; ss(ss(ss(ss(ss(x, 1, x1), 1, x1), 1, x1), 1, x1), 1, x1) End Sub Private Function ss(ByVal a As Double, b As Integer, c As Double) As Double ss = a + a * c * b End Function Private Sub Form_Load()

VB程序设计例题程序改错程序填空程序设计

'以下程序段用于输出杨辉三角:结果样式如图1 ' Private Sub Form_Click() Const n = 10 Dim arr(n, n) As Integer For I = 1 To n arr(I, I) = 1 '**********SPACE********** 【arr(I, 1) = 1】 Next I For I = 3 To n For j = 2 To I - 1 '**********SPACE********** arr(i, j) =arr(i-1,j-1)+arr(i-1,j) Next j Next I For I = 1 To n For j = 1 To I '**********SPACE********** 【print arr(I,j)】 Next j Print Next I End Sub Option Explicit '------------------------------------------------ '【程序改错】 '------------------------------------------------ '题目:用自定义函数的方法求sum(x),求当-1≤x≤1时,' sum(x)=x/2!+x^2/3!+x^3/4!+……+x^n/(n+1)!, ' 当x〉1或x〈-1时,函数值为0。当n〈=0时,输入数' 据错误。X、N都是由用户输入。 '------------------------------------------------ '注意:不可增加或删除程序行,也不可以更改程序结构 '------------------------------------------------ Private Sub Command1_Click() Dim s As Single Dim n As Integer, x As Single, k As Integer n = Val(InputBox("Please input a integer value:"))

VB可视化程序设计实例——小时钟

VB可视化程序设计实例——小时钟 本例专门针对程序设计初学者而设计,尤其适合第一次接触VB的学生学习。通过用VB来设计如图3.39所示的时钟程序,初步感受一下可视化和面向对象的程序设计过程。 图3.39 时钟程序运行效果 小时钟程序中包含窗体控件、标签控件和计时器控件等3个控件。窗体控件是小时钟程序运行时的窗口,标题栏上的标题是“时钟”,在右上角有最小化、最大化和关闭按钮。标签控件可以用来显示文本,本例中用来显示时间,如“9:48:57”。计时器控件每秒一次把计算机的当前系统时间显示到标签控件中,使得小时钟不停地运行。Array启动VB,首先显示“新建工程”对话框(图3.40),在选择“新建”选项卡中的“标 准EXE”项后,单击“打开”按钮,进入VB编程环境,如图3.41所示。 图3.40 “新建工程”对话框

图3.41 VB 可视化编程环境 除了标题栏、菜单栏和标准工具栏外,编程环境中还有工具箱、窗体和属性等窗口。 双击工具箱(图3.42)中的标签控件,在窗体Form1中放置可以显示文本信息的标签控件Label1,见图3.43。时钟的时、分和秒以后就显示在Label1中。拖曳Label1可以移动它,拖曳它的八个控制点,可以改变它的大小。 图3.42 工具箱 图3.43 label1控件 图3.44 计时器控件 双击工具箱中的计时器控件,在窗体Form1中放置计时器控件Timer1,见图3.44。计时器控件以一定的时间周期,调用一个事件。计时器控件只有在设计阶段出现在窗体上,程序运行时是不可见的,它的位置和大小无关紧要。 到目前为止,已经建立了窗体Form1、标签控件Label1和计时器控件Timer1等3个对象。下面,将设置它们的属性。 窗体窗口

vb程序设计教程第四版课后答案.doc

vb 程序设计教程第四版课后答案【篇一:visual_basic 程序设计教程(第4 版)_课后答案】 >第一章习题参考答案 一、填空题 1、对象事件驱动 2、编译运行模式解释运行模式 二、简答题 1、简述vb 的特点。 答:①可视化的程序设计方法 ②面向对象的程序设计思想 ③事件驱动的编程机制 ④结构化的程序设计语言 ⑤高度的可扩充性 ⑥强大的数据库访问能力 ⑦支持动态数据交换 ⑧支持对象链接与嵌入 2、简述vb 的安装过程。 答:①向光驱中放入vb 安装光盘; ②计算机将运行自动安装程序,若没有,执行vb 目录下的 setup.exe ;③根据提示逐一回答问题,并点击“下一步”; ④点击“完成”; 2、如何启动vb 。 答:三种方法: ①单击“开始”按钮,选择“程序”菜单下的“microsoft visual basic 6.0 中文版”菜单项并单击; ②双击桌面上的vb6.0 快捷图标; ③在“开始”菜单的运行对话框中输入命令来启动vb ; 第二章习题参考答案 一、选择题: 1-10 、dcacdbcbbc 11-20 、badcabbaab 21-29 、aacbbcddc 二、填空题 1.窗体、控件

2.属性值 3.属性窗口设置、代码窗口设置 4.事件过程 5.对象名、下划线、事件名 6.form_click 第三章习题参考答案 一、选择题 1、b 2、c 3 、a4、b5、a6、c 7、c 二、填空题 1、11 字符型、字节型、整型、长整型、单精度型、双精度型、货币型、 逻辑型、日期型、对象型、变体型。string 、byte 、integer 、long 、single 、double 、currency 、boolean 、date 、object 、variant 2、双引号(英文)、# 3、ascii 、1、2 4、public 、通用、dim 、static 、private 、static 5、、+、+ 6、now() 、time 、日期型 三、解答题 1、(3) 2 、(1 ) 3、(1)常量(关键字)(2)字符型常量(3)逻辑型常量(4)变量(5)字符串常量(6)变量 (7)字符串常量(8)变量(9)日期型常量(题目应是 #11/16/1999# ) (10)数值型常量(单精度) 4、31 5、(1)(1+y/x)/(1-y/x) (2)x^3+3*x*y/(2-y) (3)sqr(abs(a*b-c^3)) (4)sqr(s*(s-a)*(s-b)*(s-c)) 6、 7、(1)13 (2)17 (3)#1999-11-12# (4)zxy123abc 8、(1)19(2)8.16666666666667 (3)5.25(4)2 9、(1)-4 (2)2 . 82842712474619 (3)-3(4)49 (5)”hello (”6)he

VB编程实例精讲(150例)

ExcelVBA编程实例(150例) 主要内容和特点 《ExcelVBA编程入门范例》主要是以一些基础而简短的VBA实例来对ExcelV BA中的常用对象及其属性和方法进行讲解,包括应用程序对象、窗口、工作簿、工作表、单元格和单元格区域、图表、数据透视表、形状、控件、菜单和工具栏、帮助助手、格式化操作、文件操作、以及常用方法和函数及技巧等方面的应用。这些例子都比较基础,很容易理解,因而,很容易调试并得以实现,让您通过具体的实例来熟悉ExcelVBA编程。 ■分16章共14个专题,以具体实例来对大多数常用的ExcelVBA对象进行讲解; ■一般而言,每个实例都很简短,用来说明使用VBA实现Excel某一功能的操作; ■各章内容主要是实例,即VBA代码,配以简短的说明,有些例子可能配以必要的图片,以便于理解; ■您可以对这些实例进行扩充或组合,以实现您想要的功能或更复杂的操作。VBE编辑器及VBA代码输入和调试的基本知识 在学习这些实例的过程中,最好自已动手将它们输入到VBE编辑器中调试运行,来查看它们的结果。当然,您可以偷赖,将它们复制/粘贴到代码编辑窗口后,进行调试运行。下面,对VBE编辑器界面进行介绍,并对VBA代码输入和调试的基本知识进行简单的讲解。 激活VBE编辑器 一般可以使用以下三种方式来打开VBE编辑器: ■使用工作表菜单“工具——宏——Visual Basic编辑器”命令,如图00-01所示;■在Visual Basic工具栏上,按“Visual Basic编辑器”按钮,如图00-02所示;■按Alt+F11组合键。

图00-01:选择菜单“工具——宏——Visual Basic编辑器”命令来打开VBE编辑器 图00-02:选择Visual Basic工具栏上的“Visual Basic编辑器”命令按钮来打开VBE编辑器 此外,您也可以使用下面三种方式打开VBE编辑器: ■在任一工作表标签上单击鼠标右键,在弹出的菜单中选择“查看代码”,则可进入VBE编辑器访问该工作表的代码模块,如图00-03所示; ■在工作簿窗口左上角的Excel图标上单击鼠标右键,在弹出的菜单中选择“查看代码”,则可进入VBE编辑器访问活动工作簿的ThisWorkbook代码模块,如图00-04所示; ■选择菜单“工具——宏——宏”命令打开宏对话框,若该工作簿中有宏程序,则单击该对话框中的“编辑”按钮即可进行VBE编辑器代码模块,如图00-05所示。

VB6.0图文实例教程

VB教程:序言-不再游戏我们需要什么 我们需要什么?当我们在一个精彩的游戏世界中游历了一番之后,或是惊叹于某一工具软件的小巧精致之余,多少总会产生些许编程的冲动。编程吗,在以前如果你对电脑还是一个门外汉,那实在是一件可望而不可及的事情。如果运用基于DOS下的编程语言,譬如C、Qbasic、Pascal等等,真不知何年何月才能有所成就。 编程是需要天赋的,你必须在大脑中对整个程序有一个清晰的轮廓,一个高效的流程,这并不是每个人都能做到的,你必须思之慎之,这也使编程变成一件最枯燥无味的事情。但在第四代计算机语言(可视化编程)出现后,可以确切的说它开发了人们的更多天赋,并不局限于那些头脑异常清晰的人,每一个人都可以发现自己也可以编出一些从前不敢问津的程序,想象力的充分发挥才是第四代语言的精粹。 Visual Basic(以下简称VB)可以说是可视化语言的先驱了,而且它也是可视化程度最高的一个,从几年前VB诞生之日起到现在,它已经经历了五个版本,而且现在微软正在紧张的进行着VB6.0的研制、测试,这么高的更新率,不外乎说明两个问题:用户对VB的热衷,微软对VB的重视。不可否认微软对市场的预测能力是极为高明的,而它强大的技术、财力支持也使它在许多以前未进入的领域,在

不长的时间内有成为最有力的竞争对手,如IE之于浏览器领域,《帝国时代》之于游戏都是最好的例证。对于VB现在也有一个很强的竞争对手――Delphi,有人把它称作VB杀手,这显然有偏激之处,VB的确有它的不足之处,但Delphi又何尝不是呢,而且以微软对VB的倾心,VB的功能必然会越来越强大。 VB的诞生 VB的出现可以说是Microsoft Windows的日渐成熟的必然产物。Microsoft Windows为程序员和最终用户提供了一个共同的人机界面。对用户,Windows提供了一个图形鼠标的操作环境,该环境对所有的应用程序都一样;对于程序员,Windows提供了一组预定义工具----称之为Microsoft Windows 的软件开发工具箱(SDK),该工具能使程序员建立一个与Windows界面相同的应用程序,而且,程序员不必关心最终用户的硬件配臵情况。在这一开发环境中,程序员唯一困难的是Microsoft SDK提供了六百多个函数和与其一致的事件驱 动(event-driven)编程技术。两种新方法的交叉使众多的程序员重新陷入困境,程序员不仅要掌握程序驱动编程技术和六百多个函数的功能,而且还得用C语言描述这些问题。因此一般情况下,程序员首先要掌握C程序设计技术,而后再开始学习SDK。这样的条件下就要求在Microsoft多任务环境下出现一种操作方便,使用简单的新工具----Visual Basic由此诞生。 何为可视

vb程序设计经典例题

VB程序设计期末模拟试题及答案 《VB》期末复习题及答案 综合复习题 一、填空题 1.创建一个VB应用程序三个主要的步骤是_创建应用程序界面_、_设置属性_和_编写代码_。 2.当程序运行时,要求窗体中的文本框呈现空白,则在设计时,应当在此文本框的_属性__窗口中,把此文本框的_text_属性设置成空白。 3.Label和TextBox控件用来显示和输入文本,如果仅需要让应用程序在窗体中显示文本信息,可使用__Label___控件;若允许用户输入文本,则应使用 _TextBox__控件。 4.窗体的常用方法有__Load方法__、_show方法_、 Hide方法__和_Unload方法_。 5.要想在代码中给名为txtshow的文本框赋予文本:GOOD WORK ,应当编写的语句是_Txtshow.Text="GOOD WORK"_。 6.若命令按钮的名称为Cmdopen,程序要求单击该命令按钮时,打开一个窗口frm1,请对以下事件过程填空。 Private Sub Cmdopen_ Click()___ __Frm1.show__ End Sub 7.Visual Basic 6种类型的表达式是_数算表达式____、__字符串表达式_、__关系表达式__、 __布尔表达式__、___日期表达式__、___对象表达式_。Visual Basic根据表达式的__运算符_来确定表达式的类型。 8.表达式93 \ 7 Mod 2 ^ 2 的值是______1_____。 9.已知a=3,b=4,c=5,表达式a>b and Not c>a Or c>b And ca And Not b

VB程序设计教程(第四版)课后答案

VB课后习题答案 第一章习题参考答案 一、填空题 1、对象事件驱动 2、编译运行模式解释运行模式 二、简答题 1、简述VB的特点。 答:①可视化的程序设计方法 ②面向对象的程序设计思想 ③事件驱动的编程机制 ④结构化的程序设计语言 ⑤高度的可扩充性 ⑥强大的数据库访问能力 ⑦支持动态数据交换 ⑧支持对象链接与嵌入 2、简述VB的安装过程。 答:①向光驱中放入VB安装光盘; ②计算机将运行自动安装程序,若没有,执行VB目录下的Setup.exe; ③根据提示逐一回答问题,并点击“下一步”; ④点击“完成”; 2、如何启动VB。 答:三种方法:

①单击“开始”按钮,选择“程序”菜单下的“Microsoft Visual Basic 6.0 中文版”菜单项并单击; ②双击桌面上的VB6.0快捷图标; ③在“开始”菜单的运行对话框中输入命令来启动VB; 第二章习题参考答案 一、选择题: 1-10、 DCACD BCBBC 11-20、BADCA BBAAB 21-29、AACBB CDDC 二、填空题 1.窗体、控件 2.属性值 3.属性窗口设置、代码窗口设置 4.事件过程 5.对象名、下划线、事件名 6. Form_Click 第三章习题参考答案 一、选择题

1、B 2、C 3、A 4、B 5、A 6、C 7、C 二、填空题 1、 11 字符型、字节型、整型、长整型、单精度型、双精度型、货币型、逻辑型、日期型、对象型、变体型。String、Byte、Integer、Long、Single、Double、Currency、Boolean 、Date、Object、Variant 2、双引号(英文)、# 3、 ASCII、1、2 4、 public、通用、Dim、Static、Private、Static 5、 &、+、+ 6、 Now()、Time、日期型 三、解答题 1、(3) 2、(1 ) 3、(1)常量(关键字)(2)字符型常量(3)逻辑型常量(4)变量(5)字符串常量(6)变量 (7)字符串常量(8)变量(9)日期型常量(题目应是#11/16/1999#)(10)数值型常量(单精度) 4、31 5、(1)(1+y/x)/(1-y/x) (2)x^3+3*x*y/(2-y) (3)sqr(abs(a*b-c^3)) (4)sqr(s*(s-a)*(s-b)*(s-c)) 6、

VB程序设计题库(全)

VB程序设计练习题 第一题、 题目:(事件)单击窗体 (响应)求50以内所有偶数的和,并在窗体上输出来。 将结果存入变量S中。 代码:Dim I As Integer For i = 2 To 50 If (i Mod 2)=0 Then S=s+i End If Next Print (CStr(s)) 第二题 题目:(事件)双击窗体 (响应)求s=1+1*2+1*2*3+….+1*2*3*….*10并将结果存入变量S中代码:Dim i,j As Integer Dim k As Long k=1 s=0 For i =1To 10 For j=1 To i k=k*j Next s=s+k k=1 Next Print(CStr(s)) 第三题 题目:(事件)单击窗体 (响应)求100以内偶数的和,并将结果输出在窗体上。 将结果存入变量SUM中 代码:Dim i As Integer For i =1 To 100 If i Mod 2 =0 Then Sum=sum+i End If Next Print sum 第四题题目:(事件)单击窗体 (响应)编写程序求10*11*12+11*12*13+….+15*16*17的结果并将结果输出到窗体上。将结果存入变量M中。 代码:Dim i,j As Integer Dim s As Long For i =10 To 15 s=1 For j = i To i +2 s=s*j Next m=m+s Next Print (CStr(m)) 第五题 题目:(事件)双击窗体 (响应)求100以内奇数的和,并将结果输出在窗体上。 将结果存入变量SUM中。 代码:Dim i As Integer For i=1 To 100 If i Mod 2 = 1 Then sum = sum + i End If Next Print sum 第六题 题目:(事件)单击窗体 (响应)已知S=1+1/4+1/9+1/16+1/25+…+1/100, 结果输出在窗体上 代码:Dim s As Single For i=1 To 10 a=i*i Sum =1/a + Sum Next Print Sum 第八题 题目:(事件)单击窗体 (响应)求1—1/2+1/3—1/4+….+1/99—1/100的值。 将结果存入变量J中 代码:Dim j As Single

VB程序设计教程课后答案

习题一 习题二 .对象指现实世界中的实体。每个对象有自己的特征(属性)、行为(方法)和发生在该对象上的活动(事件)。 类是对同一种对象的集合与抽象。类包含所创建对象的属性数据,以及对这些数据进行操作的方法。封装和隐藏是类的重要特性,将数据结构和对数据的操作封装在一起,类的内部实现细节对用户来说是透明的。 VB工具箱中的可视图标是VB系统设计好的标准控件类。通过将控件类实例化,得到真正的控件对象。在窗体上画一个控件,就将类转换为对象,创建了一个控件对象。 VB中常用的对象是控件。此外,VB还提供了系统对象。窗体是个特例,它既是类也是对象。当向一个工程添加一个新窗体时,实质就由窗体类创建了一个窗体对象。 对象的三要素:属性、事件和方法。 属性:存放对象的数据(决定对象外观及功能)对象属性的设置方法:在设计阶段,利用属性窗口直接设置属性值;程序运行时,通过语句[对象名.]属性名=属性值。若属性只能在设计阶段设置,在程序运行阶段不可改变,称为只读属性。 事件:发生在对象上的事情。同一事件,对不同的对象,会引发不同的反应。 事件过程:应用程序处理事件的步骤。应用程序设计的主要工作就是为对象编写事件过程的代码。 方法:面向对象的程序设计语言,为程序设计人员提供了一种特殊的过程和函数。方法是面向对象的,调用时一定要指明对象。 2.窗体和控件具有的基本属性“ (1) Name属性:名称 所创建的对象名称,在程序中引用。 (2) Caption属性:标题 该属性决定了对象上显示的内容。 (3) Height、Width、Top和Left属性 决定对象的大小和位置。 (4) Enabled 属性:对象是否允许操作 (5) Visible 属性:对象是否可见 (6) Font 属性组:文本的外观 FontName字体、FontSize大小 FontBold粗体、FontItalic斜体 FontStrikethru 删除线 FontUnderline 下划线 (7) ForeColor属性:前景颜色 (8) BackColor属性:背景颜色 (9) MousePointer属性:鼠标指针类型, 设置值范围0~15,由系统指定。若为99,由用户提供的图形文件定义鼠标指针形状。 (10) MouseIcon属性:在MousePointer属性值为99时,存放自定义的鼠标图标文件(.ico 或.cur)。图标库在Graphics目录下。 3.窗体的事件:Load事件是在窗体被装入工作区时触发的事件。当应用程序启动,自动执行该事件,该事件通常用来在启动应用程序时对属性和变量进行初始化。

VB最简单实例入门教程

VB最简单实例入门教程 目录 (提示:按ctrl,并单击鼠标,可以跳到相应页) 1.1 1 我们需要什么 (3) 1.2 2 第二章:事件、属性及数据类型 (3) 1.3 3 第三章:VB语言 (6) 1.4 4-1第四章按钮(一) (12) 1.5 4- 第四章按钮(二) (19) 1.6 5 第五章菜单 (27) 1.7 6-1第六章输入(一) (34) 1.8 6-2第六章输入(二) (42) 1.9 6-3第六章输入(三) (52) 1.10 7第七章输出 (59) 附录 (63) 2.1 VB教程 (63)

1.1 1 我们需要什么 我们需要什么?当我们在一个精彩的游戏世界中游历了一番之后,或是惊叹于某一工具软件的小巧精致之余,多少总会产生些许编程的冲动。编程吗,在以前如果你对电脑还是一个门外汉,那实在是一件可望而不可及的事情。如果运用基于DOS下的编程语言,譬如C、Qbasic、Pascal等等,真不知何年何月才能有所成就。 编程是需要天赋的,你必须在大脑中对整个程序有一个清晰的轮廓,一个高效的流程,这并不是每个人都能做到的,你必须思之慎之,这也使编程变成一件最枯燥无味的事情。但在第四代计算机语言(可视化编程)出现后,可以确切的说它开发了人们的更多天赋,并不局限于那些头脑异常清晰的人,每一个人都可以发现自己也可以编出一些从前不敢问津的程序,想象力的充分发挥才是第四代语言的精粹。 Visual Basic(以下简称VB)可以说是可视化语言的先驱了,而且它也是可视化程度最高的一个,从几年前VB诞生之日起到现在,它已经经历了五个版本,而且现在微软正在紧张的进行着VB6.0的研制、测试,这么高的更新率,不外乎说明两个问题:用户对VB的热衷,微软对VB的重视。不可否认微软对市场的预测能力是极为高明的,而它强大的技术、财力支持也使它在许多以前未进入的领域,在不长的时间内有成为最有力的竞争对手,如IE之于浏览器领域,《帝国时代》之于游戏都是最好的例证。对于VB现在也有一个很强的竞争对手――Delphi,有人把它称作VB杀手,这显然有偏激之处,VB的确有它的不足之处,但Delphi 又何尝不是呢,而且以微软对VB的倾心,VB的功能必然会越来越强大。 VB的诞生 VB的出现可以说是Microsoft Windows的日渐成熟的必然产物。Microsoft Windows为程序员和最终用户提供了一个共同的人机界面。对用户,Windows提供了一个图形鼠标的操作环境,该环境对所有的应用程序都一样;对于程序员,Windows提供了一组预定义工具----称之为Microsoft Windows 的软件开发工具箱(SDK),该工具能使程序员建立一个与Windows界面相同的应用程序,而且,程序员不必关心最终用户的硬件配置情况。在这一开发环境中,程序员唯一困难的是Microsoft SDK提供了六百多个函数和与其一致的事件驱动(event-driven)编程技术。两种新方法的交叉使众多的程序员重新陷入困境,程序员不仅要掌握程序驱动编程技术和六百多个函数的功能,而且还得用C语言描述这些问题。因此一般情况下,程序员首先要掌握C程序设计技术,而后再开始学习SDK。这样的条件下就要求在Microsoft多任务环境下出现一种操作方便,使用简单的新工具----Visual Basic由此诞生。 何为可视 英文Visual的意思是“视觉的”,“可视的Baisc”这个名字可能抽象了点,但实际上它却是最直观的编程方法,之所以叫做“可视”,你只要看到VB的界面就会明白,实际上你无需编程,就可以完成许多步骤。在VB中引入了控件的概念,在Windows中控件的身影无处不在,各种各样的按钮、文本框、无线钮,都是控件的种类,VB把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法。这样你就可以象在画板上一样,随意点几下鼠标,一个按钮就完成了,这些在以前的编程语言下是要经过相当复杂的工作的。

一个简单VB程序设计过程

VB 程序设计过程

程序设计——编程人员使用程序设计语言设计一个计算机程序。 【引例】简单VB程序设计实例。功能要求:单击←、→、↑、↓中的任何一个命令按钮,红色小球就会向相应方向移动一定距离。

1、分析问题 根据程序的功能要求,可见程序必须具有以下具体功能。 (1)程序必须能够接收程序用户输入的小球移动方向,即原始数据输入。本例使用4个“命令按钮”向程序用户提供给方向数据输入平台。 (2)当程序用户输入一个方向数据后,程序必须能够立即自动计算小球新的位臵,即数据处理。本例对于4个不同的移动方向分别计算新的位臵数据。 (3)程序必须能够向程序用户展示小球的移动效果,即输出结果数据。本例使用一个红色小球图形向程序用户实时展示移动效果。

2、建立一个VB应用程序工程 启动VB6.0 IDE后会弹出“新建工程”对话框,在“新建” 选项卡中选择“标准.EXE”图标,单击“打开”命令按钮,或双击“标准.EXE”图标,即可新建一个默认名为“工程1” 的应用程序设计工程项目。 ?【问1-3-3】什么是工程? 【答1-3-3】用来建造VB应用 程序的设计文件集合。

在新建一个工程时后,VB6.0 IDE会根据设计内容自动建立一系列设计文件。 第一个设计文件就是VB6.0 IDE 自动新建一个默认名为“Form1”的窗体对象,这个窗体对象就是程序界面的设计平台。

在命令行操作系统下运行应用程序(例如DOS),程序用户需要在按照操作系统规则输入相应的命令行使用应用程序。 在图形界面操作系统(例如Windows)下运行应用程序,程序用户使用鼠标和键盘通过对图形界面的操作使用应用程序。可见,应用程序用户图形界面(简称程序界面)是用户使用应用程序的一个图形化控制平台,程序界面的设计是设计Windows应用程序的基础。 【设计程序界面的方法】使用VB6.0 IDE工具箱中提供的控件类,在窗体对象上创建需要的控件对象。

小时候经典游戏用VB编的编写实例教程大全全!

这些游戏以前玩过吧,快下载看它们 是怎么编写的! 目录: ·编写趣味撞球小游戏 ·用VB6.0设计简易赛车游戏 ·Visual Basic小游戏:猜英雄 ·VB游戏写作技巧(1)秀图篇 ·VB游戏写作技巧(2)网络篇 ·VB 贪吃蛇单人版游戏(一) ·VB 贪吃蛇单人版游戏(二) ·VB 贪吃蛇单人版游戏(三) ·VB 贪吃蛇单人版游戏(四) ·用VB开发即时战略游戏 正文: 编写趣味撞球小游戏 文章来源:沐风经典文章作者:佚名 Visual Basic是一个功能强大的工具,它有一大特点就是易学易用,下面我们就通过写一个“趣味撞球”的程序来初步体会一下。 首先启动VB5,新建一个标准的EXE工程。此时可以看到,工程包括一个Form1框体。在Form1边框的右下角按住鼠标左键不放,拖动鼠标把Form1的面积改为适当大小,比如6930×4320。再在属性框中把Form1的ScaleMode 属性改为3-Pixel,表明我们将以像素为我们的坐标计算单位,把Form1的StartUpPosition 属性设为2-CenterScreen,使运行时窗体出现在屏幕正中。 现在,在控件面板上选取CommandButton(命令按钮)控件,为Form1添加Command1和Command2两个按钮控件,把它们的大小设为121×25,再在属性框中把Command1的Caption填为“&GO”,把Command2的Caption填为“&QUIT”,并把Command1放到框体的右上角,把Command2放到框体的右下角。 然后,在控件面板上选取Timer(时钟)控件,为Form1添加一个Timer1时钟控件。再在属性框中把它的Enabled属性改为False,Interval属性改为50,前一个值表示该时钟控

VB程序设计经典案例

'------------------------------------------------- '【程序设计】 '------------------------------------------------- '题目:(事件)单击窗体。 ' (响应)我国现有人口为13亿,设年增长率为1%,' 计算多少年后增加到20亿。并将结果输出' 在窗体上。将结果存入变量year中。 ' 使用do while ...loop语句完成程序。 '------------------------------------------------- Private Sub Form_Click() Dim year As Integer, sum As Single '***************** Begin ************** Dim p as double Dim r as single P=1300000000 r=0.01 Do while p<2000000000 P=p+p*r n=n+1 Loop Print “n=”,n Year=n '*************** End ************************* '------------------------------------------------- '题目:(事件)单击窗体。 ' (响应)求从100到1000之间所有是3的倍数的数之' 和,当和大于3000时,停止计算并输出和。请将结果输' 出到窗体上,并存入所给变量SUM中。使用for...next语 ' 句完成程序 '------------------------------------------------- Private Sub Form_Click() Dim sum As Integer '***************** Begin ************** sum = 0 Dim i As Integer For i = 100 To 1000 If i Mod 3 = 0 Then sum = sum + i If sum > 3000 Then Exit For End If

相关文档
最新文档