1小时搞定C# winForm串口通信

时间:2024-03-19 07:29:10
  • 界面设计
  • 事件处理

本文参考https://blog.csdn.net/yc5300891/article/details/100522854

1、完成如下界面一共需要Lable、ComboBox、TextBox、Button四个普通组件,两个特殊组件,一个是SerialPort特殊控件,它是处理串口通信用的一个组件。另一个是Timer组件,这是个定时器组件。

1小时搞定C# winForm串口通信

新建C#项目,选择Windows窗体应用

1小时搞定C# winForm串口通信

1小时搞定C# winForm串口通信

默认创建一个空白窗体

1小时搞定C# winForm串口通信

你可以随便在左侧的工具箱里面找一些控件拖进右侧的空白窗体里面

1小时搞定C# winForm串口通信

按crtl+s保存好之后点击启动按钮,将会出现刚才设计的窗体

1小时搞定C# winForm串口通信

然后用左边的工具箱随便摆摆控件,变成如下样子

1小时搞定C# winForm串口通信

重点来了

ComboBox的下拉菜单数据填充有两种方式,第一种,右键ComboBox属性菜单出现属性,选择Items属性,

1小时搞定C# winForm串口通信

1小时搞定C# winForm串口通信

1小时搞定C# winForm串口通信
第二种,在代码中添加

1小时搞定C# winForm串口通信

ComboBox默认选择行可以采用SelectedIndex属性值来设置。

ComboBox.SelectedIndex = 0 就是默认选中第一个。

剩下的Lable、TextBox、Button设置文本都是统一属性Text,Lable.Text、TextBox.Text、Button.Text

以上界面问题搞定好之后就需要对Button进行点击事件绑定了。

绑定事件函数的生成需要双击Button按钮,将会自动生成以Button的id为头部的一个click函数,比如Button的id为button6那么这个点击事件函数就是button6_Click

1小时搞定C# winForm串口通信

这里举一个例子是给打开串口按钮绑定打开串口事件,首先双击“打开串口”按钮,将会生成按钮单击事件,这时就需要进行串口配置,串口配置有PortName,BaudRate,DataBits,Parity,StopBits五个参数。波特率在ComboBox中是以字符串形式呈现的,所以需要转化为Int整数类型Convert.ToInt32()。

 

serialPort1.PortName = comboBox1.Text;                       

serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); 

serialPort1.DataBits = Convert.ToInt16(comboBox4.Text);

 

if (comboBox3.Text.Equals("None"))

     erialPort1.Parity = System.IO.Ports.Parity.None;

else if (comboBox3.Text.Equals("Odd"))

     serialPort1.Parity = System.IO.Ports.Parity.Odd;

else if (comboBox3.Text.Equals("Even"))

     serialPort1.Parity = System.IO.Ports.Parity.Even;

else if (comboBox3.Text.Equals("Mark"))

     serialPort1.Parity = System.IO.Ports.Parity.Mark;

else if (comboBox3.Text.Equals("Space"))

     serialPort1.Parity = System.IO.Ports.Parity.Space;

if (comboBox5.Text.Equals("1"))

     serialPort1.StopBits = System.IO.Ports.StopBits.One;

else if (comboBox5.Text.Equals("1.5"))

     serialPort1.StopBits = System.IO.Ports.StopBits.OnePointFive;

else if (comboBox5.Text.Equals("2"))

     serialPort1.StopBits = System.IO.Ports.StopBits.Two;

serialPort1.Open();

 

串口写的代码如下

byte[] data = {0x01, 0x02, 0x03, 0x09};

for (int i = 0; i < data.length) {

serialPort1.Write(data, i, 1);

}

 

串口读的代码如下

int length = serialPort1.BytesToRead;    // 读取串口接收缓冲区字节数

byte[] data = new byte[length];          //定义相同字节的数组

serialPort1.Read(data, 0, length);

Demo下载 https://download.csdn.net/download/niuyong_10086/12901679