C# 串口通信(通过serialPort控件发送及接收数据)

连接串口

首先可以在 工具箱中搜索serialport,将控件拖到你的Winfrom窗口。

界面设计

打开串口

csharp 复制代码
 private void Connect_Click(object sender, EventArgs e)
 {
     serialPort1.PortName = comboBox2.Text;//端口名
     serialPort1.BaudRate = int.Parse(comboBox3.Text);//比特率
     serialPort1.StopBits = StopBits.One;//停止位
     switch (comboBox4.Text)//校验位
     {
         case "None":
             serialPort1.Parity = Parity.None;
             break;
         case "Odd":
             serialPort1.Parity = Parity.Odd;
             break;
         case "Even":
             serialPort1.Parity = Parity.Even;
             break;
         case "Mark":
             serialPort1.Parity = Parity.Mark;
             break;
     }
     serialPort1.DataBits = int.Parse(comboBox5.Text);//数据位
     try
     {
         serialPort1.Open();//打开串口
         bool b = serialPort1.CtsHolding;//CTS状态
		 label8.Text = b ? "1" : "0";
         if (checkBox2.CheckState == CheckState.Checked)//判断是否勾选RTS
         {
             serialPort1.RtsEnable = true;
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
    button3.Text=serialPort1.IsOpen ? "关闭串口" : "打开串口";
 }

发送数据

复制代码
liens为全局变量,可以直接在richTextBox里输入,然后再点发送。

通过文件发送

csharp 复制代码
 private void OpenFile_Click(object sender, EventArgs e)
 {
     OpenFileDialog openFileDialog = new OpenFileDialog();
     openFileDialog.InitialDirectory = "d:\\";//设置默认打开路径

     // 设置文件过滤选项
     openFileDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*";

     // 设置标题
     openFileDialog.Title = "选择文件";

     // 显示对话框
     DialogResult result = openFileDialog.ShowDialog();

     // 确认用户没有取消操作
     if (result == DialogResult.OK)
     {
         // 获取选中的文件路径
         string filePath = openFileDialog.FileName;
         comboBox1.Items.Add(filePath);
         liens = File.ReadAllText(filePath);//读取文件
         comboBox1.Text = filePath;
         richTextBox1.Text=liens;
     }
 }

发送数据

csharp 复制代码
private void Send_Click(object sender, EventArgs e)
{
	serialPort1.WriteLine(liens);
}

接收数据

csharp 复制代码
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    int len = serialPort1.BytesToRead;//获取可以读取的字节数

    byte[] buff = new byte[len];//创建缓存数据数组

    serialPort1.Read(buff, 0, len);//把数据读取到buff数组

    if (checkBox1.Checked)//是否勾选十六进制显示
    {
        richTextBox1.AppendText(BitConverter.ToString(buff).Replace('-', ' ') + '\n');//转成十六进制显示
    }
    else
    {
        richTextBox1.AppendText(Encoding.ASCII.GetString(data));//转成ASCII码显示
        richTextBox1.AppendText("\n");
    }
}
相关推荐
短剑重铸之日8 小时前
《深入解析JVM》第五章:JDK 8之后版本的优化与JDK 25前瞻
java·开发语言·jvm·后端
love530love8 小时前
【探讨】“父级/基环境损坏,子环境全部失效”,如何避免 .venv 受父级 Python 损坏影响?
java·开发语言·人工智能·windows·python·编程·ai编程
shbelec8 小时前
实邦电子在电子产品开发方面有哪些优势与特色?
开发语言
阿里嘎多学长9 小时前
2025-12-31 GitHub 热点项目精选
开发语言·程序员·github·代码托管
无限进步_9 小时前
【C语言】循环队列的两种实现:数组与链表的对比分析
c语言·开发语言·数据结构·c++·leetcode·链表·visual studio
蓝眸少年CY9 小时前
测试Java性能
java·开发语言·python
何包蛋H9 小时前
数据结构深度解析:Java Map 家族完全指南
java·开发语言·数据结构
秃了也弱了。9 小时前
python监听文件变化:Watchdog库
开发语言·python
一路往蓝-Anbo9 小时前
C语言从句柄到对象 (五) —— 虚函数表 (V-Table) 与 RAM 的救赎
c语言·开发语言·stm32·单片机·物联网
古译汉书9 小时前
keil编译错误:Error: Flash Download failed
开发语言·数据结构·stm32·单片机·嵌入式硬件