注册 登录
编程论坛 VB6论坛

如何将单片机发送给上位机的十六进制数转换成十进制数并显示?

a979562553 发布于 2015-07-06 14:46, 5211 次点击
跪求大神帮忙,本人新手
10 回复
#2
a9795625532015-07-06 14:46
在标签中显示哦
#3
lianyicq2015-07-06 14:57
单片机发来的数据被转成字符串文本了?
  Dim a As String
  a = "4B"
  Debug.Print Val("&h" & a)

#4
风吹过b2015-07-06 15:15
如果发过来是 单字节, 那就直接显示就是了。
16进制,只是在人类便于转换、书写 而设计的。
#5
a9795625532015-07-06 15:17
回复 3楼 lianyicq
用串口调试助手显示的十六进制数是对的,但转换的时候在上位机上只显示其中一个,要不就报错
#6
lianyicq2015-07-06 15:20
回复 5楼 a979562553
先看看其它贴子有问有参考价值,还是不行就把代码段传上来看看。
#7
a9795625532015-07-06 15:21
回复 4楼 风吹过b
这是我们写的代码,能帮我们看看吗?
Private Sub Command1_Click()
MSComm1.Settings = "2400,N,8,1"  '设置波特率4800,无校验位,8位数据位,一位停止位
= 4             '设定串口端口
MSComm1.InBufferSize = 64        '设置接收缓冲区大小
MSComm1.OutBufferSize = 64       '设置发送缓冲区大小
MSComm1.RThreshold = 1          '设置并返回产生oncomm事件的字符数
MSComm1.SThreshold = 0
MSComm1.InputLen = 0             '读取整个缓冲区
MSComm1.InputMode = comInputModeText   '以文本方式接收
MSComm1.InBufferCount = 0       '清空接收缓冲区
MSComm1.OutBufferCount = 0      '清空发送缓冲区
If MSComm1.PortOpen = False Then
     MSComm1.PortOpen = True
     End If
End Sub

斌吊 2015/7/6 15:20:36
Private Sub MSComm1_OnComm()
Dim i1 As Variant
Select Case
Case comEvReceive        ' '当串口无效时候显示R th resho ld 时引起O nComm 事件
i1 = MSComm1.Input
If i Mod 2 = 0 Then
    LabelTempShow.Caption = i1
    Picture1.PSet (jishu1 * 5, Val(i1)), vbRed
    jishu1 = jishu1 + 1
    a1(jishu1 - 1) = Val(i1)
Else
    If i1 > 60 Then
        warningtime = warningtime + 1
        LabelWarningT.Caption = warningtime
        List1.AddItem "当前湿度为:" + " " + i1
    End If
    LabelHumShow.Caption = i1
    Picture1.PSet (jishu2 * 5, Val(i1)), vbbule
    jishu2 = jishu2 + 1
    a2(jishu2 - 1) = Val(i1)
End If
i = i + 1
LabelTempShow.Caption = LabelTempShow.Caption + "℃"
LabelHumShow.Caption = LabelHumShow.Caption + "RH"
If jishu1 >= 2 Then
    Picture1.Line ((jishu1 - 1) * 5, a1(jishu1 - 2))-((jishu1) * 5, a1(jishu1 - 1)), vbRed
End If
If jishu2 >= 2 Then
    Picture1.Line ((jishu2 - 1) * 5, a1(jishu2 - 2))-((jishu2) * 5, a1(jishu2 - 1)), vbbule
End If
MSComm1.InBufferCount = 0 '清空接收缓冲器
End Select
End Sub
#8
a9795625532015-07-06 15:22
回复 6楼 lianyicq
这是我们写的代码,帮我们看看吧,谢谢
Private Sub Command1_Click()
MSComm1.Settings = "2400,N,8,1"  '设置波特率4800,无校验位,8位数据位,一位停止位
= 4             '设定串口端口
MSComm1.InBufferSize = 64        '设置接收缓冲区大小
MSComm1.OutBufferSize = 64       '设置发送缓冲区大小
MSComm1.RThreshold = 1          '设置并返回产生oncomm事件的字符数
MSComm1.SThreshold = 0
MSComm1.InputLen = 0             '读取整个缓冲区
MSComm1.InputMode = comInputModeText   '以文本方式接收
MSComm1.InBufferCount = 0       '清空接收缓冲区
MSComm1.OutBufferCount = 0      '清空发送缓冲区
If MSComm1.PortOpen = False Then
     MSComm1.PortOpen = True
     End If
End Sub

斌吊 2015/7/6 15:20:36
Private Sub MSComm1_OnComm()
Dim i1 As Variant
Select Case
Case comEvReceive        ' '当串口无效时候显示R th resho ld 时引起O nComm 事件
i1 = MSComm1.Input
If i Mod 2 = 0 Then
    LabelTempShow.Caption = i1
    Picture1.PSet (jishu1 * 5, Val(i1)), vbRed
    jishu1 = jishu1 + 1
    a1(jishu1 - 1) = Val(i1)
Else
    If i1 > 60 Then
        warningtime = warningtime + 1
        LabelWarningT.Caption = warningtime
        List1.AddItem "当前湿度为:" + " " + i1
    End If
    LabelHumShow.Caption = i1
    Picture1.PSet (jishu2 * 5, Val(i1)), vbbule
    jishu2 = jishu2 + 1
    a2(jishu2 - 1) = Val(i1)
End If
i = i + 1
LabelTempShow.Caption = LabelTempShow.Caption + "℃"
LabelHumShow.Caption = LabelHumShow.Caption + "RH"
If jishu1 >= 2 Then
    Picture1.Line ((jishu1 - 1) * 5, a1(jishu1 - 2))-((jishu1) * 5, a1(jishu1 - 1)), vbRed
End If
If jishu2 >= 2 Then
    Picture1.Line ((jishu2 - 1) * 5, a1(jishu2 - 2))-((jishu2) * 5, a1(jishu2 - 1)), vbbule
End If
MSComm1.InBufferCount = 0 '清空接收缓冲器
End Select
End Sub
#9
lianyicq2015-07-06 15:40
回复 8楼 a979562553
建议用二进制方式接收。
看你定义的Dim i1 as Variant每次只接收一个字节?
确信Picture1.PSet (jishu1 * 5, Val(i1)), vbRed
中的Val(i1)能得到正确值?有没有设断点看看。
我一般这样做
Dim byte1() As Byte
If MSComm1.InBufferCount > 0 Then
byte1 = MSComm1.Input
...
 Picture1.PSet (jishu2 * 5, Val(i1)), vbbule这个vbblue写错了


[ 本帖最后由 lianyicq 于 2015-7-6 15:43 编辑 ]
#10
a9795625532015-07-06 15:55
回复 8楼 a979562553
哦哦,谢谢,我拿去试试。顺便问一下,上位机与单片机除了串口通信,还需要通信协议吗
#11
lianyicq2015-07-06 16:03
回复 10楼 a979562553
https://bbs.bccn.net/viewthread.php?tid=445148&highlight=%B4%AE%BF%DA这里面有一个单工程单机串口交联的收发例子。
单片机本身就带串口,没必要再扩展其它通信接口吧。如果数据量大,速率要求高那就有可能需要,51系列就够呛了。
1