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书生
科技发烧友

2018-03-17 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部

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

限于条件,此代码未测试,如果有问题再问我

更多追问追答
追问

追答
MSComm1.InputMode = 1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式