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

2025-10-16 22:46:04

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));

        }

       

    }

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢