搜索
bottom↓
回复: 13

发个自编的VB.Net串口小程序,公开全部代码,程序已上传

[复制链接]

出0入0汤圆

发表于 2012-5-4 21:09:03 | 显示全部楼层 |阅读模式
本帖最后由 blackhorse21 于 2012-5-4 22:16 编辑

因为项目需要,学VB.net4天了,想编个串口程序入门。但是目前的项目暂时停止,所以短期内不需要学VB了,就把这几天写的个小程序发上来给大家看看,是一个串口小程序,功能很简单,界面也很简单,就是留个纪念。顺便提提我学VB的感想,我觉得VB确实在有了.NET框架之后比原来的还要简单了,visual studio 2010的环境也是相当友好的。大体流程是设计功能、设计界面、编写界面所需事件的处理代码,编写需要预先处理的代码。感觉还是挺好上手的一款语言,好多东西都可以在属性里头直接修改,不用写到代码里,简化了好多。代码自动提示功能真是亲切友好,而且每个代码段前面自动空了一行用来写注释,这个功能对于养成良好的代码习惯真是非常贴心。
不知道为什么,我这暂时不能上传图片和附件……贴代码吧……回头再贴图片和程序……(好吧,我知道这样这个帖子就垃圾了……但是确实传不上去啊……虽然程序只有40K……)
===============================
程序截图

刚刚试了一下,传上来了
  1. Imports System.IO.Ports
  2. Imports System.Text
  3. Imports System.ComponentModel

  4. Public Class Form1
  5.     '声明获取串口列表用的数组
  6.     Dim spnames() As String
  7.     '声明获取的每一个串口名称
  8.     Dim spname As String
  9.     '声明委托方法
  10.     Public Delegate Sub DelegateSub(ByVal Rstrdisp As String)
  11.     '被委托的方法
  12.     Public Sub DataDisplay(ByVal Rstrdisp As String)
  13.         Me.串口数据接收.AppendText(Rstrdisp)
  14.     End Sub
  15.     '串口初始化设置
  16.     Sub PortStartSet()
  17.         If spnames.Length > 0 Then
  18.             SerialPort1.PortName = 串口号列表.SelectedItem '自动选择第一个串口号。
  19.         End If
  20.         SerialPort1.BaudRate = 波特率列表.SelectedItem '波特率设置
  21.         SerialPort1.DataBits = 数据位列表.SelectedItem '数据位设置
  22.         SerialPort1.StopBits = 停止位列表.SelectedItem  '停止位设置
  23.         SerialPort1.Parity = Parity.None        '校验位设置
  24.         SerialPort1.Encoding = Encoding.Default    '字符编码形式
  25.         SerialPort1.DtrEnable = True    '启用DTR信号
  26.         SerialPort1.ReadTimeout = 500   '超时时间
  27.         SerialPort1.NewLine = vbCrLf       '行结束符合
  28.     End Sub
  29.     '打开串口
  30.     Sub PortOpen()
  31.         Try
  32.             Me.串口状态指示灯.Image = 串口小程序.My.Resources.Resources.小绿点
  33.             Me.串口开关Button2.Text = "关闭串口"
  34.             SerialPort1.Open()
  35.         Catch ex As UnauthorizedAccessException
  36.             MsgBox("串口被占用或串口错误!", MsgBoxStyle.Information, "提示!")
  37.             Me.串口状态指示灯.Image = 串口小程序.My.Resources.Resources.小红点
  38.             Me.串口开关Button2.Text = "打开串口"
  39.         End Try
  40.     End Sub
  41.     '关闭串口
  42.     Sub PortClose()
  43.         Try
  44.             Me.串口状态指示灯.Image = 串口小程序.My.Resources.Resources.小红点
  45.             Me.串口开关Button2.Text = "打开串口"
  46.             SerialPort1.Close()
  47.         Catch ex As Exception
  48.             MsgBox("串口未打开或串口异常!", MsgBoxStyle.Information, "提示!")
  49.             Me.串口状态指示灯.Image = 串口小程序.My.Resources.Resources.小绿点
  50.             Me.串口开关Button2.Text = "关闭串口"
  51.         End Try
  52.     End Sub
  53.     '获取串口号列表
  54.     Sub Getnames()
  55.         Try
  56.             spnames = SerialPort.GetPortNames()
  57.         Catch ex As Win32Exception
  58.             MessageBox.Show("查询串口号失败,请检查硬件连接或者驱动程序!")
  59.         End Try
  60.         If spnames.Length = 0 Then
  61.             MessageBox.Show("查询串口号失败,请检查硬件连接或者驱动程序后刷新串口列表。")
  62.         ElseIf spnames.Length > 0 Then
  63.             For Each Me.spname In spnames
  64.                 Me.串口号列表.Items.Add(spname)
  65.             Next spname
  66.             Me.串口号列表.Sorted = False
  67.         End If
  68.     End Sub
  69.     '串口设置界面初始化
  70.     Sub PortDisStart()
  71.         Call Getnames()
  72.         '设定串口界面的预先设置值
  73.         If spnames.Length > 0 Then
  74.             Me.串口号列表.SelectedIndex = 0
  75.         End If
  76.         Me.波特率列表.SelectedIndex = 7
  77.         Me.数据位列表.SelectedIndex = 3
  78.         Me.停止位列表.SelectedIndex = 0
  79.         Me.奇偶校验位列表.SelectedIndex = 0
  80.         Me.串口状态指示灯.Image = 串口小程序.My.Resources.Resources.小红点
  81.         Me.串口开关Button2.Text = "打开串口"
  82.     End Sub
  83.     '窗体建立时的初始化动作
  84.     Private Sub Form1_Load_1(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  85.         Call PortDisStart()
  86.         Call PortStartSet()
  87.     End Sub
  88.     '设定波特率
  89.     Private Sub 波特率列表_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles 波特率列表.SelectedIndexChanged
  90.         If SerialPort1.IsOpen = True Then
  91.             MessageBox.Show("请先关闭串口")
  92.         Else
  93.             If 波特率列表.SelectedIndex = 0 Then
  94.                 波特率列表.DropDownStyle = ComboBoxStyle.DropDown
  95.                 波特率设定按钮.Visible = True
  96.             Else
  97.                 波特率列表.DropDownStyle = ComboBoxStyle.DropDownList
  98.                 波特率设定按钮.Visible = False
  99.                 SerialPort1.BaudRate = 波特率列表.SelectedItem
  100.             End If
  101.         End If
  102.     End Sub
  103.     '打开或关闭串口
  104.     Private Sub 串口开关Button2_Click(sender As System.Object, e As System.EventArgs) Handles 串口开关Button2.Click
  105.         If Me.SerialPort1.IsOpen = False Then
  106.             Call PortOpen()
  107.         Else
  108.             Call PortClose()
  109.         End If
  110.     End Sub
  111.     '接收数据
  112.     Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
  113.         Dim Rstr As String '接收的数据字符串
  114.         Try
  115.             Rstr = Me.SerialPort1.ReadLine()
  116.             Application.DoEvents() '交出控制权,让系统完成消息队列内的任务
  117.         Catch er As TimeoutException
  118.             Rstr = Me.SerialPort1.ReadExisting()
  119.             Application.DoEvents() '交出控制权,让系统完成消息队列内的任务
  120.         End Try
  121.         Invoke(New DelegateSub(AddressOf DataDisplay), Rstr) '委托进行操作
  122.     End Sub
  123.     '清空接收区
  124.     Private Sub 清除接收区_Click(sender As System.Object, e As System.EventArgs) Handles 清除接收区.Click
  125.         Me.串口数据接收.Text = "" '清空接收区
  126.     End Sub
  127.     '清空发送区
  128.     Private Sub 清除发送区_Click(sender As System.Object, e As System.EventArgs) Handles 清除发送区.Click
  129.         Me.串口数据发送.Text = "" '清空发送区
  130.     End Sub
  131.     '发送数据
  132.     Private Sub 发送按钮_Click(sender As System.Object, e As System.EventArgs) Handles 发送按钮.Click
  133.         If SerialPort1.IsOpen = False Then
  134.             MessageBox.Show("请先打开串口")
  135.         Else
  136.             SerialPort1.Write(串口数据发送.Text) '发数据
  137.         End If
  138.     End Sub
  139.     '设定串口号
  140.     Private Sub 串口号列表_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles 串口号列表.SelectedIndexChanged
  141.         If SerialPort1.IsOpen = True Then
  142.             MessageBox.Show("请先关闭串口")
  143.         Else
  144.             SerialPort1.PortName = 串口号列表.SelectedItem '改串口号
  145.         End If
  146.     End Sub
  147.     '设定数据位
  148.     Private Sub 数据位列表_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles 数据位列表.SelectedIndexChanged
  149.         If SerialPort1.IsOpen = True Then
  150.             MessageBox.Show("请先关闭串口")
  151.         Else
  152.             SerialPort1.DataBits = 数据位列表.SelectedItem '改数据位
  153.         End If
  154.     End Sub
  155.     '设定停止位
  156.     Private Sub 停止位列表_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles 停止位列表.SelectedIndexChanged
  157.         If SerialPort1.IsOpen = True Then
  158.             MessageBox.Show("请先关闭串口")
  159.         Else
  160.             Select Case 停止位列表.SelectedItem '改停止位
  161.                 Case "1"
  162.                     SerialPort1.StopBits = 1
  163.                 Case "1.5"
  164.                     SerialPort1.StopBits = 1.5
  165.                 Case "2"
  166.                     SerialPort1.StopBits = 2
  167.             End Select
  168.         End If
  169.     End Sub
  170.     '设定奇偶校验位
  171.     Private Sub 奇偶校验位列表_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles 奇偶校验位列表.SelectedIndexChanged
  172.         If SerialPort1.IsOpen = True Then
  173.             MessageBox.Show("请先关闭串口")
  174.         Else
  175.             Select Case 奇偶校验位列表.SelectedItem
  176.                 Case "None  (无)"
  177.                     SerialPort1.Parity = Parity.None
  178.                 Case "Odd   (偶)"
  179.                     SerialPort1.Parity = Parity.Odd
  180.                 Case "Even  (奇)"
  181.                     SerialPort1.Parity = Parity.Even
  182.                 Case "Mark  (=1)"
  183.                     SerialPort1.Parity = Parity.Mark
  184.                 Case "Space (=0)"
  185.                     SerialPort1.Parity = Parity.Space
  186.             End Select
  187.         End If
  188.     End Sub
  189.     '波特率设定按钮
  190.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles 波特率设定按钮.Click
  191.         If SerialPort1.IsOpen = True Then
  192.             MessageBox.Show("请先关闭串口")
  193.         Else
  194.             If 波特率列表.Text = "custom" Then
  195.                 MessageBox.Show("请输入您需要的波特率!")
  196.             Else
  197.                 SerialPort1.BaudRate = 波特率列表.Text
  198.                 MessageBox.Show("自定义波特率成功!")
  199.             End If
  200.         End If
  201.     End Sub
  202.     '刷新串口列表
  203.     Private Sub 串口列表刷新按钮_Click(sender As System.Object, e As System.EventArgs) Handles 串口列表刷新按钮.Click
  204.         If SerialPort1.IsOpen = True Then
  205.             MessageBox.Show("请先关闭串口")
  206.         Else
  207.             SerialPort1.Close()
  208.             串口号列表.Items.Clear()
  209.             Call Getnames()
  210.             If spnames.Length > 0 Then
  211.                 Me.串口号列表.SelectedIndex = 0
  212.             End If
  213.         End If
  214.     End Sub
  215.     '复位按钮
  216.     Private Sub 复位按钮_Click(sender As System.Object, e As System.EventArgs) Handles 复位按钮.Click
  217.         Call SerialPort1.Close()
  218.         Call PortDisStart()
  219.         Call PortStartSet()
  220.     End Sub
  221.     '打开关于窗口
  222.     Private Sub 关于按钮_Click(sender As System.Object, e As System.EventArgs) Handles 关于按钮.Click
  223.         AboutBox1.Show()
  224.     End Sub
  225. End Class
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-5-4 21:12:36 | 显示全部楼层
好想学VB,LZ用的是什么版本的,可否给个下载链,

出0入0汤圆

 楼主| 发表于 2012-5-4 21:24:12 | 显示全部楼层
本帖最后由 blackhorse21 于 2012-5-4 21:25 编辑
liliuqun 发表于 2012-5-4 21:12
好想学VB,LZ用的是什么版本的,可否给个下载链,


我电脑是64位WIN7旗舰版,编程软件是64位的Visual Studio 2010,编译出来的程序设定为在32位机子上跑的。软件是在IPV6的六维空间上下载的,你要是能上的话自己搜就行,我用我的账号下载下来的种子是我的信息,你不知道能不能用,其实也可以上VERYCD搜搜看

出0入0汤圆

发表于 2012-6-17 15:21:03 | 显示全部楼层
貌似不支持 HEX 收发,也顶一下吧

出0入4汤圆

发表于 2012-8-17 00:07:27 | 显示全部楼层
能把安装包上传就更方便了

出0入0汤圆

 楼主| 发表于 2012-8-17 01:15:22 来自手机 | 显示全部楼层
mndsoftcom 发表于 2012-6-17 15:21  貌似不支持 HEX 收发,也顶一下吧

谢谢支持,确实没做这个功能

出0入0汤圆

 楼主| 发表于 2012-8-17 01:16:51 来自手机 | 显示全部楼层
xiaotaodzgzs 发表于 2012-8-17 00:07  能把安装包上传就更方便了

发布的过程没学,现在是绿色版的

出0入0汤圆

发表于 2013-2-25 10:23:27 | 显示全部楼层
好东西  要好好的支持

出0入0汤圆

发表于 2013-5-14 15:12:16 | 显示全部楼层
blackhorse21 发表于 2012-8-17 01:15
谢谢支持,确实没做这个功能

可以做个接收十六进制的吗

出200入0汤圆

发表于 2013-5-14 15:22:31 来自手机 | 显示全部楼层
很好学习

出0入0汤圆

发表于 2015-1-28 14:41:08 | 显示全部楼层
mark。。。。。。

出0入0汤圆

发表于 2015-3-13 13:41:27 | 显示全部楼层
谢谢分享~

出0入0汤圆

发表于 2015-12-8 11:45:01 | 显示全部楼层
刚学vb.net编程  串口编程例题学习很好,谢谢!

出5入14汤圆

发表于 2015-12-24 16:36:44 | 显示全部楼层
vb.net 比原来的 VB 多了一个 “委托” 的概念,不能在接受线程里直接操作 textbox 了,特木的到现在都没搞明白“委托”怎么用!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-17 10:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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