C#关于简单串口通信的winfrom客户端

UI界面图:

发送端口配置相关初始化:

private void Form1_Load(object sender, EventArgs e) { // 获取当前串口名的数组 string[] ports = SerialPort.GetPortNames(); comboBoxCom.Items.AddRange(ports); // 初始化数据位下拉框 comboBoxDatabit.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxDatabit.DataSource = Enum.GetValues(typeof(SerialPortDatabits)); comboBoxDatabit.DisplayMember = "ToString"; comboBoxDatabit.SelectedIndex = 0; // 默认选择none // 初始化数据位下拉框 comboBoxBaud.DropDownStyle = ComboBoxStyle.DropDownList; // 获取枚举成员的名称数组 string[] baudRateNames = Enum.GetNames(typeof(SerialPortBaudRates)); // 创建一个新的字符串数组,包含完整的枚举成员字符串 string[] baudRateDisplayNames = new string[baudRateNames.Length]; for (int i = 0; i < baudRateNames.Length; i++) { SerialPortBaudRates enumValue = (SerialPortBaudRates)Enum.Parse(typeof(SerialPortBaudRates), baudRateNames[i]); baudRateDisplayNames[i] = $"{(int)enumValue}"; } // 绑定数据源到下拉框,并设置显示的完整成员名称 comboBoxBaud.DataSource = baudRateDisplayNames; comboBoxBaud.DisplayMember = "ToString"; comboBoxBaud.SelectedIndex = 8; // 默认选择9600 comboBoxBIP.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxBIP.DataSource = Enum.GetValues(typeof(Parity)); comboBoxBIP.DisplayMember = "ToString"; comboBoxBIP.SelectedIndex = 0; // 默认选择none comboBoxStop.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxStop.DataSource = Enum.GetValues(typeof(StopBits)); comboBoxStop.DisplayMember = "ToString"; comboBoxStop.SelectedIndex = 0; // 默认选择none }

打开串口按钮点击事件:

private void buttonOn_Click(object sender, EventArgs e) { if (buttonOn.Text == "打开串口") { try { serialPort.PortName= comboBoxCom.Text; // 获取选择的串口端口 if(Enum.TryParse(comboBoxBaud.Text, out SerialPortBaudRates baudRate)) { serialPort.BaudRate = baudRate; } if (Enum.TryParse(comboBoxBIP.Text, out Parity parity)) { serialPort.Parity = parity; } if (Enum.TryParse(comboBoxDatabit.Text, out SerialPortDatabits databit)) { serialPort.DataBits = databit; } if (Enum.TryParse(comboBoxStop.Text, out StopBits stopBit)) { serialPort.StopBits = stopBit; } // 设置DataCheck属性为非空值 serialPort.DataCheck = (data) => { // 编写逻辑来检查数据 return data.Count > 0; // 示例:检查数据列表是否为空 }; serialPort.OpenPort(); if (serialPort.IsOpen) { MessageBox.Show("串口已打开"); buttonOn.Text = "关闭串口"; } else { MessageBox.Show("串口打开失败"); } } catch (Exception ex) { MessageBox.Show("串口打开失败" + ex.ToString(), "警告", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { try { serialPort.ClosePort(); MessageBox.Show("串口已关闭"); } catch (Exception ex) { } buttonOn.Text = "打开串口"; } }

发送数据按钮点击事件:

/// <summary> /// 发送数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void butSending_Click(object sender, EventArgs e) { string Str = richTextBox1.Text; // 获取发送文本框里的数据 Str= Str.PadRight(9, ' '); var buffer= Encoding.ASCII.GetBytes(Str); try { if (Str.Length > 0) { byte[] bytes = Encoding.ASCII.GetBytes(Str); //serialPort.WriteData(bytes); // 串口发送数据 serialPort.WriteData(bytes ); // 串口发送数据 } } catch (Exception) { } }

 


__EOF__

本文作者x欣x
本文链接https://www.cnblogs.com/wuchengyang/p/18304874.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   x欣x  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示