这是我第一次发帖子,发的不好多多担待!这学期学校开了单片机的课程,我从小就喜欢捣鼓一些小玩意,家里的电器设备基本上都拆过,有些能装上去,有些则装不上去。上了大学,经济条件宽裕了,加上网络资源日渐丰富,更加喜欢玩电子了。没有单片机课之前,玩的是Arduino.但是Arduino 根本学不到什么东西,里面用的函数库文件都是别人封装好的,直接拿来用罢了。而51单片机是从零基础开始的,相当于造轮子,虽然也是别人研究出来的,但更接近于底层原理,学起来更加系统。由于有基础,所以并不是太难。调试单片机时用到串口调试软件,发现网上有好多。就想着自己能不能也写一个软件。然后就自学了vb.虽然这个开发环境是98年出版的。但是不得不说,微软的东西确实很强大,兼容性没话说。于是就开始了我的编程之路。
1.开发环境搭建
网上下载VB6.0的安装包,建议企业版!安装软件应该没啥问题,装完打开我们的VB6.0
2.软件界面设计
其实很简单,直接把左边的控件拖放到主窗体里就行了,加一些组框可以使界面更整洁
3.代码编写
- Dim fasongcishu, jieshoucishu As Integer
- Dim fasongzijie, jieshouzijie, jieshouzijie1, fasongzijie1 As Byte
- Private Sub Command5_Click()
- List1.Clear
- StatusBar1.Panels(4).Text = "接收次数:"
- StatusBar1.Panels(3).Text = "接收字节:"
- StatusBar1.Panels(2).Text = "发送次数:"
- StatusBar1.Panels(1).Text = "发送字节:"
- End Sub
- Private Sub Form_Load()
- If Option1.Value = True Then
- MSComm1.InputMode = comInputModeText
- End If
- If Option2.Value = True Then
- MSComm1.InputMode = comInputModeBinary
- End If
- GetAvailablePorts
- Combo1.Text = "COM1"
- End Sub
- Private Sub Command1_Click()
- If MSComm1.PortOpen = True Then
- MsgBox "串口已经打开"
- Else
- Dim bote, shuju, tingzhi, jiaoyan, Seting As String
- bote = Combo2.Text
- shuju = Combo3.Text
- tingzhi = Combo4.Text
- jiaoyan = Combo5.Text
- Seting = bote & "," & jiaoyan & "," & shuju & "," & tingzhi
- MSComm1.CommPort = Split(Combo1.Text, "COM")(1)
- MSComm1.Settings = Seting
- MSComm1.OutBufferCount = 0
- MSComm1.InBufferCount = 0
- MSComm1.InputMode = 0
- MSComm1.InputLen = 0
- MSComm1.PortOpen = True
- Label6.Caption = "串口已经连接"
- Shape1.BackColor = RGB(0, 200, 0)
- End If
- End Sub
- Private Sub Command2_Click()
- If MSComm1.PortOpen = False Then
- MsgBox "串口尚未打开"
- Else
- MSComm1.PortOpen = False
- Label6.Caption = "串口已经断开"
- Shape1.BackColor = RGB(200, 0, 0)
- End If
- End Sub
- Private Sub Command3_Click()
- If MSComm1.PortOpen = True Then
- MsgBox "串口已经打开,请断开连接再刷新"
- Else
- GetAvailablePorts
- Combo1.Text = "COM1"
- End If
- End Sub
- Private Sub Command4_Click()
- If MSComm1.PortOpen = False Then
- MsgBox "串口尚未连接"
- Else
- If Option1.Value = True Then
- MSComm1.InputMode = comInputModeText
- End If
- If Option2.Value = True Then
- MSComm1.InputMode = comInputModeBinary
- End If
- Me.MSComm1.Output = Text1.Text
- List1.AddItem ("来自计算机:" & Text1.Text)
- fasongzijie1 = LenB(StrConv(Text1.Text, vbFromUnicode))
- fasongzijie = fasongzijie + fasongzijie1
- StatusBar1.Panels(1).Text = "发送字节:" & fasongzijie
- fasongcishu = fasongcishu + 1
- StatusBar1.Panels(2).Text = "发送次数:" & fasongcishu
- Text1.Text = ""
- StatusBar1.Panels(5).Text = "发送成功!"
- End If
- MSComm1.OutBufferCount = 0
- MSComm1.InBufferCount = 0
- MSComm1.InputMode = 1
- MSComm1.InputLen = 0
- End Sub
- Private Sub GetAvailablePorts()
- Dim i As Integer
- Dim blnNoPort As Boolean
- With Combo1
- .Clear
- '尝试打开COM1到COM16
- For i = 1 To 16
- MSComm1.CommPort = i
- '打开错误陷阱
- On Error Resume Next
- MSComm1.PortOpen = True
- '如果串口被成功打开,则这个串口存在
- If Err.Number = 0 Then
- .AddItem "COM" & i
- .ItemData(.NewIndex) = i
- End If
- Err.Clear
- ' 关闭已打开的串口
- If MSComm1.PortOpen Then MSComm1.PortOpen = False
- ' 关闭错误陷阱
- On Error GoTo 0
- Next
- blnNoPort = .ListCount = 0
- End With
- If blnNoPort Then
- MsgBox "计算机上没有串行通信接口"
- End If
- End Sub
-
- Private Sub MSComm1_OnComm()
- Dim CommData As String
- Dim BytReceived() As Byte
- Dim strBuff As String
- Dim i As Integer
- Select Case MSComm1.CommEvent '事件发生
- Case 2
- Cls
- MSComm1.InputLen = 0 '读入缓冲区全部内容
- strBuff = MSComm1.Input '读入到缓冲区
- If strBuff = "" Then
- Else
- If MSComm1.InputMode = comInputModeBinary Then
- BytReceived() = strBuff '如果是二进制接收模式则进行数据处理,否则直接显示字符串
- For i = 0 To UBound(BytReceived)
- If Len(Hex(BytReceived(i))) = 1 Then
- strData = strData & "0" & Hex(BytReceived(i)) & " " '如果只有一个字符,则前补0,如F显示0F,最后补空格
- Else '方便显示观察如: 00 0F FE
- strData = strData & Hex(BytReceived(i)) & " "
- End If
- Next
- CommData = strData
- strData = ""
- Else
- CommData = strBuff
- End If
-
- List1.AddItem ("来自单片机:" & CommData)
- jieshoucishu = jieshoucishu + 1
- StatusBar1.Panels(4).Text = "接收次数:" & jieshoucishu
- jieshouzijie1 = LenB(StrConv(CommData, vbFromUnicode))
- jieshouzijie = jieshouzijie + jieshouzijie1
- StatusBar1.Panels(3).Text = "接收字节:" & jieshouzijie
- End If
- End Select
- End Sub
复制代码
4.和另外一个串口调试软件进行连接通讯
窗体小一点的是我的软件,后面的是某国产软件。对了,在同一台电脑上调试时需要虚拟串口软件
COM2和COM3就是虚拟串口生成的端口。
分别对应我们软件里的串口COM2和COM3
差不多就是这些了,单片机里设置好了串口通讯的参数,连接电脑,用我的软件就可以调试了。最简单的可以控制LED 的亮灭。上位机软件就是这样开发出来的,怎么样,你Get到了吗?
|