这篇文章主要为大家详细介绍了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类实现串口通讯详解


基础教程推荐
猜你喜欢
- C# 解析XML和反序列化的示例 2023-04-14
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- 实例详解C#实现http不同方法的请求 2022-12-26
- C#中的Linq to JSON操作详解 2023-06-08
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- Unity shader实现高斯模糊效果 2023-01-16
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20