我是靠谱客的博主 朴实帆布鞋,最近开发中收集的这篇文章主要介绍C# 串口通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO.Ports;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace BXHSerialPort

{

public partial class frmSerialPort : Form

{

private SerialPort ComDevice = new SerialPort();

public frmSerialPort()

{

InitializeComponent();

this.init();

}

public void init()

{

btnSend.Enabled = false;

cbbComList.Items.AddRange(SerialPort.GetPortNames());

if (cbbComList.Items.Count > 0)

{

cbbComList.SelectedIndex = 0;

}

cbbBaudRate.SelectedIndex = 5;

cbbDataBits.SelectedIndex = 0;

cbbParity.SelectedIndex = 0;

cbbStopBits.SelectedIndex = 0;

pictureBox1.BackgroundImage = Properties.Resources.red;

ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件

}

/// <summary>

/// 打开串口

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnOpen_Click(object sender, EventArgs e)

{

if (cbbComList.Items.Count <= 0)

{

MessageBox.Show("没有发现串口,请检查线路!");

return;

}

if (ComDevice.IsOpen == false)

{

ComDevice.PortName = cbbComList.SelectedItem.ToString();

ComDevice.BaudRate = Convert.ToInt32(cbbBaudRate.SelectedItem.ToString());

ComDevice.Parity = (Parity)Convert.ToInt32(cbbParity.SelectedIndex.ToString());

ComDevice.DataBits = Convert.ToInt32(cbbDataBits.SelectedItem.ToString());

ComDevice.StopBits = (StopBits)Convert.ToInt32(cbbStopBits.SelectedItem.ToString());

try

{

ComDevice.Open();

btnSend.Enabled = true;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

btnOpen.Text = "关闭串口";

pictureBox1.BackgroundImage = Properties.Resources.green;

}

else

{

try

{

ComDevice.Close();

btnSend.Enabled = false;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

btnOpen.Text = "打开串口";

pictureBox1.BackgroundImage = Properties.Resources.red;

}

cbbComList.Enabled = !ComDevice.IsOpen;

cbbBaudRate.Enabled = !ComDevice.IsOpen;

cbbParity.Enabled = !ComDevice.IsOpen;

cbbDataBits.Enabled = !ComDevice.IsOpen;

cbbStopBits.Enabled = !ComDevice.IsOpen;

}

/// <summary>

/// 关闭串口

/// </summary>

public void ClearSelf()

{

if (ComDevice.IsOpen)

{

ComDevice.Close();

}

}

/// <summary>

/// 发送数据

/// </summary>

/// <param name="sender"></param>

/// <param name="data"></param>

public bool SendData(byte[] data)

{

if (ComDevice.IsOpen)

{

try

{

ComDevice.Write(data, 0, data.Length);//发送数据

return true;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

else

{

MessageBox.Show("串口未打开", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

return false;

}

/// <summary>

/// 发送数据button事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnSend_Click(object sender, EventArgs e)

{

byte[] sendData = null;

if (rbtnSendHex.Checked)

{

sendData = strToHexByte(txtSendData.Text.Trim());

}

else if (rbtnSendASCII.Checked)

{

sendData = Encoding.ASCII.GetBytes(txtSendData.Text.Trim());

}

else if (rbtnSendUTF8.Checked)

{

sendData = Encoding.UTF8.GetBytes(txtSendData.Text.Trim());

}

else if (rbtnSendUnicode.Checked)

{

sendData = Encoding.Unicode.GetBytes(txtSendData.Text.Trim());

}

else

{

sendData = Encoding.ASCII.GetBytes(txtSendData.Text.Trim());

}

if (this.SendData(sendData))//发送数据成功计数

{

lblSendCount.Invoke(new MethodInvoker(delegate

{

lblSendCount.Text = (int.Parse(lblSendCount.Text) + txtSendData.Text.Length).ToString();

}));

}

else

{

}

}

/// <summary>

/// 字符串转换16进制字节数组

/// </summary>

/// <param name="hexString"></param>

/// <returns></returns>

private byte[] strToHexByte(string hexString)

{

hexString = hexString.Replace(" ", "");

if ((hexString.Length % 2) != 0) hexString += " ";

byte[] returnBytes = new byte[hexString.Length / 2];

for (int i = 0; i < returnBytes.Length; i++)

returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Replace(" ",""), 16);

return returnBytes;

}

/// <summary>

/// 接收数据

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

Console.WriteLine("c# b debug ");

Console.WriteLine(ComDevice.BytesToRead);

byte[] ReDatas = new byte[ComDevice.BytesToRead];

ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据

Console.WriteLine(ReDatas.Length);

Console.WriteLine("c# end debug ");

this.AddData(ReDatas);//输出数据

}

/// <summary>

/// 添加数据

/// </summary>

/// <param name="data">字节数组</param>

public void AddData(byte[] data)

{

if (rbtnHex.Checked)

{

StringBuilder sb = new StringBuilder();

for (int i = 0; i < data.Length; i++)

{

sb.AppendFormat("{0:x2}" + " ", data[i]);

}

AddContent(sb.ToString().ToUpper());

}

else if (rbtnASCII.Checked)

{

AddContent(new ASCIIEncoding().GetString(data));

}

else if (rbtnUTF8.Checked)

{

AddContent(new UTF8Encoding().GetString(data));

}

else if (rbtnUnicode.Checked)

{

AddContent(new UnicodeEncoding().GetString(data));

}

else

{}

lblRevCount.Invoke(new MethodInvoker(delegate

{

lblRevCount.Text = (int.Parse(lblRevCount.Text) + data.Length).ToString();

}));

}

/// <summary>

/// 输入到显示区域

/// </summary>

/// <param name="content"></param>

private void AddContent(string content)

{

this.BeginInvoke(new MethodInvoker(delegate

{

if(chkAutoLine.Checked && txtShowData.Text.Length>0)

{

txtShowData.AppendText("rn");

}

Console.WriteLine("c# debug1");

Console.WriteLine(content);

txtShowData.AppendText(content);

}));

}

/// <summary>

/// 清空接收区

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnClearRev_Click(object sender, EventArgs e)

{

Console.WriteLine("c# debug");

txtShowData.Clear();

}

/// <summary>

/// 清空发送区

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnClearSend_Click(object sender, EventArgs e)

{

txtSendData.Clear();

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace BXHSerialPort

{

static class Program

{

[DllImport("kernel32.dll")]

public static extern bool AllocConsole();

[DllImport("kernel32.dll")]

static extern bool FreeConsole();

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[STAThread]

static void Main()

{

AllocConsole();

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new frmSerialPort());

FreeConsole();

}

}

}

C#

https://www.bilibili.com/video/BV12b411e7Nm?p=1

最后

以上就是朴实帆布鞋为你收集整理的C# 串口通信的全部内容,希望文章能够帮你解决C# 串口通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部