【无标题】

C# Winform开发中串口列表的获取与串口的使用

概念与内涵

串口是C#开发中常用的接口,也是最入门的,在这里记录一下,便于大家后续开发的时候直接使用。

本例子实现的Winform

我们将serial port控件从工具箱拉到Winform窗口,并改名为serialPortMain,如下图
拖曳串口通信控件到Winform窗口

本例子实现的Winform界面
上图中的控件分别为comboBoxSerial,buttonOpen,buttonClose和ButtonRefresh。我们进一步假设还有一个richTextBoxMain,用于显示一些调试状态。
我们假设串口的波特率等参数是预先设定的,如下图:
串口默认属性

#刷新按钮的实现:

  private void buttonRefresh_Click(object sender, EventArgs e)
        {
            comboBoxSerial.Items.Clear();
            string[] portNames = SerialPort.GetPortNames();     //<-- Reads all available comPorts
            foreach (var portName in portNames)
            {
                comboBoxSerial.Items.Add(portName);                  //<-- Adds Ports to combobox
            }
            if (comboBoxSerial.Items.Count > 0)
            {
                comboBoxSerial.SelectedIndex = 0;
                serialPortMain.PortName = comboBoxSerial.Items[0].ToString();
                buttonOpen.Enabled = true;
                buttonClose.Enabled = false;
            }
        }

#打开按钮的实现

  private void buttonOpen_Click(object sender, EventArgs e)
        {

            if (!serialPortMain.IsOpen)
            {
                serialPortMain.Open();
                richTextBoxMain.AppendText("串口成功打开\r\n");
                timerMain.Enabled = true;
                buttonRefresh.Enabled = false;
                buttonClose.Enabled = true;
                buttonOpen.Enabled = false;
            }
        }

#关闭按钮的实现

 private void buttonClose_Click(object sender, EventArgs e)
        {
            serialPortMain.Close();
            timerMain.Enabled = false;
            buttonRefresh.Enabled = true;
            buttonOpen.Enabled = true;
        }

#发送数据的实现

   private void buttonSend_Click(object sender, EventArgs e)
        {
            if (!serialPortMain.IsOpen) return;
            byte[] buf = new byte[6];
            buf[0] = 0xEB;
            buf[1] = 0x90;
            buf[2] = 0x0C;
            buf[3] = 0x00;
            buf[4] = 0x01;
            buf[5] = 0x01;

            serialPortMain.Write(buf, 0, 6);
            richTextBoxMain.AppendText("上位机:发送打开GNSS接收状态控制设定到硬件\r\n");
        }

#接收数据的实现
我们假设用一个Timer,每秒一次接收数据。

private void timer1_Tick(object sender, EventArgs e)
        {
            if (!serialPortMain.IsOpen) return;
            int size = serialPortMain.BytesToRead;
            if (size !=0)
            {
                byte[] buf = new byte[size];
               
                int d = serialPortMain.Read(buf, 0, size);
                string rx_str = System.Text.Encoding.UTF8.GetString(buf);
                if (rx_str.Contains("Uart Wakeup CMD")) timerSendCount = 100;
                richTextBoxMain.AppendText("时间:"+DateTime.Now.ToString("T")+",硬件:"+ rx_str + "\r\n");
                richTextBoxMain.ScrollToCaret();
            }
        }

一个简单的C# Winform串口程序就做完了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_43925069

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

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

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

打赏作者

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

抵扣说明:

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

余额充值