VB串口调试软件的运行界面如下:
源码工程资料包:
vb源程序如下:
- VERSION 5.00
- Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "mscomm32.ocx"
- Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "ComDlg32.OCX"
- Begin VB.Form 串口调试软件
- BackColor = &H0091CACA&
- BorderStyle = 1 'Fixed Single
- Caption = "串口调试软件V1.0"
- ClientHeight = 6360
- ClientLeft = 4020
- ClientTop = 3120
- ClientWidth = 10815
- FillColor = &H0091CACA&
- ForeColor = &H0091CACA&
- Icon = "串口调试助手.frx":0000
- LinkTopic = "Form1"
- MaxButton = 0 'False
- Picture = "串口调试助手.frx":030A
- ScaleHeight = 6360
- ScaleWidth = 10815
- Begin MSComDlg.CommonDialog CommonDialog1
- Left = 8160
- Top = 5880
- _ExtentX = 847
- _ExtentY = 847
- _Version = 393216
- Filter = "文本文件(*.txt)|*.txt"
- End
- Begin VB.Timer TmrNowTime
- Interval = 1000
- Left = 1320
- Top = 4320
- End
- Begin VB.Timer TmrAutoSend
- Left = 7680
- Top = 5880
- End
- Begin MSCommLib.MSComm MSComm
- Left = 7080
- Top = 5760
- _ExtentX = 1005
- _ExtentY = 1005
- _Version = 393216
- DTREnable = -1 'True
- End
- Begin VB.PictureBox Picture1
- BackColor = &H00E0E0E0&
- Height = 500
- Left = 9360
- Picture = "串口调试助手.frx":3EEC
- ScaleHeight = 435
- ScaleWidth = 435
- TabIndex = 43
- Top = 5850
- Width = 500
- End
- Begin VB.TextBox TxtAutoSendTime
- Height = 300
- Left = 1320
- TabIndex = 41
- Text = "1000"
- Top = 5730
- Width = 660
- End
- Begin VB.CommandButton CmdAmend
- Appearance = 0 'Flat
- Caption = "更改"
- Height = 300
- Left = 1250
- TabIndex = 37
- Top = 3450
- Width = 505
- End
- Begin VB.CommandButton CmdSaveDisp
- Appearance = 0 'Flat
- Caption = "保存显示数据"
- Height = 300
- Left = 30
- TabIndex = 36
- Top = 3450
- Width = 1225
- End
- Begin VB.CommandButton CmdHelp
- Caption = "关于"
- Height = 300
- Left = 8760
- TabIndex = 21
- Top = 6050
- Width = 505
- End
- Begin VB.CommandButton CmdQuit
- Caption = "关闭程序"
- Height = 495
- Left = 9900
- TabIndex = 20
- Top = 5820
- Width = 870
- End
- Begin VB.CommandButton CmdClearCounter
- Caption = "计数清零"
- Height = 300
- Left = 6100
- TabIndex = 19
- Top = 6080
- Width = 865
- End
- Begin VB.CommandButton CmdSendFile
- Caption = "发送文件"
- Height = 280
- Left = 5580
- TabIndex = 18
- Top = 5700
- Width = 900
- End
- Begin VB.TextBox TxtSendPath
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Height = 270
- Left = 3800
- TabIndex = 17
- Text = "还没有选择文件"
- Top = 5740
- Width = 1700
- End
- Begin VB.CommandButton CmdSelectFile
- Caption = "选择发送文件"
- Height = 280
- Left = 2520
- TabIndex = 16
- Top = 5700
- Width = 1225
- End
- Begin VB.TextBox TxtTXCount
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Height = 270
- Left = 4680
- TabIndex = 15
- Text = "TX:0"
- Top = 6080
- Width = 1340
- End
- Begin VB.TextBox TxtRXCount
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Height = 270
- Left = 3340
- TabIndex = 14
- Text = "RX:0"
- Top = 6080
- Width = 1350
- End
- Begin VB.TextBox TxtStatus
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Height = 270
- Left = 260
- TabIndex = 13
- Top = 6080
- Width = 3100
- End
- Begin VB.CheckBox ChkAutoSend
- BackColor = &H0091CACA&
- Caption = "Check4"
- Height = 255
- Left = 30
- TabIndex = 12
- Top = 5480
- Width = 255
- End
- Begin VB.CheckBox ChkHexSend
- BackColor = &H0091CACA&
- Caption = "Check3"
- Height = 255
- Left = 30
- TabIndex = 11
- Top = 5160
- Width = 255
- End
- Begin VB.CommandButton CmdSend
- Caption = "手动发送"
- Height = 300
- Left = 1590
- TabIndex = 10
- Top = 5160
- Width = 870
- End
- Begin VB.CommandButton CmdClearSend
- Caption = "清空重填"
- Height = 300
- Left = 100
- TabIndex = 9
- Top = 4850
- Width = 870
- End
- Begin VB.TextBox TxtSend
- Height = 865
- Left = 2560
- MultiLine = -1 'True
- ScrollBars = 2 'Vertical
- TabIndex = 8
- Top = 4820
- Width = 8225
- End
- Begin VB.TextBox TxtSavePath
- BackColor = &H0091CACA&
- Height = 270
- Left = 60
- TabIndex = 7
- Text = "C:\COMDATA"
- Top = 3760
- Width = 1650
- End
- Begin VB.CheckBox ChkHexReceive
- BackColor = &H0091CACA&
- Caption = "Check2"
- Height = 255
- Left = 50
- TabIndex = 6
- Top = 3100
- Width = 255
- End
- Begin VB.CheckBox ChkAutoClear
- BackColor = &H0091CACA&
- Caption = "Check1"
- Height = 255
- Left = 50
- TabIndex = 5
- Top = 2850
- Width = 255
- End
- Begin VB.CommandButton CmdStopdisp
- Caption = "停止显示"
- Height = 310
- Left = 30
- TabIndex = 4
- Top = 2520
- Width = 1050
- End
- Begin VB.CommandButton CmdClearReceive
- Caption = "清空接收区"
- Height = 310
- Left = 30
- TabIndex = 3
- Top = 2190
- Width = 1050
- End
- Begin VB.Frame Frame1
- BackColor = &H0091CACA&
- Height = 2200
- Left = 0
- TabIndex = 2
- Top = -100
- Width = 1650
- Begin VB.ComboBox CboStopbit
- Height = 300
- ItemData = "串口调试助手.frx":7ACE
- Left = 750
- List = "串口调试助手.frx":7ADB
- TabIndex = 26
- Text = "1"
- Top = 1300
- Width = 800
- End
- Begin VB.ComboBox CboDatabit
- Height = 300
- ItemData = "串口调试助手.frx":7AEA
- Left = 750
- List = "串口调试助手.frx":7AFA
- TabIndex = 25
- Text = "8"
- Top = 1000
- Width = 800
- End
- Begin VB.ComboBox CboParitybit
- Height = 300
- ItemData = "串口调试助手.frx":7B0A
- Left = 750
- List = "串口调试助手.frx":7B1D
- TabIndex = 24
- Text = "NONE"
- Top = 700
- Width = 800
- End
- Begin VB.ComboBox CboBaudrate
- Height = 300
- ItemData = "串口调试助手.frx":7B3F
- Left = 750
- List = "串口调试助手.frx":7B6A
- TabIndex = 23
- Text = "9600"
- Top = 400
- Width = 800
- End
- Begin VB.ComboBox CboCom
- Height = 300
- ItemData = "串口调试助手.frx":7BC3
- Left = 750
- List = "串口调试助手.frx":7BF4
- TabIndex = 22
- Text = "COM1"
- Top = 111
- Width = 800
- End
- Begin VB.CommandButton CmdSwitch
- Caption = "关闭串口"
- Height = 440
- Left = 720
- TabIndex = 1
- Top = 1740
- Width = 870
- End
- Begin VB.Image ImgSwitchOn
- Appearance = 0 'Flat
- Height = 420
- Left = 120
- Picture = "串口调试助手.frx":7C58
- Top = 1680
- Width = 450
- End
- Begin VB.Image ImgSwitchOff
- Height = 420
- Left = 120
- Picture = "串口调试助手.frx":B6F5
- Top = 1680
- Width = 450
- End
- Begin VB.Label Label8
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "停止位"
- Height = 255
- Left = 50
- TabIndex = 33
- Top = 1400
- Width = 600
- End
- Begin VB.Label Label7
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "数据位"
- Height = 255
- Left = 50
- TabIndex = 32
- Top = 1080
- Width = 600
- End
- Begin VB.Label Label6
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "校验位"
- Height = 255
- Left = 50
- TabIndex = 31
- Top = 760
- Width = 600
- End
- Begin VB.Label Label5
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "波特率"
- Height = 255
- Left = 50
- TabIndex = 30
- Top = 470
- Width = 600
- End
- Begin VB.Label Label4
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "串口"
- Height = 255
- Left = 50
- TabIndex = 29
- Top = 160
- Width = 600
- End
- End
- Begin VB.TextBox TxtReceive
- Height = 4750
- Left = 1800
- MultiLine = -1 'True
- ScrollBars = 2 'Vertical
- TabIndex = 0
- Top = 6
- Width = 8990
- End
- Begin VB.Label LblWeb
- BackColor = &H0091CACA&
- Caption = "WEB"
- ForeColor = &H008A7839&
- Height = 220
- Left = 8880
- MouseIcon = "串口调试助手.frx":EE3B
- TabIndex = 46
- Top = 5760
- Width = 300
- End
- Begin VB.Label LblNewDate
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "显示日前"
- Height = 255
- Left = 240
- TabIndex = 45
- Top = 4440
- Width = 1215
- End
- Begin VB.Label LblNowTime
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "当前时间"
- ForeColor = &H00000000&
- Height = 195
- Left = 240
- TabIndex = 44
- Top = 4200
- Width = 1215
- End
- Begin VB.Label Label14
- BackColor = &H0091CACA&
- Caption = "毫秒"
- Height = 255
- Left = 2000
- TabIndex = 42
- Top = 5760
- Width = 450
- End
- Begin VB.Label LblArtoSendCyc
- BackColor = &H0091CACA&
- Caption = "自动发送周期:"
- Height = 200
- Left = 60
- TabIndex = 40
- Top = 5760
- Width = 1270
- End
- Begin VB.Label LblAutoSend
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "自动发送(周期改变后重选)"
- Height = 200
- Left = 240
- TabIndex = 39
- Top = 5510
- Width = 2215
- End
- Begin VB.Label Label11
- Alignment = 2 'Center
- BackColor = &H0091CACA&
- Caption = "十六进制发送"
- Height = 200
- Left = 240
- TabIndex = 38
- Top = 5200
- Width = 1200
- End
- Begin VB.Label Label10
- BackColor = &H0091CACA&
- Caption = "十六进制显示"
- Height = 200
- Left = 330
- TabIndex = 35
- Top = 3140
- Width = 1200
- End
- Begin VB.Label LblArtoclear
- BackColor = &H0091CACA&
- Caption = "自动清空"
- Height = 200
- Left = 330
- TabIndex = 34
- Top = 2870
- Width = 800
- End
- Begin VB.Label LblSend
- BackColor = &H0091CACA&
- BorderStyle = 1 'Fixed Single
- Caption = "发送的字符/数据"
- Height = 270
- Left = 1100
- TabIndex = 28
- Top = 4850
- Width = 1420
- End
- Begin VB.Label LblReceive
- BackColor = &H0091CACA&
- BorderStyle = 1 'Fixed Single
- Caption = "接收区"
- Height = 255
- Left = 1130
- TabIndex = 27
- Top = 2180
- Width = 595
- End
- End
- Attribute VB_Name = "串口调试软件"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = False
- Attribute VB_PredeclaredId = True
- Attribute VB_Exposed = False
- '=====================================================================================
- ' 变量定义
- '=====================================================================================
- Option Explicit ' 强制显式声明
- Dim ComSwitch As Boolean ' 串口开关状态判断
- Dim FileData As String ' 要发送的文件暂存
- Dim SendCount As Long ' 发送数据字节计数器
- Dim ReceiveCount As Long ' 接收数据字节计数器
- Dim InputSignal As String ' 接收缓冲暂存
- Dim OutputSignal As String ' 发送数据暂存
- Dim DisplaySwitch As Boolean ' 显示开关
- Dim ModeSend As Boolean ' 发送方式判断
- Dim Savetime As Single ' 时间数据暂存 延时用
- Dim SaveTextPath As String ' 保存文本路径
- ' 网页超链接申明
- Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
- '====================================================================================
- ' 自动发送选择
- '=====================================================================================
- Private Sub ChkAutoSend_Click()
- On Error GoTo Err
- If ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送
- If MSComm.PortOpen = True Then ' 串口状态判断
- TmrAutoSend.Interval = Val(TxtAutoSendTime) ' 设置自动发送时间
- TmrAutoSend.Enabled = True ' 打开自动发送定时器
- Else
- ChkAutoSend.Value = 0 ' 串口没有打开去掉自动发送
- MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口
- End If
- ElseIf ChkAutoSend.Value = 0 Then ' 如果无效,不发送
- TmrAutoSend.Enabled = False ' 关闭自动发送定时器
- End If
- Err:
-
- End Sub
- '=====================================================================================
- ' 超链接我的博客
- '=====================================================================================
- Private Sub LblWeb_Click() ' 单击打开网站
-
- ShellExecute Me.hwnd, "open", "http://blog.163.com/zhaojun_xf/", "", "", 5 ' 要打开的网站
-
- End Sub
- ' 鼠标移入 WEB 区
- Private Sub LblWeb_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- LblWeb.ForeColor = &H8A7839 ' 鼠标移入WEB时的颜色
- LblWeb.MousePointer = 99 ' 鼠标移入WEB时的鼠标的现状 ,小手型
- 'LblWeb.MouseIcon = LoadPicture("f:\我的VB\串口调试软件\图片\mouse.cur") ' 鼠标形状图片
- End Sub
- ' 鼠标移出 WEB 区
- Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- LblWeb.ForeColor = vbBlue ' 鼠标移出WEB时的颜色
- Me.MousePointer = vbDefault ' 鼠标移出WEB时的鼠标的现状 即Me.MousePointer = 0
- End Sub
- '=====================================================================================
- ' 自动发送定时器
- '=====================================================================================
- Private Sub TmrAutoSend_Timer() ' 定时器
- On Error GoTo Err
- If TxtSend.Text = "" Then ' 判断发送数据是否为空
- ChkAutoSend.Value = 0 ' 关闭自动发送
- MsgBox "发送数据不能为空", 16, "串口调试助手" ' 发送数据为空则提示
- Else
-
- If ChkHexSend.Value = 1 Then ' 发送方式判断
- MSComm.InputMode = comInputModeBinary ' 二进制发送
- Call hexSend ' 发送十六进制数据
- Else ' 按十六进制接收文本方式发送的数据时,文本也要按二进制发送发送
- If ChkHexReceive.Value = 1 Then
- MSComm.InputMode = comInputModeBinary ' 二进制发送
- Else
- MSComm.InputMode = comInputModeText ' 文本发送
- End If
-
- MSComm.Output = Trim(TxtSend.Text) ' 发送数据
-
- ModeSend = False ' 设置文本发送方式
- End If
- End If
- Err:
-
- End Sub
- '=====================================================================================
- ' 窗体载入
- '=====================================================================================
- Private Sub Form_Load() ' 载入窗体
-
- On Error GoTo Err
- LblWeb.FontUnderline = True ' WEB上加下划线
- LblWeb.ForeColor = vbBlue ' 蓝色显示WEB
-
- TxtSend.Text = "http://www.newxing.com/" ' 载入发送信息
- If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
- ' 初始化串口
- Call Comm_initial(Val(Mid(CboCom.Text, 4, 1)), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text)
- Err:
-
- End Sub
- '=====================================================================================
- ' 保存接收文本
- '=====================================================================================
- Private Sub CmdSaveDisp_Click() ' 保存显示数据
-
- On Error GoTo Err ' 错误处理
-
- SaveTextPath = TxtSavePath ' 路径暂存
- Open TxtSavePath & "\1.txt" For Output As #1 ' 打开文件
- ' 不存在的话 会创建文件,如已存在 会覆盖
- ' output 改为append 为追加
- ' 改为input 则只读
- Print #1, Year(Date) & "年" & Month(Date) & "月" & Day(Date) & _
- "日" & Hour(Time) & "时" & Minute(Time) & "分" & Second(Time) & _
- "秒" & vbCrLf & TxtReceive.Text + vbCrLf ' 把接收区的文本保存 文本前加上保存时间 (0000年00月00日00时00分00秒)
- ' vbcrlf 为回车换行
- Close #1 ' 关闭文件
-
- TxtSavePath = "OK,1.txt Save" ' 提示保存成功
- CmdSaveDisp.Enabled = False
-
- Savetime = Timer ' 记下开始的时间
- While Timer < Savetime + 5 ' 循环等待 5 - 要延时的时间
- DoEvents ' 转让控制权,以便让操作系统处理其它的事件。
- Wend
-
- TxtSavePath = SaveTextPath ' 显示保存路径
- CmdSaveDisp.Enabled = True
- Err:
-
- End Sub
- '=====================================================================================
- ' 停止显示
- '=====================================================================================
- Private Sub CmdStopdisp_Click()
- On Error GoTo Err
- If DisplaySwitch = False Then
- DisplaySwitch = True ' 关闭显示
- CmdStopdisp.Caption = "继续显示"
- Else
- DisplaySwitch = False ' 开启显示
- CmdStopdisp.Caption = "停止显示"
- End If
- Err:
-
- End Sub
- '=====================================================================================
- ' 计数器清零
- '=====================================================================================
- Private Sub CmdClearCounter_Click() ' 清除计数器
-
- On Error GoTo Err
- SendCount = 0 ' 发送计数器清零
- ReceiveCount = 0 ' 接收计数器清零
- TxtRXCount.Text = "RX:" & 0 ' 接收计数
- TxtTXCount.Text = "TX:" & 0 ' 发送计数
- Err:
-
- End Sub
- '=====================================================================================
- ' 更改保存显示数据的目录
- '=====================================================================================
- Private Sub CmdAmend_Click() '更改
- Dim spShell As Object ' 定义存放引用对象的变量
- Dim spFolder As Object ' 定义存放引用对象的变量
- Dim spFolderItem As Object ' 定义存放引用对象的变量
- Dim spPath As String ' 定义存放的变量
-
- On Error GoTo Err ' 错误处理,防止取消打开文件夹时报错
- Const WINDOW_HANDLE = 0
- Const NO_OPTIONS = 0
-
- Set spShell = CreateObject("Shell.Application")
- Set spFolder = spShell.BrowseForFolder(WINDOW_HANDLE, "选择目录:", NO_OPTIONS, "C:\Scripts")
- Set spFolderItem = spFolder.Self
- spPath = spFolderItem.Path
- spPath = Replace(spPath, "\", "\") ' Replace函数的返回值是一个字符串
- TxtSavePath.Text = spPath ' 把文件夹路径显示在标签上
- SaveTextPath = TxtSavePath.Text ' 路径暂存
- Err:
- End Sub
- '=====================================================================================
- ' 串口设置
- '=====================================================================================
- Private Sub CboBaudrate_Click() ' 修改波特率
-
- Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2)), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) '串口设置
- End Sub
- Private Sub CboCom_Click() ' 修改串口
-
- Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2)), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) '串口设置
- End Sub
- Private Sub CboDatabit_Click() ' 修改数据位
-
- Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2)), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) '串口设置
- End Sub
-
- Private Sub CboParitybit_Click() ' 修改校验位
-
- Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2)), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) '串口设置
- End Sub
- Private Sub CboStopbit_Click() ' 修改停止位
- Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2)), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) '串口设置
- End Sub
- '=====================================================================================
- ' 清空数据
- '=====================================================================================
- Private Sub CmdClearSend_Click() ' 清除发送区
- TxtSend.Text = ""
-
- End Sub
- Private Sub CmdClearReceive_Click() ' 清空接收区
- TxtReceive.Text = ""
-
- End Sub
- '=====================================================================================
- ' 选择要发送的文件并放入内存中
- '=====================================================================================
- Private Sub CmdSelectFile_Click() ' 选择要发送的文件
- On Error GoTo Err ' 错误处理
- CommonDialog1.Flags = cdlCFBoth
- CommonDialog1.ShowOpen
- TxtSendPath.Text = CommonDialog1.FileName ' 把打开的文件名给于TxtSendPath
-
- Open TxtSendPath.Text For Input As 1 ' 打开选择的文件
- FileData = StrConv(InputB$(LOF(1), 1), vbUnicode) ' 显示打开的文件
- Close 1 ' 关闭文件
-
- Err:
-
- End Sub
- '=====================================================================================
- ' 文件数据发送
- '=====================================================================================
- Private Sub CmdSendFile_Click() '发送文件
-
- On Error GoTo Err
- If MSComm.PortOpen = True Then ' 如果串口打开了,则可以发送数据
- If FileData = "" Then ' 判断发送数据是否为空
- MsgBox "发送的文件为空", 16, "串口调试助手" ' 发送数据为空则提示
- Else
- If ChkHexReceive.Value = 1 Then ' 如果按十六进制接收时,按二进制发送,否则按文本发送
- MSComm.InputMode = comInputModeBinary ' 二进制发送
- Else
- MSComm.InputMode = comInputModeText ' 文本发送
- End If
-
- MSComm.Output = Trim(FileData) ' 发送数据
-
- ModeSend = True ' 设置文本发送方式
- End If
- Else
- MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口
- End If
- Err:
-
- End Sub
- '====================================================================================
- ' 发送文本数据
- '====================================================================================
- Private Sub CmdSend_Click() ' 发送按钮
-
- On Error GoTo Err
- If MSComm.PortOpen = True Then ' 如果串口打开了,则可以发送数据
- If TxtSend.Text = "" Then ' 判断发送数据是否为空
- MsgBox "发送数据不能为空", 16, "串口调试助手" ' 发送数据为空则提示
- Else
- If ChkHexSend.Value = 1 Then ' 发送方式判断
- MSComm.InputMode = comInputModeBinary ' 二进制发送
- Call hexSend ' 发送十六进制数据
- Else ' 按十六进制接收文本方式发送的数据时,文本也要按二进制发送发送
- If ChkHexReceive.Value = 1 Then
- MSComm.InputMode = comInputModeBinary ' 二进制发送
- Else
- MSComm.InputMode = comInputModeText ' 文本发送
- End If
-
- MSComm.Output = Trim(TxtSend.Text) ' 发送数据
- ModeSend = False ' 设置文本发送方式
- End If
- End If
- Else
- MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口
- End If
- Err:
-
- End Sub
- '====================================================================================
- ' 通信触发事件
- '====================================================================================
- Private Sub MSComm_OnComm() ' 设置oncomm事件,读取片机内存的值
-
- On Error GoTo Err
- Select Case MSComm.CommEvent ' 每接收1个数就触发一次
- Case comEvReceive
- If ChkHexReceive.Value = 1 Then
- Call hexReceive ' 十六进制接收
- Else
- Call textReceive ' 文本接收
- End If
-
- Case comEvSend ' 每发送1个数就触发一次
- If ChkHexSend.Value = 1 Then
- Else
- Call textSend ' 文本发送
- End If
-
- Case Else
- End Select
- Err:
-
- End Sub
- '====================================================================================
- ' 文本接收
- '====================================================================================
- Private Sub textReceive()
-
- On Error GoTo Err
- InputSignal = MSComm.Input
- ReceiveCount = ReceiveCount + LenB(StrConv(InputSignal, vbFromUnicode)) ' 计算总接收数据
- If DisplaySwitch = False Then ' 显示接收文本
- TxtReceive.Text = TxtReceive.Text & InputSignal ' 单片机内存的值用TextReceive显示出
- TxtReceive.SelStart = Len(TxtReceive.Text) ' 显示光标位置
-
- End If
- TxtRXCount.Text = "RX:" & ReceiveCount ' 接收字节数显示
-
- If ChkAutoClear.Value = 1 Then ' 自动清空判断
- If ReceiveCount >= 65535 Then
- TxtReceive.Text = ""
- End If
- End If
- Err:
-
- End Sub
- '====================================================================================
- ' 文本发送
- '====================================================================================
- Private Sub textSend()
-
- On Error GoTo Err
- If ModeSend = True Then
- OutputSignal = FileData ' 发送文件
- Else
- OutputSignal = TxtSend.Text ' 发送文本
- End If
-
- SendCount = SendCount + LenB(StrConv(OutputSignal, vbFromUnicode)) ' 计算总发送数
- TxtTXCount.Text = "TX:" & SendCount ' 发送字节数显示
- Err:
-
- End Sub
- '====================================================================================
- ' 十六进制发送
- '====================================================================================
- Private Sub hexSend()
-
- On Error Resume Next
- Dim outputLen As Integer ' 发送数据长度
- Dim outData As String ' 发送数据暂存
- Dim SendArr() As Byte ' 发送数组
- Dim TemporarySave As String ' 数据暂存
- Dim dataCount As Integer ' 数据个数计数
- Dim i As Integer ' 局部变量
-
- outData = UCase(Replace(TxtSend.Text, Space(1), Space(0))) ' 先去掉空格,再转换为大写字母
- outData = UCase(outData) ' 转换成大写
- outputLen = Len(outData) ' 数据长度
-
- For i = 0 To outputLen
- TemporarySave = Mid(outData, i + 1, 1) ' 取一位数据
- If (Asc(TemporarySave) >= 48 And Asc(TemporarySave) <= 57) Or (Asc(TemporarySave) >= 65 And Asc(TemporarySave) <= 70) Then
- dataCount = dataCount + 1
- Else
- Exit For
- Exit Sub
- End If
- Next
-
- If dataCount Mod 2 <> 0 Then ' 判断十六进制数据是否为双数
- dataCount = dataCount - 1 ' 不是双数,则减1
- End If
-
- outData = Left(outData, dataCount) ' 取出有效的十六进制数据
-
- ReDim SendArr(dataCount / 2 - 1) ' 重新定义数组长度
- For i = 0 To dataCount / 2 - 1
- SendArr(i) = Val("&H" + Mid(outData, i * 2 + 1, 2)) ' 取出数据转换成十六进制并放入数组中
- Next
-
- SendCount = SendCount + (dataCount / 2) ' 计算总发送数
- TxtTXCount.Text = "TX:" & SendCount
-
- MSComm.Output = SendArr ' 发送数据
-
- End Sub
- '====================================================================================
- ' 十六进制数据接受
- '====================================================================================
- Private Sub hexReceive()
-
- On Error GoTo Err
- Dim ReceiveArr() As Byte ' 接收数据数组
- Dim receiveData As String ' 数据暂存
- Dim Counter As Integer ' 接收数据个数计数器
- Dim i As Integer ' 循环变量
-
- If (MSComm.InBufferCount > 0) Then
- Counter = MSComm.InBufferCount ' 读取接收数据个数
- receiveData = "" ' 清缓冲
-
- ReceiveArr = MSComm.Input ' 数据放入数组
-
- For i = 0 To (Counter - 1) Step 1 ' 数据格式处理
-
- If (ReceiveArr(i) < 16) Then
- receiveData = receiveData & "0" + Hex(ReceiveArr(i)) & Space(1) ' 小于16,前面加0
- Else
- receiveData = receiveData & Hex(ReceiveArr(i)) & Space(1) ' 加空格显示
- End If
-
- Next i
-
- TxtReceive.Text = TxtReceive.Text + receiveData ' 显示接收的十六进制数据
- TxtReceive.SelStart = Len(TxtReceive.Text) ' 显示光标位置
- End If
-
- ReceiveCount = ReceiveCount + Counter ' 接收计数
- TxtRXCount.Text = "RX:" & ReceiveCount ' 接收字节数显示
-
- If ChkAutoClear.Value = 1 Then ' 自动清空判断
- If ReceiveCount >= 65535 Then
- TxtReceive.Text = ""
- End If
- End If
- Err:
-
- End Sub
- '=====================================================================================
- ' 串口开关
- '=====================================================================================
- Private Sub CmdSwitch_Click() ' 串口开关按钮
-
- On Error GoTo Err
- If MSComm.PortOpen = True Then
- ComSwitch = True
- Else
- ComSwitch = False
- End If
-
- If ComSwitch = False Then
- OpenCom ' 打开串口
- ComSwitch = True
- Else
- CloseCom ' 关闭串口
- ComSwitch = False
- End If
- Err:
-
- End Sub
- '=====================================================================================
- ' 初始化串口
- '=====================================================================================
- Private Sub Comm_initial(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer)
-
- On Error GoTo ErrorTrap ' 错误则跳往错误处理
-
- If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
-
- MSComm.CommPort = Port ' 设定端口
- MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位
- MSComm.InBufferSize = 1024 ' 设置接收缓冲区为1024字节
- MSComm.OutBufferSize = 4096 ' 设置发送缓冲区为4096字节
- MSComm.InBufferCount = 0 ' 清空输入缓冲区
- MSComm.OutBufferCount = 0 ' 清空输出缓冲区
- MSComm.SThreshold = 1 ' 发送缓冲区空触发发送事件
- MSComm.RThreshold = 1 ' 每X个字符到接收缓冲区引起触发接收事件
- MSComm.OutBufferCount = 0 ' 清空发送缓冲区
- MSComm.InBufferCount = 0 ' 滑空接收缓冲
- MSComm.PortOpen = True ' 打开串口
-
- If MSComm.PortOpen = True Then
- TxtStatus.Text = "STATUS:" & CboCom.Text & " OPEND," & CboBaudrate.Text & "," & Left(CboParitybit.Text, 1) & "," & CboDatabit.Text & "," & CboStopbit.Text
- Else
- TxtStatus.Text = "STATUS:COM Port Cloced" ' 串口没打开时,提示串口关闭状态
- End If
- Exit Sub
-
- ErrorTrap: ' 错误处理
- Select Case Err.Number
- Case comPortAlreadyOpen ' 如果串口已经打开,则提示
- MsgBox "没有发现此串口或被占用", 49, "串口调试助手"
- CloseCom
- Case Else
- MsgBox "没有发现此串口或被占用", 49, "串口调试助手"
- CloseCom
- End Select
- Err.Clear
-
- End Sub
- '=====================================================================================
- ' 串口设置
- '=====================================================================================
- Private Sub Comm_reSet(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer)
-
- On Error GoTo ErrorHint ' 错误则跳往错误处理
-
- If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
-
- MSComm.CommPort = Port ' 设定端口
- MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位
- MSComm.PortOpen = True ' 打开串口
-
- If MSComm.PortOpen = True Then
- CmdSwitch.Caption = "关闭串口"
- 'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\kai.jpg") ' 显示串口已经打开的图标
- ImgSwitchOn.Visible = True
- ImgSwitchOff.Visible = False
- TxtStatus.Text = "STATUS:" & CboCom.Text & " OPEND," & CboBaudrate.Text & "," & Left(CboParitybit.Text, 1) & "," & CboDatabit.Text & "," & CboStopbit.Text
- Else
- CmdSwitch.Caption = "打开串口"
- ImgSwitchOn.Visible = False
- ImgSwitchOff.Visible = True
- 'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标
- TxtStatus.Text = "STATUS:COM Port Cloced"
- End If
- Exit Sub
-
- ErrorHint: ' 错误处理
-
- Select Case Err.Number
- Case comPortAlreadyOpen ' 如果串口已经打开,则提示
- MsgBox "没有成功,请重试", vbExclamation, "串口调试助手"
- CloseCom ' 调用关闭串口函数
- Case Else
- MsgBox "没有成功,请重试", vbExclamation, "串口调试助手"
- CloseCom ' 调用关闭串口函数
- End Select
- Err.Clear ' 清除 Err 对象的属性
-
- End Sub
- '=====================================================================================
- ' 串口开关子程序
- '=====================================================================================
- Private Sub OpenCom() '打开串口
-
- On Error GoTo Err
- If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
-
- Call Comm_reSet(Val(Mid(CboCom.Text, 4, 1)), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) ' 串口设置
-
- If MSComm.PortOpen = True Then
- TxtStatus.Text = "STATUS:" & CboCom.Text & " OPEND," & CboBaudrate.Text & "," & Left(CboParitybit.Text, 1) & "," & CboDatabit.Text & "," & CboStopbit.Text
- CmdSwitch.Caption = "关闭串口"
- ImgSwitchOn.Visible = True ' 显示串口已经打开的图标
- ImgSwitchOff.Visible = False
- Else
- TxtStatus.Text = "STATUS:COM Port Cloced" ' 串口状态显示
- CmdSwitch.Caption = "打开串口"
- 'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标
- ImgSwitchOff.Visible = True
- ImgSwitchOn.Visible = False
- End If
- Err:
-
- End Sub
- Private Sub CloseCom() '关闭串口
-
- On Error GoTo Err
- If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
-
- TxtStatus.Text = "STATUS:COM Port Cloced" ' 串口状态显示
- CmdSwitch.Caption = "打开串口"
- 'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标
- ImgSwitchOn.Visible = False
- ImgSwitchOff.Visible = True
- Err:
-
- End Sub
- '=====================================================================================
- ' 显示时间
- '=====================================================================================
- Private Sub TmrNowTime_Timer()
-
- LblNewDate.Caption = Date ' 显示时间
- LblNowTime.Caption = Time ' 显示系统时间
-
- End Sub
- '=====================================================================================
- ' 程序退出
- '=====================================================================================
- Private Sub CmdQuit_Click() ' 退出程序
-
- If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
-
- Unload Me ' 卸载窗体,并退出程序
- End
-
- End Sub
- '=====================================================================================
- ' 帮助信息
- '=====================================================================================
- Private Sub CmdHelp_Click() ' 载入帮助信息窗口
-
- FrmHelp.Show
-
- End Sub
- '--------------- 程序结束 ------------------
复制代码
所有资料51hei提供下载:
VB 串口调试软件源代码.rar
(50.04 KB, 下载次数: 176)
|