广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#基于WinForm实现串口通讯
  • 680
分享到

C#基于WinForm实现串口通讯

2024-04-02 19:04:59 680人浏览 泡泡鱼
摘要

串口通讯是一种计算机常用的数据传输方式。 程序运行如下: 首先,检查计算机的串口,并获取所有串口信息。 private void CheckPort()//检查串口是否可用    

串口通讯是一种计算机常用的数据传输方式。

程序运行如下:

首先,检查计算机的串口,并获取所有串口信息。

private void CheckPort()//检查串口是否可用
        {
            myLog(2, "检测串口开始!");  //log记录函数
            comboBox1.Items.Clear();//清除控件中的当前值         
            string[] a = SerialPort.GetPortNames();
            if (a.Length != 0)
            {
                for (int i = 0; i < a.Length; i++)
                {
                    comboBox1.Items.Add(a[i]);
                }
                comboBox1.SelectedIndex = 0;//??
                myLog(2, "检测串口完成");
            }
            else
            {
                myLog(2, "无可用串口...", true);
            }
        }
        private void SetPort()//设置串口
        {
            try
            {
                serialPort1.PortName = comboBox1.Text.Trim();//串口名给了串口类
                //波特率   虚拟串口的波特率好像不能修改,但得将其赋为空,不然报错         
                // serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text.ToString().Trim());        
                // 9600;
                serialPort1.BaudRate = Convert.ToInt32("".Trim());
                //奇偶效验
                if (comboBox5.Text.Trim() == "奇校验")
                {
                    serialPort1.Parity = Parity.Odd;//将奇校验位给了sp的协议
                }
                else if (comboBox5.Text.Trim() == "偶校验")
                {
                    serialPort1.Parity = Parity.Even;
                }
                else
                {
                    serialPort1.Parity = Parity.None;
                }
                //停止位
                if (comboBox4.Text.Trim() == "1.5")
                {
                    serialPort1.StopBits = StopBits.OnePointFive;//设置停止位有几位
                }
                else if (comboBox4.Text.Trim() == "2")
                {
                    serialPort1.StopBits = StopBits.Two;
                }
                else
                {
                    serialPort1.StopBits = StopBits.One;
                }
                serialPort1.DataBits = Convert.ToInt16(comboBox3.Text.ToString().Trim());//数据位
                serialPort1.Encoding = Encoding.UTF8;//串口通信的编码格式
                serialPort1.Open();
            }
            catch { }
        }
        /// <summary>
        /// Log记录
        /// </summary>
        /// <param name="aa">aa=  0为发送  1为接受 2为日常记录</param>
        /// <param name="mystr">记录内容</param>
        /// <param name="IsHint">true 显示弹框,false 不显示弹框 默认false</param>
        private void myLog(int aa, string mystr, bool IsHint = false)
        {
            //log存放路径
            string myypath = myPath + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            StreamWriter sw = new StreamWriter(myypath, true);
            string tempSendstr;
            if (aa == 0)
            {
                tempSendstr = DateTime.Now.ToString("HH:mm:ss.fff") + "  " + serialPort1.PortName + " 发送--->>>  " + mystr;
            }
            else if (aa == 1)
            {
                tempSendstr = DateTime.Now.ToString("HH:mm:ss.fff") + "  " + serialPort1.PortName + " 接收<<<---  " + mystr;
            }
            else
            {
                tempSendstr = DateTime.Now.ToString("HH:mm:ss.fff") + "  " + mystr;
            }
            sw.WriteLine(tempSendstr);
            sw.Close();
            //弹框提示
            if (IsHint)
            {
                MessageBox.Show(mystr, "提示");
            }
            if (listBox1.Items.Count >= 10) listBox1.Items.Clear();
            listBox1.Items.Add(tempSendstr);
        }

大部分的笔记本都不带串口的,我们可以在网上下载 Configure Virtual Serial Port Driver,给自己的笔记本添加几对虚拟串口(虚拟串口都是成对且一一匹配的),再用串口调试助手就可以进行调试了。

数据的发送:

 //发送
private void button3_Click(object sender, EventArgs e)
        {
            if(!serialPort1.IsOpen)
            {
                MessageBox.Show("串口未打开,请检查!");
                return;
            }
            string mystr1 = textBox1.Text;
            byte[] a = Encoding.UTF8.GetBytes(mystr1);
            string mystr2 = Encoding.UTF8.GetString(a);
            serialPort1.Write(mystr2);//将数据写入串行端口输出缓冲区
            myLog(0, mystr2);
        }

数据接收:

//串口接收数据
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Thread.Sleep(100);
            this.Invoke((EventHandler)(delegate //异步委托一个线程
            {
                if (serialPort1.BytesToRead > 0)
                {
                    byte[] a = new byte[serialPort1.BytesToRead];//读出缓冲区串口通信的字节                                              
                    int readbytes = 0;
                    while (serialPort1.Read(a, readbytes, serialPort1.BytesToRead - readbytes) <= 0) ;
                    string str = UTF8Encoding.UTF8.GetString(a);
                    textBox2.Text = str + "\r\n";
                    myLog(1, str);
                }
            }));
        }

这是串口之间字符串的发送与接收,如要进行十六进制的传输,只需要在数据发送和接收时将字符串转化成十六进制,再写进缓冲区或读取。

多条信息发送时,可能会出现下面的情况。

串口调试助手将三次发送的数据一起读出来了,此时我们只需要在发送时给上一定的延时即可。

这样就能实现串口多条信息的发送与接收了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#基于WinForm实现串口通讯

本文链接: https://www.lsjlt.com/news/139554.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#基于WinForm实现串口通讯
    串口通讯是一种计算机常用的数据传输方式。 程序运行如下: 首先,检查计算机的串口,并获取所有串口信息。 private void CheckPort()//检查串口是否可用    ...
    99+
    2022-11-13
  • C#基于SerialPort类怎么实现串口通讯
    本篇内容主要讲解“C#基于SerialPort类怎么实现串口通讯”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#基于SerialPort类怎么实现串口通讯”吧!最终效果窗体设置:using&n...
    99+
    2023-06-29
  • C#基于SerialPort类实现串口通讯详解
    本文实例为大家分享了C#基于SerialPort类实现串口通讯的具体代码,供大家参考,具体内容如下 最终效果 窗体设置: using System; using System....
    99+
    2022-11-13
  • 基于C#实现串口通信
    本文实例为大家分享了C#实现串口通信的具体代码,供大家参考,具体内容如下 1.基本概念 2.前端winForm布局如下(仅仅为了实现功能,布局略丑) 3.代码实现如下 names...
    99+
    2022-11-13
  • c# 实现简单的串口通讯
    目录开发环境:第一步第二步第三步本文提供一个用C#实现串口通讯实例,亲自编写,亲测可用! 开发环境: VS2008+.net FrameWork3.5(实际上2.0应该也可以) 第一...
    99+
    2022-11-11
  • C#实现简单串口通讯实例
    本文实例为大家分享了C#实现简单串口通讯的具体代码,供大家参考,具体内容如下 参数设置界面代码: using System; using System.Collections.Gen...
    99+
    2022-11-13
  • C#基于Sockets类实现TCP通讯
    本文实例为大家分享了C#基于Sockets类实现TCP通讯的具体代码,供大家参考,具体内容如下 最终效果 TCPClient using System; using Syste...
    99+
    2022-11-13
  • C#怎么实现简单串口通讯
    本篇内容主要讲解“C#怎么实现简单串口通讯”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么实现简单串口通讯”吧!参数设置界面代码:using System;using ...
    99+
    2023-06-29
  • C#基于winform实现音乐播放器
    本文实例为大家分享了C#基于winform实现音乐播放器的具体代码,供大家参考,具体内容如下 首先,右键工具箱的组件,找到选择项,找到Windows Media Player组件并添...
    99+
    2022-11-13
  • C#基于Sockets类如何实现TCP通讯
    这篇文章主要介绍了C#基于Sockets类如何实现TCP通讯,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下最终效果TCPClientusing Syst...
    99+
    2023-06-29
  • 基于C语言怎么实现静态通讯录
    这篇文章主要介绍“基于C语言怎么实现静态通讯录”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于C语言怎么实现静态通讯录”文章能帮助大家解决问题。一、项目要求实现一个通讯录通讯录可以用来存储100个...
    99+
    2023-07-02
  • 基于C#的winform实现数字华容道游戏
    数字华容道游戏类似于拼图游戏,只需将数字1~15按顺序排好即可。该游戏逻辑比较简单,易于编程实现。 游戏界面如图: 编程准备: 所需控件:label 用于显示时间, 一个重新开始...
    99+
    2022-11-13
  • C#基于winform实现音乐播放器的方法
    今天小编给大家分享一下C#基于winform实现音乐播放器的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先,右键工具...
    99+
    2023-06-29
  • C#怎么实现串口通信
    本篇内容介绍了“C#怎么实现串口通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!框架准备出于简单考虑,首先创建一个Winform项目,本文...
    99+
    2023-07-05
  • C#实现简单串口通信
    串口通信(Serial Communications)是指外设和计算机间通过数据信号线、地线等按位(bit)进行传输数据的一种通信方式,属于串行通信方式,能够实现远距离通信,长度可达...
    99+
    2022-11-13
  • C#如何实现串口通信
    这篇文章主要讲解了“C#如何实现串口通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现串口通信”吧!1.基本概念2.前端winForm布局如下(仅仅为了实现功能,布局略丑)3.代...
    99+
    2023-06-29
  • C语言基于单链表实现通讯录功能
    本文实例为大家分享了C语言基于单链表实现通讯录功能的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h&...
    99+
    2022-11-12
  • c#基于WinForm的Socket实现简单的聊天室 IM
    目录1:什么是Socket2:客服端和服务端的通信简单流程3:服务端Code:4:客服端Code:5:测试效果:6:完整Code GitHUb下载路径 7:这个只是一个简单...
    99+
    2022-11-12
  • 如何基于C#的winform实现数字华容道游戏
    这篇文章给大家分享的是有关如何基于C#的winform实现数字华容道游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数字华容道游戏类似于拼图游戏,只需将数字1~15按顺序排好即可。该游戏逻辑比较简单,易于编程实...
    99+
    2023-06-29
  • 怎么​使用Java实现串口SerialPort通讯
    要使用Java实现串口通讯,你可以使用Java的RXTX库。下面是一个简单的示例代码: 首先,你需要下载并安装RXTX库。你可以...
    99+
    2023-10-23
    Java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作