热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《串口编程调试代码》之二

《串口编程调试代码》之二主form**********************************字符表示的十六进制数转化为相应的整数错误则返回-1*

《串口编程调试代码》之二

主form 

'********************************** 
'字符表示的十六进制数转化为相应的整数 
'错误则返回  -1 
'********************************** 

Function ConvertHexChr(str As String) As Integer 
     
    Dim test As Integer 
     
    test = Asc(str) 
    If test >= Asc("0") And test <= Asc("9") Then
test = test - Asc("0")
ElseIf test >= Asc("a") And test <= Asc("f") Then
test = test - Asc("a") + 10
ElseIf test >= Asc("A") And test <= Asc("F") Then
test = test - Asc("A") + 10
Else
test = -1 '出错信息
End If
COnvertHexChr= test

End Function

'**********************************
'字符串表示的十六进制数据转化为相应的字节串
'返回转化后的字节数
'**********************************

Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer

Dim HexData As Integer '十六进制(二进制)数据字节对应值
Dim hstr As String * 1 '高位字符
Dim lstr As String * 1 '低位字符
Dim HighHexData As Integer '高位数值
Dim LowHexData As Integer '低位数值
Dim HexDataLen As Integer '字节数
Dim StringLen As Integer '字符串长度
Dim Account As Integer '计数

strTestn = "" '设初值
HexDataLen = 0
strHexToByteArray = 0

StringLen = Len(strText)
Account = StringLen / 2
ReDim bytByte(Account)

For n = 1 To StringLen

Do '清除空格
hstr = Mid(strText, n, 1)
n = n + 1
If (n - 1) > StringLen Then 
                HexDataLen = HexDataLen - 1 
                 
                Exit For 
            End If 
        Loop While hstr = " " 
         
        Do 
            lstr = Mid(strText, n, 1) 
            n = n + 1 
            If (n - 1) > StringLen Then 
                HexDataLen = HexDataLen - 1 
                 
                Exit For 
            End If 
        Loop While lstr = " " 
        n = n - 1 
        If n > StringLen Then 
            HexDataLen = HexDataLen - 1 
            Exit For 
        End If 
         
        HighHexData = ConvertHexChr(hstr) 
        LowHexData = ConvertHexChr(lstr) 
         
        If HighHexData = -1 Or LowHexData = -1 Then     '遇到非法字符中断转化 
            HexDataLen = HexDataLen - 1 
             
            Exit For 
        Else 
             
            HexData = HighHexData * 16 + LowHexData 
            bytByte(HexDataLen) = HexData 
            HexDataLen = HexDataLen + 1 
             
             
        End If 
                         
    Next n 
     
    If HexDataLen > 0 Then                              '修正最后一次循环改变的数值 
        HexDataLen = HexDataLen - 1 
        ReDim Preserve bytByte(HexDataLen) 
    Else 
        ReDim Preserve bytByte(0) 
    End If 
     
     
    If StringLen = 0 Then                               '如果是空串,则不会进入循环体 
        strHexToByteArray = 0 
    Else 
        strHexToByteArray = HexDataLen + 1 
    End If 
     
     
End Function 

 


'********************************** 


Private Sub cboHexAscii_Click() 

     
     
    If frmMain.cboHexAscii.Text = "按ASCII码" Then 
        intOutMode = 0 
         
    Else 
        intOutMode = 1 
         
    End If 
         
End Sub 

Private Sub chkAddress_Click() 
     
    If chkAddress.Value = 0 Then 
        intAddressChk = 0 
    Else 
        intAddressChk = 1 
    End If 
     
    Call ScrollRedisplay 
     
End Sub 

Private Sub chkAddress48_Click() 
     
    If chkAddress48.Value = 1 Then 
        intAdd48Chk = 1 
    Else 
        intAdd48Chk = 0 
    End If 
     
    Call SlideRedisplay 
     
End Sub 

Private Sub chkAscii_Click() 
     
    If chkAscii.Value = 1 Then 
        intAsciiChk = 1 
    Else 
        intAsciiChk = 0 
    End If 
     
    Call ScrollRedisplay 
     
End Sub 

Private Sub chkHex_Click() 
     
    If chkHex.Value = 0 Then 
        intHexChk = 0 
    Else 
        intHexChk = 1 
    End If 
     
    Call ScrollRedisplay 
     
End Sub 

Private Sub cmdAutoSend_Click() 
     
    If blnAutoSendFlag Then 
         
        frmMain.ctrTimer.Enabled = False 
         
        If Not blnReceiveFlag Then 
            frmMain.ctrMSComm.PortOpen = False 
        End If 
         
        frmMain.cmdAutoSend.Caption = "自动发送" 
    Else 
        If Not frmMain.ctrMSComm.PortOpen Then 
            frmMain.ctrMSComm.CommPort = intPort 
            frmMain.ctrMSComm.Settings = strSet 
            frmMain.ctrMSComm.PortOpen = True 
        End If 
         
        frmMain.ctrTimer.Interval = intTime 
        frmMain.ctrTimer.Enabled = True 
        frmMain.cmdAutoSend.Caption = "停止发送" 
    End If 
         
     
         
    blnAutoSendFlag = Not blnAutoSendFlag 
     
     
End Sub 

Private Sub cmdClear_Click() 

    Dim bytTemp(0) As Byte 
     
    ReDim bytReceiveByte(0) 
    intReceiveLen = 0 
     
    Call InputManage(bytTemp, 0) 
     
    Call GetDisplayText 
    Call display 
     
     
End Sub 

Private Sub cmdManualSend_Click() 
     
    If Not frmMain.ctrMSComm.PortOpen Then 
        frmMain.ctrMSComm.CommPort = intPort 
        frmMain.ctrMSComm.Settings = strSet 
        frmMain.ctrMSComm.PortOpen = True 
    End If 
     
        Call ctrTimer_Timer 
         
    If Not blnAutoSendFlag Then 
     
    frmMain.ctrMSComm.PortOpen = False 
    End If 
     
End Sub 

Private Sub cmdReceive_Click() 
     
     
    If blnReceiveFlag Then 
         
        If Not blnAutoSendFlag And Not blnReceiveFlag Then 
            frmMain.ctrMSComm.PortOpen = False 
        End If 
         
        frmMain.cmdReceive.Caption = "开始接收" 
    Else 
         
        If Not frmMain.ctrMSComm.PortOpen Then 
            frmMain.ctrMSComm.CommPort = intPort 
            frmMain.ctrMSComm.Settings = strSet 
            frmMain.ctrMSComm.PortOpen = True 
        End If 
         
        frmMain.ctrMSComm.InputLen = 0 
        frmMain.ctrMSComm.InputMode = 0 
         
     
        frmMain.ctrMSComm.InBufferCount = 0 
        frmMain.ctrMSComm.RThreshold = 1 
        frmMain.cmdReceive.Caption = "停止接收" 
    End If 
     
    blnReceiveFlag = Not blnReceiveFlag 
     
         
End Sub 

Private Sub cmdSetting_Click() 
     
    dlgSetting.Show 
    dlgSetting.txtPort.Text = str(intPort) 
    dlgSetting.txtSetting.Text = strSet 
    dlgSetting.txtTime.Text = str(intTime) 


End Sub 

Private Sub ctrMSComm_OnComm() 
     
    Dim bytInput() As Byte 
    Dim intInputLen As Integer 
     
     
    Select Case frmMain.ctrMSComm.CommEvent 
         
         
        Case comEvReceive 
            If blnReceiveFlag Then 
             
                If Not frmMain.ctrMSComm.PortOpen Then 
                    frmMain.ctrMSComm.CommPort = intPort 
                    frmMain.ctrMSComm.Settings = strSet 
                    frmMain.ctrMSComm.PortOpen = True 
                End If 
                 
                '此处添加处理接收的代码 
                 
                frmMain.ctrMSComm.InputMode = comInputModeBinary 
                intInputLen = frmMain.ctrMSComm.InBufferCount 
                ReDim bytInput(intInputLen) 
                bytInput = frmMain.ctrMSComm.Input 
                Call InputManage(bytInput, intInputLen) 
                Call GetDisplayText 
                Call display 
       
                 
                If Not blnAutoSendFlag And Not blnReceiveFlag Then 
                    frmMain.ctrMSComm.PortOpen = False 
                End If 
            End If 
             
    End Select 
     
End Sub 

Private Sub ctrTimer_Timer() 
    Dim longth As Integer 
     
    strSendText = frmMain.txtSend.Text 
    If intOutMode = 0 Then 
        frmMain.txtReceive.Text = "ascii" 
        frmMain.ctrMSComm.Output = strSendText 
    Else 
        'add code 
        lOngth= strHexToByteArray(strSendText, bytSendByte()) 
         
        If longth > 0 Then 
            frmMain.ctrMSComm.Output = bytSendByte 
        End If 
         
    End If 

End Sub 

'***************************************** 
'初始化 
'***************************************** 


Private Sub Form_Load() 


    '设置默认发送接收关闭状态 
    blnAutoSendFlag = False 
    blnReceiveFlag = False 
     
    '接收初始化 
    intReceiveLen = 0 
     
    '默认发送方式为ASCII 
    intOutMode = 0 
    frmMain.cboHexAscii.Text = "按ASCII码" 
     
    '默认显示宽度位数为8 
    intHexWidth = 8 
     
    frmMain.sldLenth(0).Value = intHexWidth 
     
    '默认各复选框处于选定状态 
    intHexChk = 1 
    intAsciiChk = 1 
    intAddressChk = 1 
    intAdd48Chk = 1 
     
    frmMain.chkAddress.Value = intAddressChk 
    frmMain.chkAscii.Value = intAsciiChk 
    frmMain.chkHex.Value = intHexChk 
    frmMain.chkAddress48.Value = intAdd48Chk 
     
    '初始化显示视窗 
    frmMain.fraHexEditBackground.Left = frmMain.txtReceive.Left + 30 
    frmMain.fraHexEditBackground.Top = frmMain.txtReceive.Top + 30 
    frmMain.fraHexEditBackground.Width = frmMain.txtReceive.Width - 60 
    frmMain.fraHexEditBackground.Height = frmMain.txtReceive.Height - 60 
     
    frmMain.txtHexEditAddress.Top = 0 
    frmMain.txtHexEditHex.Top = 0 
    frmMain.txtHexEditText.Top = 0 
    frmMain.txtBlank.Top = 0 
     
    frmMain.txtHexEditAddress.Height = frmMain.fraHexEditBackground.Height 
    frmMain.txtHexEditHex.Height = frmMain.fraHexEditBackground.Height 
    frmMain.txtHexEditText.Height = frmMain.fraHexEditBackground.Height 
    frmMain.txtBlank.Height = frmMain.fraHexEditBackground.Height 
     
    '初始化滚动条 
    frmMain.vsclHexEdit.Width = 2 * ChrWidth 
    frmMain.vsclHexEdit.Top = frmMain.fraHexEditBackground.Top 
    frmMain.vsclHexEdit.Left = frmMain.fraHexEditBackground.Left + frmMain.fraHexEditBackground.Width - frmMain.vsclHexEdit.Width 
    frmMain.vsclHexEdit.Height = frmMain.fraHexEditBackground.Height 
     
    frmMain.hsclHexEdit.Height = ChrHeight 
    frmMain.hsclHexEdit.Left = frmMain.fraHexEditBackground.Left 
    frmMain.hsclHexEdit.Top = frmMain.fraHexEditBackground.Top + frmMain.fraHexEditBackground.Height - frmMain.hsclHexEdit.Height 
    frmMain.hsclHexEdit.Width = frmMain.fraHexEditBackground.Width 
     
     
    '设置滚动条最小和最大滚动 
    frmMain.vsclHexEdit.Min = 0 
    frmMain.vsclHexEdit.SmallChange = 1 
    frmMain.vsclHexEdit.LargeChange = 3 
    frmMain.vsclHexEdit.Value = 0 
     
    frmMain.hsclHexEdit.Min = 0 
    frmMain.hsclHexEdit.SmallChange = 1 
    frmMain.hsclHexEdit.LargeChange = 3 
    frmMain.hsclHexEdit.Value = 0 
     
    '显示初始化 
    Call cmdClear_Click 
     
     '初始化串行口 
    intPort = 2 
    intTime = 1000 
    strSet = "9600,n,8,1" 
    frmMain.ctrMSComm.InBufferSize = 1024 
    frmMain.ctrMSComm.OutBufferSize = 512 
     
     
    If Not frmMain.ctrMSComm.PortOpen Then 
        frmMain.ctrMSComm.CommPort = intPort 
        frmMain.ctrMSComm.Settings = strSet 
        frmMain.ctrMSComm.PortOpen = True 
    End If 
     
    frmMain.ctrMSComm.PortOpen = False 
     
     
End Sub 


Private Sub hsclHexEdit_Change() 
    intOriginX = -frmMain.hsclHexEdit.Value * ChrWidth 
    Call ScrollRedisplay 
End Sub 

Private Sub sldLenth_Change(Index As Integer) 

    intHexWidth = frmMain.sldLenth(0).Value 
    Call SlideRedisplay 
     

End Sub 

Private Sub vsclHexEdit_Change() 

    intOriginY = frmMain.vsclHexEdit.Value 
    Call ScrollRedisplay 
     
End Sub


推荐阅读
  • 流数据流和IO流的使用及应用
    本文介绍了流数据流和IO流的基本概念和用法,包括输入流、输出流、字节流、字符流、缓冲区等。同时还介绍了异常处理和常用的流类,如FileReader、FileWriter、FileInputStream、FileOutputStream、OutputStreamWriter、InputStreamReader、BufferedReader、BufferedWriter等。此外,还介绍了系统流和标准流的使用。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
author-avatar
手机用户2502891985
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有