登录
首页 单片机论坛
回帖 发帖
正文

主题:如何在vb上显示单片机传来的16进制??

点击:18889 回复:22

各位大虾
我应该把inputmode 设置成text还是binary
比如
 buf= mscomm1.input
那么buf里到底读来的是什么
用text1.text=buf
为什么用binary时读总是乱码
如果让他显示出从单片机送出的16进制该怎么办
比如 在单片机中 发送 mov a,#afh
mov sbuf,a
要显示出来 是af字符该怎么办
谢谢  了
最后修改:2003-7-15 17:23:19
03-07-14 22:43
用VAL函数啊。
Val(string)  ‘返回包含于字符串内的数字,字符串中是一个适当类型的数值。
如果确认string是一个十六进制数字字符,则明确告诉VAL函数:
Dim n As Long
n = VAl("&H" & String)
03-07-15 01:49
这位大虾
我的意思是用vb来接受显示单片机送来的16进制字符
比如
单片机发送
aa11ab33445566bb   aabb是开始和结束信号
那如何在vb中能显示
aa11ab33445566bb
我设置
rthreshold是 8
Private Sub comm1_OnComm()
Dim buf1 As Variant
Dim buf$, i%
Select Case comm1.CommEvent
Case comEvReceive
inbyte = comm1.Input
For i = 0 To 7
buf = Hex(inbyte(i))
buf1 = buf1 & buf
Next
Text2.Text = n
comm1.InBufferCount = 0
End Select
End Sub
现在我把rxd和txd短结
用output命令发送
为什么在text2中显示不出来
text2.text=buf1
03-07-15 10:32
未知"Text2.Text = n" 中的 n 是什么。
其实把 rthreshold置为1(每字符处理一次)则可处理任意长度的字串:
Private Sub comm1_OnComm()
Dim s$,s1$
Select Case comm1.CommEvent
 Case comEvReceive
     s = comm1.Input
    '例: 每一字符都更新一次text2.text
         text2.text = text2.text & s
    '或: 如果"bb" 是通讯协议中固定用的的结束符,则可在收到等它出现时再更新text2.text
        s1 = s1 & s
        If Len(s1) > 2 Then
           Iif Right(s1) = "bb" then
               text2.text = s1
               '建立本串接收结束标志,通知可继续发送等
               ......
            End If
        End If
End Select
End Sub
03-07-15 11:37
多谢了
现在的问题是把从单片机的16进制 在text中显示出来
比如
单片机发送ab16进制字符
能把他在vb上显示出来
用n = VAl("&H" & String)
是什么意思
vb中往单片机里送的是asc码
作为控制字
那单片机接受到的是什么呢
03-07-15 16:02
搞清楚用ASCII码表示一个数和用字符串(由"0"-"F"字符组成)表示十六进制数两种不同概念:
前一种是机器码,它用一个码就可表示0-255:  171 = ABh = chr(&HAB)
后一种是用字符串String表示数字,它用两字符表示0-255: 171 = ABh = Val("&h" & "ab")
字符串的内容被包含在两引号中.任一字符的的ASCII码可用Asc()函数返回,如:
n = Asc(Mid("1234AB",5,1)   返回 字串中第5个字符"A"的ASCII码值: n = 41h = 65
不知你的单片机用的是那种?
03-07-15 19:30
多谢指教
请问
往单片机送命令ff时
用output命令时
单片机能收到的是什么呢
是16进制的 ff 吗
最后修改:2003-7-16 12:01:35
03-07-16 11:58
我用的是2051单片机
我不想把16进制的 ab转换为171
我只想被他在text中显示出ab
是不是我要把单字节变成双字节才能显示出来
03-07-16 12:07
机器码顾名思义只在机器运算中使用,查ASCII字符表时,你能在字符中理解它所代表的全部码值吗,有的码值根本就不能显示和打印,如chr(0),chr(32),chr(255).....在文本框显示的都是空格,无法分辨,这就是为什么要用两个十六进制字符来表示一个字节的值的原因了。
要将某一个字节的码值以两个十六进制字符表示出来(设Char是待转换的字节):
Text2.text = Right("0" &  Hex(Asc(Char)), 2)
转换流程为:查十进制码值 -> 十六进制转换 -> 双字符定位。
式中用Right()函数是为了保证少于16的码值也用两个字符表示,如:“00”,“0A”....等。
03-07-16 15:12
to ppboy:
一个学习方法:用一个十六进制文件编辑器如UltraEdit-32,新建一个文件并用它编辑,学习领会一下。祝你成功!
03-07-16 15:23

上一页下一页

工控新闻

更多新闻资讯