多语言展示
当前在线:548今日阅读:103今日分享:49

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

这是本人在学习C#过程中一些分享,希望共同学习进步利用虚拟串口软件学习串口通讯通过发送和接收显示应用实现功能C#、串口、SerialPort
工具/原料
1

visual studio

2

虚拟串口软件 Virtual Serial Port Driver

方法/步骤
1

新建一个项目添加 5 个Label控件、 3个button控件、2个 SerialPort、2个textbox、1个timer

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

注意事项

注意使用2台电脑或者使用虚拟串口软件都可

推荐信息