以文本方式查看主题 - 曙海教育集团论坛 (http://peixun0.cn/bbs/index.asp) -- VB语言 (http://peixun0.cn/bbs/list.asp?boardid=77) ---- 开发语言中的VB串口通讯实例 (http://peixun0.cn/bbs/dispbbs.asp?boardid=77&id=2606) |
-- 作者:wangxinxin -- 发布时间:2010-12-14 14:36:19 -- 开发语言中的VB串口通讯实例 高精度电压表(24bit) VB源程序 Dim PortValue As Integer `端口号选择1-4 Dim value As Double `当前一次取值 Dim value2 As Double `要显示的值 Dim valueSum As Double `和 Dim numCount As Double `算平均值是的计数个数 Dim func As Integer `功能号标志1-4 Dim valueFlag As Integer Private Sub Check1_Click() `自动刷新 被选中则 刷新按钮无效 If Check1.value Then Command1.Enabled = False Else Command1.Enabled = True Command1.SetFocus End If End Sub Private Sub Command1_Click() `显示 Call display End Sub Private Sub Command2_Click() valueSum = 0 `清计数和 numCount = 1 `清计数个数 Label6.Caption = Str(numCount - 1) `显示复位 value = 0 value2 = 0 valueFlag = 0 Call display End Sub Private Sub Form_Activate() numCount = 1 value = 0 valueSum = 0 PortValue = 1 Text1.Visible = False Label6.Caption = 0 Option1(0).value = True Option2(0).value = True Command1.SetFocus Label1.Caption = Format(value2 0.000000) For i = 0 To 3 If Option2(i).value = True Then func = i + 1 End If Next i Check1.value = 1 `Call ComPortOpen End Sub Public Sub ComPortOpen() `开串口 With MSComm1 .CommPort = PortValue `使用COM1 .Settings = 9600N81 `设置通信口参数 .InBufferSize = 40 `设置MSComm1接收缓冲区为40字节 `.OutBufferSize = 2 `设置MSComm1发送缓冲区为2字节 .InputMode = comInputModeBinary `设置接收数据模式为二进制形式 .InputLen = 1 `设置Input 一次从接收缓冲读取字节数为1 `.SThreshold = 1 `设置Output 一次从发送缓冲读取字节数为1 .InBufferCount = 0 `清除接收缓冲区 `.OutBufferCount = 0 `清除发送缓冲区 `MaxW = -99 `最大值赋初值 `MinW = 99 `最小值赋初值 `w = 0 `数据个数计数器清零 .RThreshold = 1 On Error Resume Next `设置接收一个字节产生OnComm事件 If .PortOpen = False Then `判断通信口是否打开 .PortOpen = True `打开通信口 If Err Then `错误处理 msg = MsgBox( 串口 COM PortValue 无效! vbOKOnly 警告) Exit Sub End If End If End With `MsgBox 端口已打开 End Sub Public Sub ComPortClose() `关串口 MSComm1.PortOpen = False ` MsgBox 端口已关闭 End Sub Private Sub MSComm1_OnComm() Call recive End Sub Private Sub Option1_Click(Index As Integer) If MSComm1.PortOpen = True Then Call ComPortClose End If PortValue = Index + 1 Call ComPortOpen End Sub Private Sub recive() `检测起始位并接收数据 Dim Buffer As Variant Dim Arr() As Byte Dim inData(5) As Byte Dim count As Integer Dim temp As Byte ` MsgBox OnComm With MSComm1 Select Case .CommEvent `判断MSComm1通信事件 Case comEvReceive `收到Rthreshold个字节产生的接收事件 Buffer = .Input Arr = Buffer `读取一个接收字节 ` Text1.Text = Arr(0) If Arr(0) = H1B Then .RThreshold = 0 Do DoEvents Loop Until .InBufferCount >= 4 For i = 1 To 4 `count = .InBufferCount Buffer = .Input Arr = Buffer inData(i) = Arr(0) Next i If inData(4) = HA Then If (inData(1) Mod 64) >= 32 Then .RThreshold = 1 Exit Sub End If valueFlag = 1 `0.000003814697265625 temp = inData(1) Mod 16 If temp <= 7 Then value = inData(1) Mod 8 value = value * 256 * 256 value = value + Val(inData(2)) * 256 value = value + Val(inData(3)) value = value * 3.814697265625E-06 `Text1.Text = Format(value 0.000000) Else value = inData(1) Mod 8 value = value * 256 * 256 value = value + Val(inData(2)) * 256 value = value + Val(inData(3)) value = value * 3.814697265625E-06 value = 0 - value End If temp = inData(1) Mod 128 ` test OF If temp >= 64 Then If value < 0 Then value = value - 0.000004 Else value = value + 0.000004 End If End If `检测自动刷新 If Check1.value Then `valueFlag = 1 Call display End If |