今天没事干,还是把近期网上收录的笔记的做个总结吧!

对于vb中mscomm的一点总结

  a.首先对于MSComm1_OnComm()事件只有设置了RThreshold后才能执行,否则不执行!

   在   MSComm   控件设置   CommEvent   属性为   comEvReceive   并产生   OnComm   之前,设置并返回的要接收的字符数。
   语法  object.Rthreshold   [   =   value   ]
   Rthreshold   属性语法包括下列部分:
  部分     描述   
  object   对象表达式,其值是“应用于”列表中的对象。   
  value   整型表达式,说明在产生   OnComm   事件之前要接收的字符数。  
   当接收字符后,若   Rthreshold   属性设置为   0(缺省值)则不产生   OnComm   事件。
   例如,设置   Rthreshold   为   1,接收缓冲区收到每一个字符都会使   MSComm   控件产生   OnComm   事件。
   对于.Rthreshold   如果设置太大或太小都会影响接收数据正确性,所以我一般采用timer事件进行数据接收(在这种情况下不用设置Rthreshold),并且可以读取正确的数据!

1.读取扫描枪的数据   (来源互联网)

Private Sub Form_Load()
With MSComm1
.CommPort = 3 '设为COM3,试运行的系统而定,你可提供一个Combox让用户选择。
.PortOpen = True '打开通讯端口
End With
End Sub


Private Sub MSComm1_OnComm()

Dim EndPos As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '当有数据传送过来时
sData = sData & Trim(MSComm1.Input)
'检索回车,通常读卡机每组数据結尾都返回一个回车作为结束符
EndPos = InStr(1, sData, Chr(13))
If EndPos = 0 Then '如果未结束就继续努力
Else '读完一组。
lblBarCode.Caption = sData '显示一组条形码
With lstBarCode
.AddItem Mid(sData, 1, EndPos - 1) '添加一组条形码到列表
End With
sData = "" '清空
End If
End Select
End Sub

呵呵,实际上读取简单的数据还是很简单的!

2.进制转换 (同样来源于互联网)

Function Hex2Bin(HexValue As String) As String   '16进制转2进制
Const BinTbl = "0000000100100011010001010110011110001001101010111100110111101111"
Dim X As Integer
Dim Work1 As String
Work1 = ""
For X = 1 To Len(HexValue)
Work1 = Work1 + Mid(BinTbl, Val("&h" + Mid(HexValue, X, 1)) * 4 + 1, 4)
Next
Hex2Bin = Work1
End Function

Public Function Hex2Dec(InputData As String) As Double '16进制转10进制
Dim i As Integer
Dim DecOut As Double
Dim Lenhex As Integer
Dim HexStep As Double
DecOut = 0
InputData = UCase(InputData)
Lenhex = Len(InputData)
For i = 1 To Lenhex
If IsNumeric(Mid(InputData, i, 1)) Then
  GoTo NumOk
ElseIf Mid(InputData, i, 1) = "A" Then
  GoTo NumOk
ElseIf Mid(InputData, i, 1) = "B" Then
  GoTo NumOk
ElseIf Mid(InputData, i, 1) = "C" Then
  GoTo NumOk
ElseIf Mid(InputData, i, 1) = "D" Then
  GoTo NumOk
ElseIf Mid(InputData, i, 1) = "E" Then
  GoTo NumOk
ElseIf Mid(InputData, i, 1) = "F" Then
  GoTo NumOk
Else
  Exit Function
End If
NumOk:
Next i
HexStep = 0
For i = Lenhex To 1 Step -1
HexStep = HexStep * 16
If HexStep = 0 Then
  HexStep = 1
End If
If Mid(InputData, i, 1) = "0" Then
   DecOut = DecOut + (0 * HexStep)
ElseIf Mid(InputData, i, 1) = "1" Then
   DecOut = DecOut + (1 * HexStep)
ElseIf Mid(InputData, i, 1) = "2" Then
   DecOut = DecOut + (2 * HexStep)
ElseIf Mid(InputData, i, 1) = "3" Then
   DecOut = DecOut + (3 * HexStep)
ElseIf Mid(InputData, i, 1) = "4" Then
   DecOut = DecOut + (4 * HexStep)
ElseIf Mid(InputData, i, 1) = "5" Then
   DecOut = DecOut + (5 * HexStep)
ElseIf Mid(InputData, i, 1) = "6" Then
   DecOut = DecOut + (6 * HexStep)
ElseIf Mid(InputData, i, 1) = "7" Then
   DecOut = DecOut + (7 * HexStep)
ElseIf Mid(InputData, i, 1) = "8" Then
   DecOut = DecOut + (8 * HexStep)
ElseIf Mid(InputData, i, 1) = "9" Then
   DecOut = DecOut + (9 * HexStep)
ElseIf Mid(InputData, i, 1) = "A" Then
   DecOut = DecOut + (10 * HexStep)
ElseIf Mid(InputData, i, 1) = "B" Then
   DecOut = DecOut + (11 * HexStep)
ElseIf Mid(InputData, i, 1) = "C" Then
   DecOut = DecOut + (12 * HexStep)
ElseIf Mid(InputData, i, 1) = "D" Then
   DecOut = DecOut + (13 * HexStep)
ElseIf Mid(InputData, i, 1) = "E" Then
   DecOut = DecOut + (14 * HexStep)
ElseIf Mid(InputData, i, 1) = "F" Then
   DecOut = DecOut + (15 * HexStep)
Else
End If
Next i
Hex2Dec = DecOut
eds:
End Function
Function N2Ten(Sour As String, N As Integer) As Double '任意进制转十进制  sour 是要转换的, n 是进制
e = 0
N2Ten = 0
For i = Len(Sour) To 1 Step -1
S = Mid(Sour, i, 1)
Select Case UCase(S)
Case "A": S0 = 10
Case "B": S0 = 11
Case "C": S0 = 12
Case "D": S0 = 13
Case "E": S0 = 14
Case "F": S0 = 15
Case Else
If InStr("0123456789", S) = 0 Then
N2Ten = -1
Exit Function
Else
S0 = Val(S)
End If
End Select
If S0 > N - 1 Then
N2Ten = -1
Exit Function
End If
N2Ten = N2Ten + S0 * N ^ e
e = e + 1
Next
End Function

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值