这篇文章主要为大家详细介绍了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#基于SerialPort类实现串口通讯详解
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
猜你喜欢
- Oracle中for循环的使用方法 2023-07-04
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- user32.dll 函数说明小结 2022-12-26
- Unity Shader实现模糊效果 2023-04-27
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- Unity3D实现渐变颜色效果 2023-01-16
- 如何使用C# 捕获进程输出 2023-03-10
- .NET CORE DI 依赖注入 2023-09-27
- c# 模拟线性回归的示例 2023-03-14