C#基于SerialPort类实现串口通讯详解

 更新时间:2022年01月31日 11:31:50   作者:迎迎一笑  
这篇文章主要为大家详细介绍了C#基于SerialPort类实现串口通讯,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C#基于SerialPort类实现串口通讯的具体代码,供大家参考,具体内容如下

最终效果

窗体设置:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;

namespace SerialCommunication
{
    public partial class Form1 : Form
    {
        System.Threading.SynchronizationContext m_SyncContext = null;
        SerialPort serialPort = null;
        ToHexadecimalString toHexadecimalString = new ToHexadecimalString();
        public Form1()
        {
            m_SyncContext = SynchronizationContext.Current;
            InitializeComponent();
        }

        //Data initialization
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] ports = SerialPort.GetPortNames();
            SerialPortNumber.Items.AddRange(ports);
            SerialPortNumber.SelectedIndex = SerialPortNumber.Items.Count > 0 ? 0 : -1;
            BaudRateCom.Text = "9600";  //Set parameters
            CheckBitCom.Text = "None";
            DataBitCom.Text = "8";
            StopBitCom.Text = "One";
        }

            //Send data
         private void Send_Click(object sender, EventArgs e)
        {
            try
            {
                //Send data and handle exceptions
                byte[] bytes = new byte[SendMessage.Text.Length];
                bytes = Encoding.Default.GetBytes(SendMessage.Text);
                serialPort.Write(bytes, 0, bytes.Length);
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message);
            }
        }
                // Byte to hexadecimal string 

        //Clear data
        private void Clear_Click(object sender, EventArgs e)
        {
            ReceiveMessage.Text = "";
        }

        private void Open_Click(object sender, EventArgs e)
        {
            string portName = SerialPortNumber.Text;
            int buadRate = int.Parse(BaudRateCom.Text);
            Parity parity = 0;
            switch (CheckBitCom.Text)
            {
                case "None":
                    parity = Parity.None; break;
                case "Odd":
                    parity = Parity.Odd; break;
                case "Even":
                    parity = Parity.Even; break;
                case "Mark":
                    parity = Parity.Mark; break;
                case "Space":
                    parity = Parity.Space; break;
            }
            int dataBit = int.Parse(DataBitCom.Text);
            StopBits stopBits = 0;
            switch (StopBitCom.Text)
            {
                case "None":
                    stopBits = StopBits.None; break;
                case "One":
                    stopBits = StopBits.One; break;
                case "Tow":
                    stopBits = StopBits.Two; break;
                case "OnePointFive":
                    stopBits = StopBits.OnePointFive; break;
            }
            try
            {
                if (Open.Text == "Open")
                {
                    serialPort = new SerialPort(portName, buadRate, parity, dataBit, stopBits);
                    serialPort.Open();
                    Open.Text = "Close";
                }
                else if (Open.Text == "Close")
                {
                    serialPort.Close();
                    Open.Text = "Open";
                }
            }
            catch (Exception errror)
            {
                MessageBox.Show(errror.Message);
            }
            serialPort.DataReceived += onDataReceived;

        }
        private void onDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                Byte[] bytes = new byte[serialPort.BytesToRead];
                serialPort.Read(bytes, 0, serialPort.BytesToRead);
                m_SyncContext.Post(new SendOrPostCallback((obj) =>
                {
                    ReceiveMessage.AppendText(Encoding.Default.GetString(bytes));
                }), bytes);
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message);
            }
        }
    }
}

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

相关文章

  • C#生成条形码图片的简单方法

    C#生成条形码图片的简单方法

    这篇文章主要介绍了C#生成条形码图片的简单方法,实例分析了了条形码图片的生成原理与实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • C#实现复制数据库 C#将A数据库数据转到B数据库

    C#实现复制数据库 C#将A数据库数据转到B数据库

    这篇文章主要为大家详细介绍了C#复制数据库,将数据库数据转到另一个数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 关于c#中单例模式的一些问题

    关于c#中单例模式的一些问题

    这篇文章主要给大家介绍了关于c#中单例模式的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C#的Excel导入、导出

    C#的Excel导入、导出

    这篇文章主要为大家详细介绍了C#的Excel导入、导出的相关资料,需要的朋友可以参考下
    2016-05-05
  • WPF实现文字粒子闪烁动画效果

    WPF实现文字粒子闪烁动画效果

    这篇文章主要为大家详细介绍了WPF实现文字粒子闪烁动画效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C#利用XML创建Excel文档的实现方法

    C#利用XML创建Excel文档的实现方法

    这篇文章主要介绍了C#利用XML创建Excel文档的实现方法,需要的朋友可以参考下
    2014-08-08
  • 探讨Object转为String的几种简易形式详解

    探讨Object转为String的几种简易形式详解

    本篇文章是对Object转为String的几种简易形式进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 如何用C#验证IP是否为局域网地址

    如何用C#验证IP是否为局域网地址

    这篇文章主要介绍了如何用C#验证IP是否为局域网地址,文中讲解非常细致,代码帮助大家更好的参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C# 网域账号(Domain)验证的实现

    C# 网域账号(Domain)验证的实现

    本文主要介绍了C# 网域账号(Domain)验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • Unity使用ScrollRect制作翻页

    Unity使用ScrollRect制作翻页

    这篇文章主要为大家详细介绍了Unity使用ScrollRect制作翻页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论