C#开发串口通信实例及串口基础
<h1>一、串口通信简介</h1><p><span style="font-size: 16px"> <span style="color: rgba(0, 128, 128, 1)"> 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。</span></span></p>
<p><span style="color: rgba(0, 128, 128, 1); font-size: 16px"> 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。</span></p>
<p> <strong> 1. 波特率:</strong>这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送960个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为960Bd,比特率为10位*960个/秒=9600bps。</p>
<p> <strong>2. 数据位:</strong>这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。</p>
<p> <strong> 3. 停止位:</strong>用于表示单个包的最后几位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。</p>
<p> <strong>4. 校验位:</strong>在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。</p>
<h1>二、C#串口编程类</h1>
<p> 从.NET Framework 2.0开始,C#提供了SerialPort类用于实现串口控制。命名空间:<strong><span style="font-size: 16px">System.IO.Ports</span></strong>。其中详细成员介绍参看MSDN文档。下面介绍其常用的字段、方法和事件。</p>
<h3> 1. 常用字段:</h3>
<table border="2" align="left">
<tbody>
<tr>
<td>名称</td>
<td>说明</td>
</tr>
<tr>
<td>PortName</td>
<td>获取或设置通信端口</td>
</tr>
<tr>
<td>BaudRate</td>
<td>获取或设置串行波特率</td>
</tr>
<tr>
<td>DataBits</td>
<td>获取或设置每个字节的标准数据位长度</td>
</tr>
<tr>
<td>Parity</td>
<td>获取或设置奇偶校验检查协议</td>
</tr>
<tr>
<td>StopBits</td>
<td>获取或设置每个字节的标准停止位数</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h3>2. 常用方法:</h3>
<table border="2" align="left">
<tbody>
<tr>
<td>名称</td>
<td>说明</td>
</tr>
<tr>
<td>Close</td>
<td>关闭端口连接,将 IsOpen 属性设置为 <strong>false</strong>,并释放内部 Stream 对象</td>
</tr>
<tr>
<td>GetPortNames</td>
<td>获取当前计算机的串行端口名称数组</td>
</tr>
<tr>
<td>Open</td>
<td>打开一个新的串行端口连接</td>
</tr>
<tr>
<td>Read</td>
<td>从 <strong>SerialPort</strong> 输入缓冲区中读取</td>
</tr>
<tr>
<td>Write</td>
<td> 将数据写入串行端口输出缓冲区</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h3>3. 常用事件:</h3>
<table border="2" align="left">
<tbody>
<tr>
<td>名称</td>
<td>说明</td>
</tr>
<tr>
<td>DataReceived</td>
<td>表示将处理 <strong>SerialPort</strong> 对象的数据接收事件的方法</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<p> </p>
<h1>三、C#开发串口实例</h1>
<p>前台页面:</p>
<p><img src="https://img2020.cnblogs.com/blog/1702828/202009/1702828-20200917173019614-720829701.png" alt="" loading="lazy"></p>
<p> 后台代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.IO.Ports;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Text;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Windows.Forms;
</span><span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> SerialPort
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">partial</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> SerialPort : Form
{
String serialPortName;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> SerialPort()
{
InitializeComponent();
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Form1_Load(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> sender, EventArgs e)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span>[] ports = System.IO.Ports.SerialPort.GetPortNames();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取电脑上可用串口号</span>
comboBox1.Items.AddRange(ports);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">给comboBox1添加数据</span>
comboBox1.SelectedIndex = comboBox1.Items.Count > <span style="color: rgba(128, 0, 128, 1)">0</span> ? <span style="color: rgba(128, 0, 128, 1)">0</span> : -<span style="color: rgba(128, 0, 128, 1)">1</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果里面有数据,显示第0个</span>
<span style="color: rgba(0, 0, 0, 1)">
comboBox2.Text </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">115200</span><span style="color: rgba(128, 0, 0, 1)">"</span>;<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">默认波特率:115200</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
comboBox3.Text </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">"</span>;<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">默认停止位:1</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
comboBox4.Text </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">8</span><span style="color: rgba(128, 0, 0, 1)">"</span>;<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">默认数据位:8</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
comboBox5.Text </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">无</span><span style="color: rgba(128, 0, 0, 1)">"</span>;<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">默认奇偶校验位:无</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> button1_Click(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> sender, EventArgs e)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (button1.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">打开串口</span><span style="color: rgba(128, 0, 0, 1)">"</span>){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果按钮显示的是打开</span>
<span style="color: rgba(0, 0, 255, 1)">try</span>{<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">防止意外错误</span>
serialPort1.PortName = comboBox1.Text;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取comboBox1要打开的串口号</span>
serialPortName =<span style="color: rgba(0, 0, 0, 1)"> comboBox1.Text;
serialPort1.BaudRate </span>= <span style="color: rgba(0, 0, 255, 1)">int</span>.Parse(comboBox2.Text);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取comboBox2选择的波特率</span>
serialPort1.DataBits = <span style="color: rgba(0, 0, 255, 1)">int</span>.Parse(comboBox4.Text);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置数据位</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置停止位</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (comboBox3.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">"</span>) { serialPort1.StopBits =<span style="color: rgba(0, 0, 0, 1)"> StopBits.One; }
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (comboBox3.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1.5</span><span style="color: rgba(128, 0, 0, 1)">"</span>) { serialPort1.StopBits =<span style="color: rgba(0, 0, 0, 1)"> StopBits.OnePointFive; }
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (comboBox3.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2</span><span style="color: rgba(128, 0, 0, 1)">"</span>) { serialPort1.StopBits =<span style="color: rgba(0, 0, 0, 1)"> StopBits.Two; }
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置奇偶校验</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (comboBox5.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">无</span><span style="color: rgba(128, 0, 0, 1)">"</span>) { serialPort1.Parity =<span style="color: rgba(0, 0, 0, 1)"> Parity.None; }
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (comboBox5.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">奇校验</span><span style="color: rgba(128, 0, 0, 1)">"</span>) { serialPort1.Parity =<span style="color: rgba(0, 0, 0, 1)"> Parity.Odd; }
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (comboBox5.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">偶校验</span><span style="color: rgba(128, 0, 0, 1)">"</span>) { serialPort1.Parity =<span style="color: rgba(0, 0, 0, 1)"> Parity.Even; }
serialPort1.Open();</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">打开串口</span>
button1.Text = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">关闭串口</span><span style="color: rgba(128, 0, 0, 1)">"</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">按钮显示关闭串口</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception err)
{
MessageBox.Show(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">打开失败</span><span style="color: rgba(128, 0, 0, 1)">"</span>+ err.ToString(), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">提示!</span><span style="color: rgba(128, 0, 0, 1)">"</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">对话框显示打开失败</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span>{<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">要关闭串口</span>
<span style="color: rgba(0, 0, 255, 1)">try</span>{<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">防止意外错误</span>
serialPort1.Close();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭串口</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception){}
button1.Text </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">打开串口</span><span style="color: rgba(128, 0, 0, 1)">"</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">按钮显示打开</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span> WndProc(<span style="color: rgba(0, 0, 255, 1)">ref</span><span style="color: rgba(0, 0, 0, 1)"> Message m)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (m.Msg == <span style="color: rgba(128, 0, 128, 1)">0x0219</span>){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设备改变</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (m.WParam.ToInt32() == <span style="color: rgba(128, 0, 128, 1)">0x8004</span>){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">usb串口拔出</span>
<span style="color: rgba(0, 0, 255, 1)">string</span>[] ports = System.IO.Ports.SerialPort.GetPortNames();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重新获取串口</span>
comboBox1.Items.Clear();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除comboBox里面的数据</span>
comboBox1.Items.AddRange(ports);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">给comboBox1添加数据</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (button1.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">关闭串口</span><span style="color: rgba(128, 0, 0, 1)">"</span>){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用户打开过串口</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (!serialPort1.IsOpen){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用户打开的串口被关闭:说明热插拔是用户打开的串口</span>
button1.Text = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">打开串口</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
serialPort1.Dispose();</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">释放掉原先的串口资源</span>
comboBox1.SelectedIndex = comboBox1.Items.Count > <span style="color: rgba(128, 0, 128, 1)">0</span> ? <span style="color: rgba(128, 0, 128, 1)">0</span> : -<span style="color: rgba(128, 0, 128, 1)">1</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示获取的第一个串口号</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
comboBox1.Text </span>= serialPortName;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示用户打开的那个串口号</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span>{<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用户没有打开过串口</span>
comboBox1.SelectedIndex = comboBox1.Items.Count > <span style="color: rgba(128, 0, 128, 1)">0</span> ? <span style="color: rgba(128, 0, 128, 1)">0</span> : -<span style="color: rgba(128, 0, 128, 1)">1</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示获取的第一个串口号</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (m.WParam.ToInt32() == <span style="color: rgba(128, 0, 128, 1)">0x8000</span>){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">usb串口连接上</span>
<span style="color: rgba(0, 0, 255, 1)">string</span>[] ports = System.IO.Ports.SerialPort.GetPortNames();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重新获取串口</span>
<span style="color: rgba(0, 0, 0, 1)"> comboBox1.Items.Clear();
comboBox1.Items.AddRange(ports);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (button1.Text == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">关闭串口</span><span style="color: rgba(128, 0, 0, 1)">"</span>){<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用户打开过一个串口</span>
comboBox1.Text = serialPortName;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示用户打开的那个串口号</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
comboBox1.SelectedIndex </span>= comboBox1.Items.Count > <span style="color: rgba(128, 0, 128, 1)">0</span> ? <span style="color: rgba(128, 0, 128, 1)">0</span> : -<span style="color: rgba(128, 0, 128, 1)">1</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示获取的第一个串口号</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
}
</span><span style="color: rgba(0, 0, 255, 1)">base</span>.WndProc(<span style="color: rgba(0, 0, 255, 1)">ref</span><span style="color: rgba(0, 0, 0, 1)"> m);
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> serialPort1_DataReceived(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> sender, SerialDataReceivedEventArgs e)
{
</span><span style="color: rgba(0, 0, 255, 1)">int</span> len = serialPort1.BytesToRead;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取可以读取的字节数</span>
<span style="color: rgba(0, 0, 255, 1)">byte</span>[] buff = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">byte</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建缓存数据数组</span>
serialPort1.Read(buff, <span style="color: rgba(128, 0, 128, 1)">0</span>, len);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">把数据读取到buff数组</span>
<span style="color: rgba(0, 0, 0, 1)">
Invoke((</span><span style="color: rgba(0, 0, 255, 1)">new</span> Action(() =>{<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">C# 3.0以后代替委托的新方法</span>
<span style="color: rgba(0, 0, 0, 1)">
textBox1.AppendText(Encoding.Default.GetString(buff));</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">对话框追加显示数据</span>
<span style="color: rgba(0, 0, 0, 1)"> })));
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> button2_Click(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> sender, EventArgs e)
{
textBox1.Clear();</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除接收对话框显示的数据</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> button3_Click(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> sender, EventArgs e)
{
String Str </span>= textBox2.Text.ToString();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取发送文本框里面的数据</span>
<span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (Str.Length > <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">)
{
serialPort1.Write(Str);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">串口发送数据</span>
<span style="color: rgba(0, 0, 0, 1)">
}
}
</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception){ }
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> button4_Click(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> sender, EventArgs e)
{
textBox2.Clear();</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除发送文本框里面的内容</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
}</span></pre>
</div><br><br>
来源:https://www.cnblogs.com/sgxw/p/13686409.html
頁:
[1]