vb中串口通讯出现乱码 20
下面的是代码,以前用同学的板子是可以直接在VB接收到数据的,至少能收到单位数0~9,现在只能显示乱码,调试后发现以下几点:(1)用串口助手可以显示81(单片机SBUF设置...
下面的是代码,以前用同学的板子是可以直接在VB接收到数据的,至少能收到单位数0~9,现在只能显示乱码,调试后发现以下几点:(1)用串口助手可以显示81(单片机SBUF设置为1);(2)MSComm1.InputMode设置为0会显示乱码,设置为 comInputModeBinary直接在Text中没显示;(3)利用SBUF&0x0F可以实现VB向单片机的传输数据,利用流水灯可以准确把握低四位的亮灭情况。其他调试可以再做,求大神解答,在线等!!!VB代码如下:Private Sub Cmdsend_Click() MSComm1.Output = Trim(Textsend.Text)End SubPrivate Sub Form_Load() MSComm1.CommPort = 3 '设置通信端口号为COM3 MSComm1.Settings = "9600,n,8,1" '设置串口3参数 MSComm1.InputMode = 0 '接收文本型数据 MSComm1.PortOpen = True '打开通信端口End SubPrivate Sub Timer1_Timer() Dim buf$ '等价于Dim buf As String, buf = Trim(MSComm1.Input) '将缓冲区内的数据读入buf变量中 If Len(buf) <> 0 Then '判断缓冲区内是否存在数据 TextReceive.Text = TextReceive.Text + Chr(13) + Chr(10) + buf '按回车键换行 End IfEnd Sub
展开
1个回答
展开全部
VB内部是使用Unicode编码的,而串口发过来的数据则是ANSI编码的,要转换后才能在VB中正常显示:
Private Sub Timer1_Timer()
Dim buf() As Byte '要设为字节数组
buf = MSComm1.Input '将缓冲区内的数据读入buf数组中
If UBound(buf) >= 0 Then '判断缓冲区内是否存在数据
TextReceive.Text = TextReceive.Text & vbCrLf & StrConv(buf, vbUnicode) '转为Unicode
End If
End Sub
限于条件,此代码未测试,如果有问题再问我
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询