简易串口制作教程

目录

1.新建窗体项目

2.窗体布局

①更改窗体标题(凭个人喜好更改)

②更改窗体大小和再生成窗体的时候固定窗体不允许更改大小

③选择控件

《1》选择textBox控件

《2》用复制的方式再新建一个textBox

《3》使用button控件

《4》使用label控件

《5》使用combox控件 

 3.填写代码

 《1》有关button的代码

《2》支持热插拔自动检索串口与其他数据接收及端口初始化等代码


1.新建窗体项目

简易串口制作教程_第1张图片

2.窗体布局

①更改窗体标题(凭个人喜好更改)

简易串口制作教程_第2张图片

②更改窗体大小和再生成窗体的时候固定窗体不允许更改大小

简易串口制作教程_第3张图片

③选择控件

《1》选择textBox控件

简易串口制作教程_第4张图片

简易串口制作教程_第5张图片

简易串口制作教程_第6张图片

《2》用复制的方式再新建一个textBox

简易串口制作教程_第7张图片

简易串口制作教程_第8张图片

任意更改复制之后textBox控件尺寸

简易串口制作教程_第9张图片

《3》使用button控件

简易串口制作教程_第10张图片

选择多个并更改命名,如下图所示,位置根据喜好变换

简易串口制作教程_第11张图片

《4》使用label控件

简易串口制作教程_第12张图片

多拉选几个并改不同的名称

简易串口制作教程_第13张图片

改名的位置在

简易串口制作教程_第14张图片

《5》使用combox控件 

 简易串口制作教程_第15张图片

在显示波特率的集合填如下内容

简易串口制作教程_第16张图片

在显示数据位的集合填如下内容

简易串口制作教程_第17张图片

在显示停止位的集合填如下内容

简易串口制作教程_第18张图片

在显示校验位的集合填如下内容

 简易串口制作教程_第19张图片

设置好如下图

简易串口制作教程_第20张图片

 3.填写代码

 《1》有关button的代码

  private void btnClearSend_Click(object sender, EventArgs e)
        {
            txtSend.Text = string.Empty;
        }

        private void btnClearRe_Click(object sender, EventArgs e)
        {
            txtReceive.Text = string.Empty;
        }

        private void btnOpenPort_Click(object sender, EventArgs e)
        {
            if (SpCom.IsOpen)
            {
                SpCom.Close();
                btnOpenPort.Text = "打开串口";
            }
            else
            {
                InitPort();
                try
                {
                    SpCom.Open();
                    btnOpenPort.Text = "关闭串口";
                    MessageBox.Show("串口初始化成功!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] encodeBytes =
                Encoding.GetEncoding("GB2312").GetBytes(txtSend.Text);
                int length = encodeBytes.Length;
                SpCom.Write(encodeBytes, 0, length);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

《2》支持热插拔自动检索串口与其他数据接收及端口初始化等代码

using System.IO.Ports;


 SerialPort SpCom = new SerialPort();
       
        public Form1()
        {
            InitializeComponent();
            //注册串口数据接收事件
            SpCom.DataReceived += SpCom_DataReceived;
            GetSerialLstTbl();
        }
        private void GetSerialLstTbl()
        {
            //清除comboBoxEx显示
            cboPortName.SelectedIndex = -1;
            cboPortName.Items.Clear();
            //获取串口列表
            string[] serialLst = SerialPort.GetPortNames();
            if (serialLst.Length > 0)
            {
                //取串口列表进行排序
                Array.Sort(serialLst);
                //将串口列表输出到comboBoxEx
                cboPortName.Items.AddRange(serialLst);
                cboPortName.SelectedIndex = 0;
            }
        }

        public const int WM_DEVICE_CHANGE = 0x219;             //设备改变           
        public const int DBT_DEVICEARRIVAL = 0x8000;          //设备插入
        public const int DBT_DEVICE_REMOVE_COMPLETE = 0x8004; //设备移除
        //消息处理
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)                                  //判断消息类型
            {
                case WM_DEVICE_CHANGE:                      //设备改变消息
                    {
                        GetSerialLstTbl();                  //设备改变时重新获取串口列表
                    } break;
            }
            base.WndProc(ref m);
        }
   private void SpCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int length = SpCom.BytesToRead;
            byte[] recData = new byte[length];
            SpCom.Read(recData, 0, length);
            string recText = Encoding.GetEncoding("GB2312").GetString(recData);
            //更新接收区
            txtReceive.Invoke(new EventHandler(delegate
            {
                txtReceive.AppendText(recText);
            }));
        }


        public void InitPort()
        {
            SpCom.PortName = cboPortName.Text;
            SpCom.BaudRate = int.Parse(cboBaudRate.Text);
            SpCom.DataBits = int.Parse(cboData.Text);
            SpCom.Parity = (Parity)Enum.Parse(typeof(Parity), cboTest.Text);
            SpCom.StopBits = (StopBits)Enum.Parse(typeof(StopBits),
            cboStop.Text);
        }

你可能感兴趣的:(C#,c#)