武汉工程大学毕业设计(论文)说明书
'数组指针计数器 Dim mc_bPtr As Byte 'unsigned char i; Dim i As Byte 'unsigned int crc=0; Dim crc As Long LSres = le crc = 0 mc_bPtr = 0
'<--------CRC计算入口 Do While (le <> 0) le = le - 1 'for(i=0x80; i!=0; i/=2)
Dim c As Byte '模拟i=0x80 c = &H80 For i = 0 To 7
If ((crc And &H8000) <> 0) Then crc = crc And &H7FFF crc = CLng(crc) * 2
crc = CLng(crc) Xor &H1021 Else
crc = CLng(crc) * 2 End If
If ((data(mc_bPtr) And c) <> 0) Then crc = CLng(crc) Xor &H1021 Else End If c = c / 2
23
武汉工程大学毕业设计(论文)说明书
Next
mc_bPtr = mc_bPtr + 1 Loop 'return(crc);
bCRC = CLng(crc) End Function
Private Sub Command3_Click() '输出电机的PWM与方向命令 Dim lSende(0 To 8) As Byte Dim rSende(0 To 4) As Byte Dim g_lcrcLow As Byte Dim g_lcrcHigh As Byte Dim lmotordp As Byte Dim rMotordp As Byte Dim lpwm As Byte Dim rpwm As Byte 'left motor
If (Combo2(0).Text = \正转\ lmotordp = &H2
ElseIf (Combo2(0).Text = \反转\ lmotordp = &H4
ElseIf (Combo2(0).Text = \停止\ lmotordp = &H0 End If 'right motor
If (Combo2(1).Text = \正转\ rMotordp = &H20
ElseIf (Combo2(1).Text = \反转\ rMotordp = &H40
24
武汉工程大学毕业设计(论文)说明书
ElseIf (Combo2(1).Text = \停止\ rMotordp = &H0 End If
lSende(0) = &H0 lSende(1) = &H0 lSende(2) = &H10 lSende(3) = &H90 lSende(4) = lmotordp lSende(5) = rMotordp 'left motor PWM
lpwm = Val(Text1(0).Text) If (lpwm <= 0) Then lpwm = 0
ElseIf (lpwm >= 100) Then lpwm = 100 End If
'right motor PWM rpwm = Val(Text1(1).Text) If (rpwm <= 0) Then rpwm = 0
ElseIf (rpwm >= 100) Then rpwm = 100 End If
lSende(6) = lpwm lSende(7) = rpwm lSende(8) = &H50 'sende(4) = 10
g_lcrcLow = bCRC(lSende, 9) And &HFF
25
武汉工程大学毕业设计(论文)说明书
g_lcrcHigh = bCRC(lSende, 9) \\ 256 lSende(1) = g_lcrcHigh lSende(0) = g_lcrcLow 'Text3(3).Text = g_lcrcLow ' Print \ MSComm1.Output = lSende 'right motor End Sub
Private Sub Form_Load()
Combo1.ListIndex = 5 ' 设置COM口选项默认值 Timer1.Enabled = False
' MSComm1.InBufferSize = 40 '初始化串口 MSComm1.InBufferCount = 0
MSComm1.InputMode = comInputModeBinary ' 二进制方式 ' MSComm1.CommPort = 1 MSComm1.Settings = \
MSComm1.RThreshold = 1 ''设置接收一个字节就产生OnComm事件 MSComm1.InputLen = 1 'input一次从缓冲区读取1字节数据 Combo2(0).Text = Combo2(0).List(0) Combo2(1).Text = Combo2(1).List(0) gi_byRcvCount = 0 g_ucRcvCrcLow = 0 g_ucRcvCrcHigh = 0 g_uCrcLow = 0 g_uCrcHigh = 0 gc_BufCount = 0 End Sub
Private Sub MSComm1_OnComm()
26
武汉工程大学毕业设计(论文)说明书
If MSComm1.CommEvent = comEvReceive Then
ga_byRcvBuf(gi_byRcvCount) = AscB(MSComm1.Input) gi_byRcvCount = gi_byRcvCount + 1 gc_BufCount = gc_BufCount + 1 'Text4.Text = AscB(MSComm1.Input) 'Text4.Text = ga_byRcvBuf(0)
If (ga_byRcvBuf(gi_byRcvCount - 1) = &H50) Then MSComm1.DTREnable = False gi_byRcvCount = 0 'Text4.Text = ga_byRcvBuf(0)
g_ucRcvCrcLow = ga_byRcvBuf(0) g_ucRcvCrcHigh = ga_byRcvBuf(1) ga_byRcvBuf(0) = 0 ga_byRcvBuf(1) = 0 g_uCrcLow = 0 g_uCrcHigh = 0 'Text4.Text = gc_BufCount
g_uCrcLow = bCRC(ga_byRcvBuf, 9) And &HFF 'Text4.Text = gc_BufCount
g_uCrcHigh = bCRC(ga_byRcvBuf, 9) \\ 256 'Text4.Text = g_uCrcHigh gc_BufCount = 0
If (g_ucRcvCrcLow = g_uCrcLow And g_ucRcvCrcHigh = g_uCrcHigh) Then
'Text4.Text = g_uCrcLow '这里执行命令
If (ga_byRcvBuf(3) = &H34) Then Text4.Text = \成功!\
27