我现在在做一个数据采集的软件,里面需要一个脉冲源控制程序(涉及串口通信)。别人之前已经帮我用vb编好了这个脉冲源控制程序,但我这个软件是用vc编的,而且听说用vc编这个脉冲控制程序挺累的。所以就想到直接把现有的程序弄到我的软件里。希望看到的效果是,在主菜单里点击“脉冲源”选项,就弹出脉冲控制界面。可惜这里不能上传图像,其实就是有几个combo选择,然后点确定发送。
以下是这个程序的vb代码:
Private Sub Combo1_Click()
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False '如果串口打开,则关上串口
If Combo1.ListIndex >= 0 And Combo1.ListIndex <= 15 Then
MSComm1.CommPort = Combo1.ListIndex + 1
Else
MsgBox "指定通信端口时发生错误!"
Exit Sub
End If
MSComm1.Settings = "9600,n,8,1" '设置参数 : 波特率 9600, 无校验 , 数据位 8, 停止位 1
MSComm1.InputMode = comInputModeBinary ' 接收数据为 2 进制
MSComm1.PortOpen = True '打开串口End SubPrivate Sub Combo2_Click() If Combo2.Text = "内部" Then
Combo3.Enabled = True
ElseIf Combo2.Text = "外部" Then
Combo3.Enabled = False
End If
End SubPrivate Sub Combo4_click()If Combo4.Text = "实验" Or Combo4.Text = "退出" Then
Text1.Enabled = True
Else
Text1.Enabled = False
End IfEnd SubPrivate Sub Command1_Click() '类似&HF3这样的都不懂
Const a = &HF3
Dim b1, i, check As Integer
Dim num As Long
Dim a1, a2 As Integer
Dim out(5) As Byte
out(0) = &HFF
out(5) = &HAA
b1 = a And &H10
If Combo2.Text = "内部" Then
b1 = a And &H7F
ElseIf Combo2.Text = "外部" Then
b1 = a And &H8F
End If
If Combo3.Text = "1Hz" Then
b1 = b1 And &H9F
ElseIf Combo3.Text = "2Hz" Then
b1 = b1 And &HAF
ElseIf Combo3.Text = "3Hz" Then
b1 = b1 And &HBF
ElseIf Combo3.Text = "4Hz" Then
b1 = b1 And &HCF
ElseIf Combo3.Text = "5Hz" Then
b1 = b1 And &HDF
ElseIf Combo3.Text = "10Hz" Then
End If
If Combo4.Text = "待机" Then
b1 = b1 And &HFC
num = 0
ElseIf Combo4.Text = "调节能量" Then
b1 = b1 And &HFD
num = 0
ElseIf Combo4.Text = "实验" Then
b1 = b1 And &HFE
num = Val(Text1.Text) '转换字符串,返回输入的脉冲个数
If Val(Text1.Text) >= 0 And Val(Text1.Text) < 65535 Then '脉冲个数小于65535才可以激发
Command1.Enabled = True
End If ElseIf Combo4.Text = "退出" Then
num = Val(Text1.Text)
If Val(Text1.Text) >= 0 And Val(Text1.Text) < 65535 Then
Command1.Enabled = True
End If
End If
out(1) = b1
a1 = Int(num / 256)
out(2) = a1 '发生送脉冲个数 Debug.Print a1 '错误提示?
a2 = num - a1 * 256 '取num的小数部分
out(3) = a2
Debug.Print a2 '错误提示?
check = 0
For i = 1 To 3
check = check Xor out(i)
Next i
out(4) = check
MSComm1.OutBufferCount = 0
MSComm1.Output = out
End SubPrivate Sub Form_Load()MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = TrueCombo1.AddItem "COM1"
Combo1.AddItem "COM2"
Combo1.AddItem "COM3"
Combo1.AddItem "COM4"
Combo1.AddItem "COM5"
Combo1.AddItem "COM6"
Combo1.AddItem "COM7"
Combo1.AddItem "COM8"
Combo1.AddItem "COM9"
Combo1.Text = "COM1"Combo2.AddItem "内部"
Combo2.AddItem "外部"
Combo2.Text = "内部"Combo3.AddItem "1Hz"
Combo3.AddItem "2Hz"
Combo3.AddItem "3Hz"
Combo3.AddItem "4Hz"
Combo3.AddItem "5Hz"
Combo3.AddItem "10Hz"
Combo3.Text = "1Hz"Combo4.AddItem "待机"
Combo4.AddItem "调节能量"
Combo4.AddItem "实验"
Combo4.AddItem "退出"
Combo4.Text = "待机"
Text1.Enabled = FalseEnd Sub
Private Sub Text1_Change()
If Val(Text1.Text) > 65535 Then Text1.Text = "65535"
If Val(Text1.Text) >= 0 And Val(Text1.Text) < 65535 Then
Command1.Enabled = True
End If
End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 8 Then Exit Sub
If KeyAscii < 48 Or KeyAscii > 57 Then '如果输入不是0~9
KeyAscii = 0
End IfEnd Sub这个程序相对于我的程序还是比较独立的,没有什么参数传递,它功能就是发送脉冲到仪器。为了以后能做成安装包,所以不能用设置路径打开程序的方式打开脉冲程序。我的想法是把它弄成对话框类的东西,然后弄个类似dll,lib的东西,在vc里面insert。我是菜鸟,想法幼稚,见笑了。请求高人指点啊!
以下是这个程序的vb代码:
Private Sub Combo1_Click()
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False '如果串口打开,则关上串口
If Combo1.ListIndex >= 0 And Combo1.ListIndex <= 15 Then
MSComm1.CommPort = Combo1.ListIndex + 1
Else
MsgBox "指定通信端口时发生错误!"
Exit Sub
End If
MSComm1.Settings = "9600,n,8,1" '设置参数 : 波特率 9600, 无校验 , 数据位 8, 停止位 1
MSComm1.InputMode = comInputModeBinary ' 接收数据为 2 进制
MSComm1.PortOpen = True '打开串口End SubPrivate Sub Combo2_Click() If Combo2.Text = "内部" Then
Combo3.Enabled = True
ElseIf Combo2.Text = "外部" Then
Combo3.Enabled = False
End If
End SubPrivate Sub Combo4_click()If Combo4.Text = "实验" Or Combo4.Text = "退出" Then
Text1.Enabled = True
Else
Text1.Enabled = False
End IfEnd SubPrivate Sub Command1_Click() '类似&HF3这样的都不懂
Const a = &HF3
Dim b1, i, check As Integer
Dim num As Long
Dim a1, a2 As Integer
Dim out(5) As Byte
out(0) = &HFF
out(5) = &HAA
b1 = a And &H10
If Combo2.Text = "内部" Then
b1 = a And &H7F
ElseIf Combo2.Text = "外部" Then
b1 = a And &H8F
End If
If Combo3.Text = "1Hz" Then
b1 = b1 And &H9F
ElseIf Combo3.Text = "2Hz" Then
b1 = b1 And &HAF
ElseIf Combo3.Text = "3Hz" Then
b1 = b1 And &HBF
ElseIf Combo3.Text = "4Hz" Then
b1 = b1 And &HCF
ElseIf Combo3.Text = "5Hz" Then
b1 = b1 And &HDF
ElseIf Combo3.Text = "10Hz" Then
End If
If Combo4.Text = "待机" Then
b1 = b1 And &HFC
num = 0
ElseIf Combo4.Text = "调节能量" Then
b1 = b1 And &HFD
num = 0
ElseIf Combo4.Text = "实验" Then
b1 = b1 And &HFE
num = Val(Text1.Text) '转换字符串,返回输入的脉冲个数
If Val(Text1.Text) >= 0 And Val(Text1.Text) < 65535 Then '脉冲个数小于65535才可以激发
Command1.Enabled = True
End If ElseIf Combo4.Text = "退出" Then
num = Val(Text1.Text)
If Val(Text1.Text) >= 0 And Val(Text1.Text) < 65535 Then
Command1.Enabled = True
End If
End If
out(1) = b1
a1 = Int(num / 256)
out(2) = a1 '发生送脉冲个数 Debug.Print a1 '错误提示?
a2 = num - a1 * 256 '取num的小数部分
out(3) = a2
Debug.Print a2 '错误提示?
check = 0
For i = 1 To 3
check = check Xor out(i)
Next i
out(4) = check
MSComm1.OutBufferCount = 0
MSComm1.Output = out
End SubPrivate Sub Form_Load()MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = TrueCombo1.AddItem "COM1"
Combo1.AddItem "COM2"
Combo1.AddItem "COM3"
Combo1.AddItem "COM4"
Combo1.AddItem "COM5"
Combo1.AddItem "COM6"
Combo1.AddItem "COM7"
Combo1.AddItem "COM8"
Combo1.AddItem "COM9"
Combo1.Text = "COM1"Combo2.AddItem "内部"
Combo2.AddItem "外部"
Combo2.Text = "内部"Combo3.AddItem "1Hz"
Combo3.AddItem "2Hz"
Combo3.AddItem "3Hz"
Combo3.AddItem "4Hz"
Combo3.AddItem "5Hz"
Combo3.AddItem "10Hz"
Combo3.Text = "1Hz"Combo4.AddItem "待机"
Combo4.AddItem "调节能量"
Combo4.AddItem "实验"
Combo4.AddItem "退出"
Combo4.Text = "待机"
Text1.Enabled = FalseEnd Sub
Private Sub Text1_Change()
If Val(Text1.Text) > 65535 Then Text1.Text = "65535"
If Val(Text1.Text) >= 0 And Val(Text1.Text) < 65535 Then
Command1.Enabled = True
End If
End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 8 Then Exit Sub
If KeyAscii < 48 Or KeyAscii > 57 Then '如果输入不是0~9
KeyAscii = 0
End IfEnd Sub这个程序相对于我的程序还是比较独立的,没有什么参数传递,它功能就是发送脉冲到仪器。为了以后能做成安装包,所以不能用设置路径打开程序的方式打开脉冲程序。我的想法是把它弄成对话框类的东西,然后弄个类似dll,lib的东西,在vc里面insert。我是菜鸟,想法幼稚,见笑了。请求高人指点啊!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货