一、SerialPort属性
1、需要引入的头文件
using System.IO;
using System.IO.Ports;
2、属性
2.1、控件如下:
2.2、属性如下:
BaudRate:波特率
DataBits:数据位
Parity:奇偶校验位
PortName:端口号
StopBits:停止位
ByteToRead:获取输入缓冲区的
IsOpen:获取是否开启串口
3、事件
串口通信的事件有三个:
DataReceived :串口接收函数
ErrorReceived :串口数据接收错误
PinChanged:串口号发生改变
4、常见的方法
Open:打开串口.
Close:关闭串口
Read:从SerialPort 输入缓冲区读
ReadByte:从SerialPort 输入缓冲区读一个字节
ReadChar:从SerialPort 输入缓冲区读一个字符
Write:写入到输出缓冲寄存器
Write(Byte[], Int32, Int32):使用缓冲区中的数据将指定数量的字节写入串行端口。
Write(Char[], Int32, Int32):使用缓冲区中的数据将指定数量的字符写入串行端口。
Write(String):将指定的字符串写入串行端口。
WriteLine(String):将指定的字符串和 NewLine 值写入输出缓冲区。
Read(Byte[], Int32, Int32):从 SerialPort 输入缓冲区读取一些字节并将那些字节写入字节数组中指定的偏移量处。
Read(Char[], Int32, Int32):从 SerialPort 输入缓冲区中读取一些字符,然后将这些字符写入字符数组中指定的偏移量处。
ReadByte():从 SerialPort 输入缓冲区中同步读取一个字节。
ReadChar():从 SerialPort 输入缓冲区中同步读取一个字符。
ReadExisting():在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节。
ReadLine():一直读取到输入缓冲区中的 NewLine 值。
ReadTo(String):一直读取到输入缓冲区中的指定 value 的字符串。
二、代码编写
2.1、串口初始化:
private void Form1_Load(object sender, EventArgs e)
{
//添加COM端口
for (int i = 1; i < 20; i++)
{
comboBox1.Items.Add("COM" + i.ToString());
}
comboBox1.Text = "COM1";//串口号多额默认值
comboBox2.Text = "4800";//波特率默认值
/*****************非常重要************************/
//手动添加事件处理程序(也可以在前面的事件中添加)
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
注:获取本机可用串口号:
string[] PortNames = SerialPort.GetPortNames(); //获取本机串口名称,存入PortNames数组中
for (int i = 0; i < PortNames.Count(); i++) {
cbxSerilPort.Items.Add(PortNames[i]); //将数组内容加载到comboBox控件中
}
2.2、打开串口:
//打开串口
private void button1_Click(object sender, EventArgs e)
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text,10);//十进制数据转换
serialPort1.Open();
button1.Enabled = false;//打开串口按钮不可用
button2.Enabled = true; //关闭串口
}
catch {
MessageBox.Show("端口错误,请检查串口", "错误");
}
}
2.3、串口发送数据:
private void button_send_Click(object sender, EventArgs e)
{
if(serialPort1.IsOpen) //如果串口开启
{
if (textBox2.Text.Trim() != "") //如果框内不为空则
{
//串口发送数据的方式1
serialPort1.Write(textBox2.Text.Trim());
//串口发送数据的方式2
//Byte[] TxData ={1,2,3,4,5,6,7,8 };
//com.Write(TxData, 0, 8);
}
else
{
MessageBox.Show("发送框没有数据");
}
}
else
{
MessageBox.Show("串口未打开");
}
}
2.4、串口接收数据:
//串口数据接收事件
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!radioButton3.Checked) //如果接收模式为字符模式
{
string str = serialPort1.ReadExisting(); //字符串方式读
textBox1.AppendText(str);//添加内容
}
else //如果接收模式为数值接收
{
byte data;
data = (byte)serialPort1.ReadByte(); //此处需要强制类型转换,将(int)类型数据转换为(byte)类型数据,不必考虑是否会丢失数据
string str = Convert.ToString(data, 16).ToUpper();//转换为大写十六进制字符串
textBox1.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");//空位补“0”
//上一句等同为:if(str.Length == 1)
// str = "0" + str;
// else
// str = str;
// textBox1.AppendText("0x" + str);
}
}
今天的文章串口sg_串口和并口图解「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/72144.html