其实,学C#主要的目的不是玩,是为了做一个串口通讯程序。查找了些有用的资料,贴起来,哈哈哈
在.NET Framework 2.0中提供了SerialPort类,该类主要实现串口数据通信等。下面主要介绍该类的主要属性(表13.1)和方法(表13.2)。
表13.1 SerialPort类的常用属性
名 称
|
说 明
|
BaseStream
|
获取 SerialPort 对象的基础 Stream 对象
|
BaudRate
|
获取或设置串行波特率
|
BreakState
|
获取或设置中断信号状态
|
BytesToRead
|
获取接收缓冲区中数据的字节数
|
BytesToWrite
|
获取发送缓冲区中数据的字节数
|
CDHolding
|
获取端口的载波检测行的状态
|
CtsHolding
|
获取“可以发送”行的状态
|
DataBits
|
获取或设置每个字节的标准数据位长度
|
DiscardNull
|
获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略
|
DsrHolding
|
获取数据设置就绪 (DSR) 信号的状态
|
DtrEnable
|
获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号
|
Encoding
|
获取或设置传输前后文本转换的字节编码
|
Handshake
|
获取或设置串行端口数据传输的握手协议
|
IsOpen
|
获取一个值,该值指示 SerialPort 对象的打开或关闭状态
|
NewLine
|
获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值
|
Parity
|
获取或设置奇偶校验检查协议
|
续表
名 称
|
说 明
|
ParityReplace
|
获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节
|
PortName
|
获取或设置通信端口,包括但不限于所有可用的 COM 端口
|
ReadBufferSize
|
获取或设置 SerialPort 输入缓冲区的大小
|
ReadTimeout
|
获取或设置读取操作未完成时发生超时之前的毫秒数
|
ReceivedBytesThreshold
|
获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数
|
RtsEnable
|
获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号
|
StopBits
|
获取或设置每个字节的标准停止位数
|
WriteBufferSize
|
获取或设置串行端口输出缓冲区的大小
|
WriteTimeout
|
获取或设置写入操作未完成时发生超时之前的毫秒数
|
表13.2 SerialPort类的常用方法
方 法 名 称
|
说 明
|
Close
|
关闭端口连接,将 IsOpen 属性设置为False,并释放内部 Stream 对象
|
Open
|
打开一个新的串行端口连接
|
Read
|
从 SerialPort 输入缓冲区中读取
|
ReadByte
|
从 SerialPort 输入缓冲区中同步读取一个字节
|
ReadChar
|
从 SerialPort 输入缓冲区中同步读取一个字符
|
ReadLine
|
一直读取到输入缓冲区中的 NewLine 值
|
ReadTo
|
一直读取到输入缓冲区中指定 value 的字符串
|
Write
|
已重载。将数据写入串行端口输出缓冲区
|
WriteLine
|
将指定的字符串和 NewLine 值写入输出缓冲区
|
注意:用跳线使串口的第2、3针连接,可以在本地计算机上实现串口通信,所以,通过串口的第2、3针的连接可以对程序进行检测。串口截面图如图13.2所示。
图13.2 串口截面图
实现过程
(1)新建一个项目,命名为Ex13_01,默认窗体为Form1。
(2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。
(3)主要程序代码。
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
serialPort1.WriteLine(str);
MessageBox.Show("数据发送成功!","系统提示");
}
private void button2_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
textBox2.Text = Encoding.Unicode.GetString(data);
serialPort1.Close();
MessageBox.Show("数据接收成功!","系统提示");
}