找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8261|回复: 16
打印 上一主题 下一主题
收起左侧

VB6.0制作串口调试软件代码设计详解

  [复制链接]
跳转到指定楼层
楼主
这是我第一次发帖子,发的不好多多担待!这学期学校开了单片机的课程,我从小就喜欢捣鼓一些小玩意,家里的电器设备基本上都拆过,有些能装上去,有些则装不上去。上了大学,经济条件宽裕了,加上网络资源日渐丰富,更加喜欢玩电子了。没有单片机课之前,玩的是Arduino.但是Arduino 根本学不到什么东西,里面用的函数库文件都是别人封装好的,直接拿来用罢了。而51单片机是从零基础开始的,相当于造轮子,虽然也是别人研究出来的,但更接近于底层原理,学起来更加系统。由于有基础,所以并不是太难。调试单片机时用到串口调试软件,发现网上有好多。就想着自己能不能也写一个软件。然后就自学了vb.虽然这个开发环境是98年出版的。但是不得不说,微软的东西确实很强大,兼容性没话说。于是就开始了我的编程之路。
1.开发环境搭建
网上下载VB6.0的安装包,建议企业版!安装软件应该没啥问题,装完打开我们的VB6.0


2.软件界面设计

其实很简单,直接把左边的控件拖放到主窗体里就行了,加一些组框可以使界面更整洁


3.代码编写
  1. Dim fasongcishu, jieshoucishu As Integer
  2. Dim fasongzijie, jieshouzijie, jieshouzijie1, fasongzijie1 As Byte

  3. Private Sub Command5_Click()
  4. List1.Clear
  5. StatusBar1.Panels(4).Text = "接收次数:"
  6. StatusBar1.Panels(3).Text = "接收字节:"
  7. StatusBar1.Panels(2).Text = "发送次数:"
  8. StatusBar1.Panels(1).Text = "发送字节:"
  9. End Sub

  10. Private Sub Form_Load()
  11. If Option1.Value = True Then
  12. MSComm1.InputMode = comInputModeText
  13. End If
  14. If Option2.Value = True Then
  15. MSComm1.InputMode = comInputModeBinary
  16. End If
  17. GetAvailablePorts
  18. Combo1.Text = "COM1"
  19. End Sub
  20. Private Sub Command1_Click()
  21. If MSComm1.PortOpen = True Then
  22. MsgBox "串口已经打开"
  23. Else

  24. Dim bote, shuju, tingzhi, jiaoyan, Seting As String
  25. bote = Combo2.Text
  26. shuju = Combo3.Text
  27. tingzhi = Combo4.Text
  28. jiaoyan = Combo5.Text
  29. Seting = bote & "," & jiaoyan & "," & shuju & "," & tingzhi
  30. MSComm1.CommPort = Split(Combo1.Text, "COM")(1)
  31. MSComm1.Settings = Seting
  32. MSComm1.OutBufferCount = 0
  33. MSComm1.InBufferCount = 0

  34. MSComm1.InputMode = 0
  35. MSComm1.InputLen = 0

  36. MSComm1.PortOpen = True
  37. Label6.Caption = "串口已经连接"
  38. Shape1.BackColor = RGB(0, 200, 0)
  39. End If
  40. End Sub

  41. Private Sub Command2_Click()
  42. If MSComm1.PortOpen = False Then
  43. MsgBox "串口尚未打开"
  44. Else
  45. MSComm1.PortOpen = False
  46. Label6.Caption = "串口已经断开"
  47. Shape1.BackColor = RGB(200, 0, 0)
  48. End If
  49. End Sub

  50. Private Sub Command3_Click()
  51. If MSComm1.PortOpen = True Then
  52. MsgBox "串口已经打开,请断开连接再刷新"
  53. Else
  54. GetAvailablePorts
  55. Combo1.Text = "COM1"
  56. End If
  57. End Sub



  58. Private Sub Command4_Click()
  59. If MSComm1.PortOpen = False Then
  60. MsgBox "串口尚未连接"
  61. Else

  62.   If Option1.Value = True Then
  63.   MSComm1.InputMode = comInputModeText
  64.   End If
  65.   If Option2.Value = True Then
  66.   MSComm1.InputMode = comInputModeBinary
  67.   End If
  68. Me.MSComm1.Output = Text1.Text
  69. List1.AddItem ("来自计算机:" & Text1.Text)
  70. fasongzijie1 = LenB(StrConv(Text1.Text, vbFromUnicode))
  71. fasongzijie = fasongzijie + fasongzijie1
  72. StatusBar1.Panels(1).Text = "发送字节:" & fasongzijie
  73. fasongcishu = fasongcishu + 1
  74. StatusBar1.Panels(2).Text = "发送次数:" & fasongcishu
  75. Text1.Text = ""
  76. StatusBar1.Panels(5).Text = "发送成功!"
  77. End If
  78. MSComm1.OutBufferCount = 0
  79. MSComm1.InBufferCount = 0
  80. MSComm1.InputMode = 1
  81. MSComm1.InputLen = 0
  82. End Sub

  83. Private Sub GetAvailablePorts()
  84.     Dim i As Integer
  85.     Dim blnNoPort As Boolean
  86.     With Combo1
  87.         .Clear
  88.         '尝试打开COM1到COM16
  89.         For i = 1 To 16
  90.             MSComm1.CommPort = i
  91.             '打开错误陷阱
  92.             On Error Resume Next
  93.             MSComm1.PortOpen = True
  94.             '如果串口被成功打开,则这个串口存在
  95.             If Err.Number = 0 Then
  96.                 .AddItem "COM" & i
  97.                 .ItemData(.NewIndex) = i
  98.             End If
  99.             Err.Clear
  100.             ' 关闭已打开的串口
  101.             If MSComm1.PortOpen Then MSComm1.PortOpen = False
  102.             ' 关闭错误陷阱
  103.             On Error GoTo 0
  104.         Next
  105.         blnNoPort = .ListCount = 0
  106.     End With
  107.     If blnNoPort Then
  108.         MsgBox "计算机上没有串行通信接口"
  109.     End If
  110. End Sub

  111.   


  112. Private Sub MSComm1_OnComm()

  113. Dim CommData As String
  114. Dim BytReceived() As Byte
  115.      Dim strBuff As String
  116.      Dim i As Integer
  117.      Select Case MSComm1.CommEvent    '事件发生
  118.         Case 2
  119.              Cls
  120.              MSComm1.InputLen = 0     '读入缓冲区全部内容
  121.             strBuff = MSComm1.Input '读入到缓冲区
  122. If strBuff = "" Then
  123.             Else
  124.          If MSComm1.InputMode = comInputModeBinary Then
  125.              BytReceived() = strBuff '如果是二进制接收模式则进行数据处理,否则直接显示字符串
  126.             For i = 0 To UBound(BytReceived)
  127.                  If Len(Hex(BytReceived(i))) = 1 Then
  128.                      strData = strData & "0" & Hex(BytReceived(i)) & " " '如果只有一个字符,则前补0,如F显示0F,最后补空格
  129.                 Else                                                    '方便显示观察如: 00 0F FE
  130.                     strData = strData & Hex(BytReceived(i)) & " "
  131.                  End If
  132.             Next
  133.              CommData = strData
  134.              strData = ""
  135.          Else
  136.              CommData = strBuff
  137.          End If
  138.      

  139. List1.AddItem ("来自单片机:" & CommData)
  140. jieshoucishu = jieshoucishu + 1
  141. StatusBar1.Panels(4).Text = "接收次数:" & jieshoucishu
  142. jieshouzijie1 = LenB(StrConv(CommData, vbFromUnicode))
  143. jieshouzijie = jieshouzijie + jieshouzijie1
  144. StatusBar1.Panels(3).Text = "接收字节:" & jieshouzijie
  145. End If
  146. End Select
  147. End Sub
复制代码

4.和另外一个串口调试软件进行连接通讯


窗体小一点的是我的软件,后面的是某国产软件。对了,在同一台电脑上调试时需要虚拟串口软件

COM2和COM3就是虚拟串口生成的端口。
分别对应我们软件里的串口COM2和COM3

差不多就是这些了,单片机里设置好了串口通讯的参数,连接电脑,用我的软件就可以调试了。最简单的可以控制LED 的亮灭。上位机软件就是这样开发出来的,怎么样,你Get到了吗?

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏14 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:190832 发表于 2019-3-14 22:33 | 只看该作者
建议试试C#的winform
回复

使用道具 举报

板凳
ID:445926 发表于 2019-3-14 22:56 | 只看该作者
hange_v 发表于 2019-3-14 22:33
建议试试C#的winform

VB.NET我也会和C#.NET 差不多。不过我不喜欢C#的对括号{}
回复

使用道具 举报

地板
ID:193628 发表于 2019-3-16 16:48 | 只看该作者
玩的不错啊,好~~~~~~~~~~
回复

使用道具 举报

5#
ID:333807 发表于 2019-4-5 17:30 | 只看该作者
好厉害啊
回复

使用道具 举报

6#
ID:240545 发表于 2019-4-5 23:14 | 只看该作者
mark,赞一个!
回复

使用道具 举报

7#
ID:476871 发表于 2019-4-6 11:09 | 只看该作者
很好,楼主赞一个
回复

使用道具 举报

8#
ID:633458 发表于 2019-10-31 19:32 | 只看该作者
大佬帮帮我QAQ,我这边直接接收是正常的,但是只要往外发送数据之后,再接收到的就全是16进制了QAQ
回复

使用道具 举报

9#
ID:637553 发表于 2019-11-7 16:47 | 只看该作者
幸福假小子 发表于 2019-3-14 22:56
VB.NET我也会和C#.NET 差不多。不过我不喜欢C#的对括号{}

Private Sub Form_Load()
MSComm1.CommPort = 4 '设定 Com1 用来进行串口通讯
MSComm1.PortOpen = True
MSComm1.Settings = "9600,n,8,1"  '9600 波特率,无校验,8 位数据位,1 位停止位


MSComm1.Output = Text1.Text '将 Text1 中的字符串写入传输寄存器
'Text2.Text = MSComm1.Input
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = flse
End Sub

Private Sub Timer1_Timer()

Dim buffer As String '定义 buffer 为字符串
buffer = MSComm1.Input '将接收寄存器中的字符赋值给 buffer
List1.AddItem buffer '将 buffer 的值加入到列表框中显示出来
End Sub
回复

使用道具 举报

10#
ID:637553 发表于 2019-11-7 16:47 | 只看该作者
幸福假小子 发表于 2019-3-14 22:56
VB.NET我也会和C#.NET 差不多。不过我不喜欢C#的对括号{}

CY:
求指点一下,VB做一个通讯,读多功能仪表数据

CY:
读不出来,

CY:
问题出在哪里

CY:
串口2.3脚短接,文本框能显示出发送的指令码。
回复

使用道具 举报

11#
ID:609560 发表于 2019-11-8 09:37 | 只看该作者
CYY8530 发表于 2019-11-7 16:47
CY:
求指点一下,VB做一个通讯,读多功能仪表数据

先用下位機返回數據接收結果,確保數據被正確接收。然後再檢查下位機接收數據處理方法及返回數據
回复

使用道具 举报

12#
ID:298008 发表于 2020-3-29 11:18 | 只看该作者
谢谢楼主分享!!!
回复

使用道具 举报

13#
ID:323651 发表于 2020-10-21 21:34 | 只看该作者
谢谢分享,做些简单应用,不错的
回复

使用道具 举报

14#
ID:848824 发表于 2021-2-17 13:21 | 只看该作者
怎么控制小灯亮灭
回复

使用道具 举报

15#
ID:1016815 发表于 2022-4-8 18:16 | 只看该作者
朋友能发源文件不,比较菜,困难多,谢谢!
回复

使用道具 举报

16#
ID:1010435 发表于 2022-4-9 22:39 | 只看该作者
我只会用VB做计算器
回复

使用道具 举报

17#
ID:1011216 发表于 2022-4-10 09:52 来自手机 | 只看该作者
串口简单收发不难,难再于多次收发还能稳定实现功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表