c#利用SerialPort 控件实现PC与PC串口通信

 时间:2026-02-13 11:58:24

1、新建一个项目

添加 5 个Label控件、 3个button控件、2个 SerialPort、2个textbox、1个timer

     

c#利用SerialPort 控件实现PC与PC串口通信

2、根据下表设定好控件属性

c#利用SerialPort 控件实现PC与PC串口通信

3、//程序所有代码

//复制下列代码到visual studio中

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.Windows.Forms;

using System.Collections;

using System.Diagnostics;

namespace 利用SerialPort_控件实现PC与PC串口通信

{

    //需要两台计算机同时运行该软件

    //若没有两台计算机,可以通过安装虚拟串口工具 Virtual Serial Port Driver

    //本例就是通过 Virtual Serial Port Driver 工具模拟

    public partial class COMForm : Form

    {

        public COMForm()

        {

            InitializeComponent();

        }

        //定义变量

        public string strPortName1;

        public string strPortName2;

        public int strBaudRate;

        public string data;

        //初始化串口

        private void COMForm_Load(object sender, EventArgs e)

        { 

            //获取电脑串口号,加载到选择框中

            CmbPortName1.DataSource = System.IO.Ports.SerialPort.GetPortNames();

            CmbPortName2.DataSource = System.IO.Ports.SerialPort.GetPortNames();

            //获取波特率

            CmbBaudRate.SelectedIndex = 1;

            CmdCloseSerialPort.Enabled = false ;

            

        }

        //打开串口

        private void CmdOpenSerialPort_Click(object sender, EventArgs e)

        {

            CmdOpenSerialPort.Enabled = false;

            CmdCloseSerialPort.Enabled = true;

            //获取串口名

            strPortName1 = CmbPortName1.SelectedItem.ToString();

            strPortName2 = CmbPortName2.SelectedItem.ToString();

            //获取波特率

            strBaudRate = Convert.ToInt32(CmbBaudRate.SelectedItem.ToString());

            //打开串口

            serialPort1.PortName = strPortName1;

            serialPort1.BaudRate = strBaudRate;

            //若串口1已打开,则返回            

            serialPort1.Open();

            

            //打开串口

            serialPort2.PortName = strPortName2;

            serialPort2.BaudRate = strBaudRate;            

            serialPort2.Open();

            //如果打开成功,则提示

            if (serialPort1.IsOpen)

            {

                MessageBox.Show(strPortName1 +"打开成功","提示");

            }

            if (serialPort2.IsOpen)

            {

                MessageBox.Show(strPortName2 + "打开成功", "提示");

            }

            

        }

        private void Cmdsend_Click(object sender, EventArgs e)

        {

            string outdata = Textsend.Text;

            if (outdata == "")

            {

                MessageBox.Show("发送的数据不能为空!","提醒!",MessageBoxButtons.OK,MessageBoxIcon.Warning );

            }

            serialPort1.Write(outdata );

        }

        //触发事件,接收数据

        //private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

        //{

        //    data = serialPort1.ReadExisting();

        //    this.Invoke(new EventHandler(DisplayText));

        //}

        //显示数据

        private void DisplayText(object sender, EventArgs e)

        {

            TextReceive.Text = TextReceive.Text + data;

        }

        //关闭串口,退出程序

        private void CmdCloseSerialPort_Click(object sender, EventArgs e)

        {

            serialPort1.Close();

            serialPort2.Close();

            CmdOpenSerialPort.Enabled = true;

        }

        private void COMForm_FormClosing(object sender, FormClosingEventArgs e)

        {

            if (serialPort1.IsOpen) serialPort1.Close();

            if (serialPort2.IsOpen) serialPort2.Close();

            Process.GetCurrentProcess().Kill();

        }

        private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

        {

            data = serialPort2.ReadExisting();

            this.Invoke(new EventHandler(DisplayText));

        }

       

    }

}

  • 七八十年代的赤脚医生如今有补助或养老金吗
  • 卷心菜水饺的做法
  • 《幻塔》强化经验继承机制解析
  • 斩魂进不去怎么办
  • 三位一体3盗贼索娅怎么操作?
  • 热门搜索
    六年级手抄报 五年级手抄报 有关阅读的手抄报 中秋节 手抄报 感恩教师的手抄报 有关书的手抄报 中国加油武汉加油手抄报 关于环保的手抄报内容 有关感恩的手抄报 小学生新年手抄报