[程序宝典]VB串口通讯实例程序匠人 2005-9-22 14:23:00 阅读全文(3939) | 回复(0) | 引用(0) | 查看《匠人的百宝箱》代理商品VB串口通讯实例作者:liwenzhao高精度电压表(24bit) VB源程序Dim PortValue As Integer '端口号选择1-4Dim value As Double '当前一次取值Dim value2 As Double '要显示的值Dim valueSum As Double '和Dim numCount As Double '算平均值是的计数个数Dim func As Integer '功能号标志1-4Dim valueFlag As Integer/**********************************************' Check1_Click()为控制Command1是否EnabledPrivate Sub Check1_Click()'自动刷新被选中则刷新按钮无效If Check1.value ThenCommand1.Enabled = FalseElseCommand1.Enabled = TrueCommand1.SetFocusEnd IfEnd Sub*********************************************//**********************************************Private Sub Command1_Click()'显示Call displayEnd Sub*********************************************/Private Sub Command2_Click() '复位valueSum = 0 '清计数和numCount = 1 '清计数个数Label6.Caption = Str(numCount - 1) '显示复位value = 0'当前一次取值value2 = 0'要显示的值valueFlag = 0Call displayEnd SubPrivate Sub Form_Activate()numCount = 1value = 0valueSum = 0PortValue = 1Text1.Visible = FalseLabel6.Caption = "0"Option1(0).value = TrueOption2(0).value = True'为什么两个都是TrueCommand1.SetFocus'SetFocus是什么?Label1.Caption = Format(value2, "0.000,000")'Format为格式输出函数For i = 0 To 3If Option2(i).value = True Thenfunc = i + 1End IfNext iCheck1.value = 1'Call ComPortOpenEnd SubPublic Sub ComPortOpen() '开串口With MSComm1.CommPort = PortValue '使用COM1 .Settings = "9600,N,8,1" '设置通信口参数 .InBufferSize = 40'设置MSComm1接收缓冲区为40字节'.OutBufferSize = 2'设置MSComm1发送缓冲区为2字节'VB中OutBufferSize是以字符为单位的???.InputMode = comInputModeBinary'设置接收数据模式为二进制形式.InputLen = 1'VB中InputLen单位是字符数'设置Input 一次从接收缓冲读取字节数为1'.SThreshold = 1'VB中SThreshold单位是字符数'设置Output 一次从发送缓冲读取字节数为1.InBufferCount = 0 '清除接收缓冲区'.OutBufferCount = 0 '清除发送缓冲区'MaxW = -99'最大值赋初值????'MinW = 99'最小值赋初值????'w = 0'数据个数计数器清零.RThreshold = 1On Error Resume Next'????'设置接收一个字节产生OnComm事件/**********************************************'打开串口,如打不开,则Err,出现msg……If .PortOpen = False Then'判断通信口是否打开.PortOpen = True '打开通信口If Err Then '错误处理msg = MsgBox(" 串口 COM" & PortValue & " 无效! ", vb OKOnly, "警告")'vbOKOnly显示确定按钮Exit SubEnd IfEnd If**********************************************/End With'MsgBox "端口已打开"End SubPublic Sub ComPortClose() '关串口MSComm1.PortOpen = False' MsgBox "端口已关闭"End SubPrivate Sub MSComm1_OnComm()Call reciveEnd SubPrivate Sub Option1_Click(Index As Integer)If MSComm1.PortOpen = True ThenCall ComPortCloseEnd IfPortValue = Index + 1Call ComPortOpenEnd SubPrivate Sub recive() '检测起始位并接收数据Dim Buffer As VariantDim Arr() As ByteDim inData(5) As ByteDim count As IntegerDim temp As Byte' MsgBox "OnComm"With MSComm1Select Case .CommEvent'判断MSComm1通信事件 CommEvent ???Case comEvReceive'收到Rthreshold个字节产生的接收事件Buffer = .InputArr = Buffer'读取一个接收字节' Text1.Text = Arr(0)If Arr(0) = &H1B Then' &H表示是十六进制数,1B即27???是27.RThreshold = 0DoDoEvents' DoEvents是什么?Loop Until .InBufferCount >= 4'这里的4是不是应该是40For i = 1 To 4'count = .InBufferCountBuffer = .InputArr = BufferinData(i) = Arr(0)Next iIf inData(4) = &HA ThenIf (inData(1) Mod 64) >= 32 Then.RThreshold = 1Exit SubEnd IfvalueFlag = 1'0.000003814697265625temp = inData(1) Mod 16If temp <= 7 Thenvalue = inData(1) Mod 8value = value * 256 * 256value = value + Val(inData(2)) * 256 value = value + Val(inData(3))value = value * 3.814697265625E-06 'Text1.Text = Format(value, "0.000,00 0")Elsevalue = inData(1) Mod 8value = value * 256 * 256value = value + Val(inData(2)) * 256 value = value + Val(inData(3))value = value * 3.814697265625E-06 value = 0 - valueEnd Iftemp = inData(1) Mod 128' test OFIf temp >= 64 ThenIf value < 0 Thenvalue = value - 0.000004Elsevalue = value + 0.000004End IfEnd If'检测自动刷新If Check1.value Then'valueFlag = 1Call displayEnd IfElse.RThreshold = 1Exit SubEnd If.InBufferCount = 0.RThreshold = 1End IfCase ElseEnd SelectEnd With'Text1.Text = Text1.Text + 1End SubPrivate Sub Option2_Click(Index As Integer)func = Index + 1End SubPublic Sub display() '判断功能并显示'功能选择Select Case funcCase 1 '当前值value2 = valueCase 2 '平均值If numCount > 100000 ThennumCount = 1valueSum = 0End IfIf valueFlag = 1 ThenvalueSum = valueSum + valuevalue2 = valueSum / numCountnumCount = numCount + 1valueFlag = 0Label6.Caption = Str(numCount - 1) 'Str()为数字转换成字符串函数End IfCase 3 '最大值If value > value2 Thenvalue2 = valueEnd IfCase 4 '最小值If value < value2 Thenvalue2 = valueEnd IfCase ElseEnd Select'Text1.Text = Str(valueSum)Label1.Caption = Format(value2, "0.000,000") End SubPrivate Sub Timer1_Timer()'清缓冲区' Text1.Text = MSComm1.InBufferCountIf MSComm1.InBufferCount >= 80 ThenMSComm1.InBufferCount = 0End IfEnd Sub[编程技巧]Visual Basic串口通讯调试方法程序匠人 2005-10-22 19:48:00 阅读全文(1192) | 回复(0) | 引用(0) | 查看《匠人的百宝箱》代理商品Visual Basic串口通讯调试方法现有电子秤一台,使用串口与计算机进行通讯。