简易串口制作教程

目录

1.新建窗体项目

2.窗体布局

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

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

③选择控件

《1》选择textBox控件

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

《3》使用button控件

《4》使用label控件

《5》使用combox控件 

 3.填写代码

 《1》有关button的代码

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


1.新建窗体项目

2.窗体布局

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

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

③选择控件

《1》选择textBox控件

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

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

《3》使用button控件

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

《4》使用label控件

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

改名的位置在

《5》使用combox控件 

 

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

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

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

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

 

设置好如下图

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

�西瓜�

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值