| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5211 人关注过本帖
标题:如何将单片机发送给上位机的十六进制数转换成十进制数并显示?
只看楼主 加入收藏
a979562553
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
如何将单片机发送给上位机的十六进制数转换成十进制数并显示?
跪求大神帮忙,本人新手
搜索更多相关主题的帖子: 十六进制 单片机 十进制 如何 
2015-07-06 14:46
a979562553
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-6
收藏
得分:0 
在标签中显示哦
2015-07-06 14:46
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:10 
单片机发来的数据被转成字符串文本了?
  Dim a As String
  a = "4B"
  Debug.Print Val("&h" & a)


大开眼界
2015-07-06 14:57
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:10 
如果发过来是 单字节, 那就直接显示就是了。
16进制,只是在人类便于转换、书写 而设计的。

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-06 15:15
a979562553
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-6
收藏
得分:0 
回复 3楼 lianyicq
用串口调试助手显示的十六进制数是对的,但转换的时候在上位机上只显示其中一个,要不就报错
2015-07-06 15:17
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 5楼 a979562553
先看看其它贴子有问有参考价值,还是不行就把代码段传上来看看。

大开眼界
2015-07-06 15:20
a979562553
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-6
收藏
得分:0 
回复 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
2015-07-06 15:21
a979562553
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-6
收藏
得分:0 
回复 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
2015-07-06 15:22
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 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 编辑 ]

大开眼界
2015-07-06 15:40
a979562553
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-6
收藏
得分:0 
回复 8楼 a979562553
哦哦,谢谢,我拿去试试。顺便问一下,上位机与单片机除了串口通信,还需要通信协议吗
2015-07-06 15:55
快速回复:如何将单片机发送给上位机的十六进制数转换成十进制数并显示?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017399 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved