使用C#构建一个串口程序

 本文简述如何使用C#构建一个简单的串口程序。

新建一个C#程序

 打开VS,选择新建一个C#窗体程序并设置工程存储路径,点击确定即可。

窗体设置

 新建好程序后,在窗体中添加必要控件,添加过程这里不再叙述,完成后如图所示。

 窗体中的控件主要如下。

Label

 Port、Receive等为label,无交互功能,仅仅作为提示显示。

ComboBox

 COM1处为ComboBox,具有下拉选择功能。

Button

 Open、Close等为Button,具有点击功能。

TextBox

 窗体中空白区域以及波特率设置等处为TextBox,为文本显示区域。

SerialPort

 窗体下方区域为SerialPort,为serial相关控件。

窗体组件设置

窗体加载设置

 双击主窗体,可以设置主窗体加载时候执行的代码。

1
2
3
4
5
6
7
8
private void Form1_Load(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
Array.Sort(ports);
comboSerial.Items.Clear();
comboSerial.Items.AddRange(ports);
btnClose.Enabled = false;
}

 这段代码的主要功能是:获取当前可用串口列表,然后将其放在下拉菜单中。

Open控件

 点击Open控件时候的执行代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void btnOpen_Click(object sender, EventArgs e)
{
btnOpen.Enabled = false;
btnClose.Enabled = true;
try
{
serialPort1.PortName = comboSerial.Text;
serialPort1.BaudRate = Convert.ToInt32(BaudRate.Text);
serialPort1.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
btnOpen.Enabled = true;
btnClose.Enabled = false;
}
}

 这段代码的主要功能是:加载串口号与波特率,尝试打开串口。

Close控件

 点击Close控件时候的执行代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void btnClose_Click(object sender, EventArgs e)
{
btnOpen.Enabled = true;
btnClose.Enabled = false;
try
{
serialPort1.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
btnOpen.Enabled = false;
btnClose.Enabled = true;
}
}

 这段代码的主要功能是:关闭串口。

Send控件

 点击Send控件时候的执行代码如下。

1
2
3
4
5
6
7
8
9
10
11
private void btnSend_Click(object sender, EventArgs e)
{
try
{
serialPort1.WriteLine(txtSend.Text + Environment.NewLine);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

 这段代码的主要功能是:将Send文本区的数据发送到串口。

Clear控件

 点击Clear控件时候的执行代码如下。

1
2
3
4
5
6
7
8
9
10
11
private void btnClear_Click(object sender, EventArgs e)
{
try
{
txtReceive.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

 这段代码的主要功能是:将Receive文本区的数据清空。

串口控件

 为串口控件增加DataReceived事件EVents,执行代码如下。

1
2
3
4
5
6
7
8
9
10
11
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
txtReceive.Text += serialPort1.ReadExisting();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

 这段代码的主要功能是:当串口接收到数据时,读取数据并显示在Receive文本区域。

关闭IllegalCrossThreadCalls

 在Form1()中关闭IllegalCrossThreadCalls检查。

1
2
3
4
5
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}

Form1_FormClosing Events设置

 当窗体关闭时候,应当释放串口,代码如下。

1
2
3
4
5
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen)
serialPort1.Close();
}

运行程序

 运行上述程序,可以看到串口可以正常进行发送接收功能。

 至此,一个简单的串口程序就完成啦~~~ 😄😄😄

学习过程主要参考了YouTube的视频:C# Tutorial - Serial Communication | FoxLearn

文章目录
  1. 1. 新建一个C#程序
  2. 2. 窗体设置
    1. 2.1. Label
    2. 2.2. ComboBox
    3. 2.3. Button
    4. 2.4. TextBox
    5. 2.5. SerialPort
  3. 3. 窗体组件设置
    1. 3.1. 窗体加载设置
    2. 3.2. Open控件
    3. 3.3. Close控件
    4. 3.4. Send控件
    5. 3.5. Clear控件
    6. 3.6. 串口控件
    7. 3.7. 关闭IllegalCrossThreadCalls
    8. 3.8. Form1_FormClosing Events设置
  4. 4. 运行程序
|