上位机软件干货(2)——串口通信(c#、winform)

串口打开代码如下:

private void button4_Click(object sender, EventArgs e)
        {
          
   

            if (button4.Text == "打开串口")
            {
          
   
                try
                {
          
   
                    if (serialPort1.IsOpen == false)
                    {
          
   
                        string portName = comboBox_PortName.SelectedItem.ToString();
                        int baudRate = Convert.ToInt32(comboBox_BaudRate.SelectedItem);

                        serialPort1.PortName = portName;
                        serialPort1.BaudRate = baudRate;
                        serialPort1.StopBits = StopBits.One;
                        serialPort1.Parity = Parity.None;
                        serialPort1.DataBits = 8;
                        serialPort1.Open();
                        if (serialPort1.IsOpen)
                        {
          
   
                            button4.Text = "关闭串口";

                        }
                        else
                        {
          
   

                        }
                    }
                    else
                    {
          
   
                        button4.Text = "关闭串口";
                    }
                }
                catch (Exception ex)
                {
          
   
                    MessageBox.Show(ex.Message);
                }

            }
            else
            {
          
   
                button4.Text = "打开串口";
            }

        }

数据发送代码如下:

private void button1_Click(object sender, EventArgs e)
        {
          
   
            try
            {
          
   
                if (rbtASCII.Checked)
                {
          
   
                    string sendStr = tbxSend.Text.Trim();
                    byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr);
                    serialPort1.Write(sendBytes, 0, sendBytes.Length);
                }
                else
                {
          
   
                    string[] sendStrs = tbxSend.Text.Trim().Split(new char[] {
          
      });
                    byte[] sendBytes = sendStrs.Select(new Func<string, byte>((item) => Convert.ToByte(item, 16))).ToArray();
                    serialPort1.Write(sendBytes, 0, sendBytes.Length);
                }
            }
            catch
            {
          
   

            }
        }

数据接收代码如下:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
          
   
            Thread.Sleep(50);
            int nums = serialPort1.BytesToRead;
            byte[] receiveBytes = new byte[nums];
            serialPort1.Read(receiveBytes, 0, nums);

            StringBuilder sb = new StringBuilder();
            if (rbt16.Checked)
            {
          
   
                for (int i = 0; i < nums; i++)
                {
          
   
                    byte[] tempBytes = new byte[] {
          
    receiveBytes[i] };
                    string str = BitConverter.ToString(tempBytes);
                    string tempStr = (i % 2) == 0 ? str + " " : str;
                    sb.Append(tempStr);
                }
                sb.AppendLine("
");
                UpdateUiString(sb.ToString());
            }
            else
            {
          
   
                string str = Encoding.ASCII.GetString(receiveBytes);
                UpdateUiString(str);
            }
            sb.Clear();
        }

经验分享 程序员 微信小程序 职场和发展