📄 frmcheck.frm
字号:
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form frmCheck
Caption = "串口检测"
ClientHeight = 4740
ClientLeft = 60
ClientTop = 345
ClientWidth = 4710
LinkTopic = "Form1"
ScaleHeight = 4740
ScaleWidth = 4710
StartUpPosition = 3 '窗口缺省
Begin VB.Timer tmrTimer2
Left = 3960
Top = 3120
End
Begin VB.Timer tmrTimer1
Left = 3960
Top = 2400
End
Begin VB.Frame Frame3
Height = 1215
Left = 720
TabIndex = 9
Top = 2280
Width = 2775
Begin VB.Label Label4
Caption = "0"
Height = 255
Left = 1200
TabIndex = 13
Top = 840
Width = 975
End
Begin VB.Label Label3
Caption = "0"
Height = 255
Left = 1200
TabIndex = 12
Top = 360
Width = 975
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "接收次数:"
Height = 180
Left = 240
TabIndex = 11
Top = 840
Width = 900
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "发送次数:"
Height = 180
Left = 240
TabIndex = 10
Top = 360
Width = 900
End
End
Begin VB.Frame Frame2
Caption = "波特率选择"
Height = 1695
Left = 2520
TabIndex = 5
Top = 360
Width = 1215
Begin VB.OptionButton Boud3
Caption = "1200"
Height = 255
Left = 240
TabIndex = 8
Top = 1080
Width = 735
End
Begin VB.OptionButton Boud2
Caption = "4800"
Height = 255
Left = 240
TabIndex = 7
Top = 720
Width = 735
End
Begin VB.OptionButton Boud1
Caption = "9600"
Height = 255
Left = 240
TabIndex = 6
Top = 360
Width = 735
End
End
Begin MSCommLib.MSComm MSComm1
Left = 3960
Top = 600
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DTREnable = -1 'True
RThreshold = 1
End
Begin VB.Frame Frame1
Caption = "端口选择"
Height = 1695
Left = 480
TabIndex = 2
Top = 360
Width = 1215
Begin VB.OptionButton COM2
Caption = "COM2"
Height = 375
Left = 240
TabIndex = 4
Top = 960
Width = 735
End
Begin VB.OptionButton COM1
Caption = "COM1"
Height = 255
Left = 240
TabIndex = 3
Top = 480
Width = 735
End
End
Begin VB.CommandButton cmdReturn
Caption = "返 回"
Height = 615
Left = 2520
TabIndex = 1
Top = 3840
Width = 1335
End
Begin VB.CommandButton cmdStart
Caption = "开始测试"
Height = 615
Left = 480
TabIndex = 0
Top = 3840
Width = 1335
End
End
Attribute VB_Name = "frmCheck"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim OK, Start As Boolean 'OK 为通信正常标志位, Start 为开始测试标志位
Private Sub Boud1_Click()
sBoud = "9600,n,8,1"
MSComm1.Settings = sBoud
End Sub
Private Sub Boud2_Click()
sBoud = "4800,n,8,1"
MSComm1.Settings = sBoud
End Sub
Private Sub Boud3_Click()
sBoud = "1200,n,8,1"
MSComm1.Settings = sBoud
End Sub
Private Sub cmdReturn_Click()
If Start Then '判断是否已经按下测试键
Start = False '若已经按下则执行停止键的功能,测试键标志清零
cmdStart.Enabled = True '激活测试键按钮
cmdReturn.Caption = "返 回" '停止标签改回返回
Else
If MSComm1.PortOpen Then MSComm1.PortOpen = False '若没有按下测试键,则执行返回键功能
frmCheck.Hide '隐藏串口检测窗口
frmMain.Show '显示主窗口
End If
End Sub
Private Sub cmdStart_Click()
Label3.Caption = 0 '发送次数清零
Label4.Caption = 0 '接收次数清零
If MSComm1.PortOpen Then
MsgBox sCom + "正在被其它程序使用,请更换其它串口", 0, "串行通信" '???????
Else
OK = True '通信正常标志位置 1
Start = True '测试键标志置 1
cmdReturn.Caption = "停 止" '返回键按钮标签改为停止
cmdStart.Enabled = False '测试键按钮无效
MSComm1.PortOpen = True '打开端口
MSComm1.Output = "1" '发送测试串口指令 1
tmrTimer2.Interval = 100 '设置定时器2 的定时间隔为100ms
tmrTimer2.Enabled = True '开定时器2
While Not OK
Wend '等待定时器2 定时结束
tmrTimer2.Interval = 1000 '设置定时器2 的定时间隔为1000ms
OK = True '标志置 1
tmrTimer1.Enabled = True '开定时器1
End If
End Sub
Private Sub COM1_Click()
MSComm1.CommPort = 1
sPort = 1
sCom = "COM1"
End Sub
Private Sub COM2_Click()
MSComm1.CommPort = 2
sPort = 2
sCom = "COM2"
End Sub
Private Sub Form_Load()
Dim buf$ '用于暂存接收字符
Dim Time%
OK = True
Start = False
Label3.Caption = 0 '发送次数清零
Label4.Caption = 0 '接收次数清零
tmrTimer1.Interval = 10 '计时器1定时10ms
tmrTimer1.Enabled = False '关计时器1
tmrTimer2.Interval = 1000 '计时器2定时1000ms
tmrTimer2.Enabled = False '关计时器2
COM1.Value = True '默认使用 COM1口
Boud3.Value = True '默认使用 1200波特
sCom = "COM1" '串口变量指向 COM1
MSComm1.CommPort = sPort '使用 COM1
MSComm1.Settings = sBoud '使用 1200波特,无校验,8位数据位,1位停止位
MSComm1.InputLen = 0 '读取接收缓冲区的全部字符
MSComm1.InputMode = comInputModeText 'Input读取的数据是文本
End Sub
Private Sub tmrTimer1_Timer()
tmrTimer1.Enabled = False '关定时器1
MSComm1.Output = "A" '发送测试字符'A'
Label3.Caption = Label3.Caption + 1 '发送次数自加 1
Do
tmrTimer2.Enabled = True '开定时器2
DoEvents '接受其它事件的响应,主要是定时器2 的响应
Loop While ((MSComm1.InBufferCount = 0) And OK) '若接收到数据或定时器2响应则跳出循环,若定时器2响应则说明串口不通
tmrTimer2.Enabled = False '关定时器2
If MSComm1.Input = "A" Then
Label4.Caption = Label4.Caption + 1 '若接收到的字符是"A",则通信正常,接收次数自加 1
Else
OK = False '若接收到的字符不是"A",则通信不正常,可能是波特率不匹配,清标志位
End If
If Not OK Then
MsgBox sCom + "是否连接?" + Chr(32) + "波特率是否正确?", 0, "串行通信" '若通信不正常,则显示提示框
Start = False '测试标志位清零
cmdStart.Enabled = True '显示测试键按钮
cmdReturn.Caption = "返 回" '停止标签改为返回
If MSComm1.PortOpen Then MSComm1.PortOpen = False '如果串口被打开则关闭
GoTo ToEnd1 '跳过开定时器1 的操作
End If
If (Label4.Caption >= 100) Or (Not Start) Then
MsgBox sCom + "工作正常!", 0, "串行通信" '若已经测试了100次(或按下停止键按钮),则显示通信成功提示框
MSComm1.Output = "B" '发送测试终止指令 "B"
cmdStart.Enabled = True '激活测试键按钮
Start = False '清测试标志位
cmdReturn.Caption = "返 回" '停止标签改为返回
If MSComm1.PortOpen Then MSComm1.PortOpen = False '如果串口被打开则关闭
GoTo ToEnd1 '跳过开定时器1 的操作
End If
tmrTimer1.Enabled = True '开定时器1
ToEnd1:
End Sub
Private Sub tmrTimer2_Timer()
tmrTimer2.Enabled = False
OK = False
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -