C#串口方法详解
创建SerialPort对象
初始化参数串口号portName
初始化参数波特率baudRate
初始化参数奇偶校验位baudRate
初始化参数数据位dataBits
初始化参数停止位stopBits
代码如下《====》
public SerialPort sp = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One); //创建SerialPort类初始化 设置端口号 波特率 数据位 基偶校验位 停止位
public SerialPort sb = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string str = ConfigurationManager.AppSettings["pro"];
switch (str)
{
case "1":
sb = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
Control.CheckForIllegalCrossThreadCalls = false;
sb.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceivedEventHandler);
sb.ReceivedBytesThreshold = 1;
button5.Text = "开启COM3";
button10.Text = "关闭COM3";
break;
case "2":
sp = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
Control.CheckForIllegalCrossThreadCalls = false;
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceivedEventHandler);
sp.ReceivedBytesThreshold = 1;
button5.Text = "开启COM2";
button10.Text = "关闭COM2";
break;
}
}
//COM2和COM3的接收数据的函数
public void sp_DataReceivedEventHandler(object sender, SerialDataReceivedEventArgs e)
{
string str = ConfigurationManager.AppSettings["pro"];
switch (str)
{
case "1":
if (e.EventType == SerialData.Chars)
{
textBox4.Text += sb.ReadExisting();
}
break;
case "2":
if (e.EventType == SerialData.Chars)
{
textBox4.Text += sp.ReadExisting();
}
break;
}
}
//打开COM2和COM3串口按钮
private void button5_Click(object sender, EventArgs e)
{
string str = ConfigurationManager.AppSettings["pro"];
switch (str)
{
case "1":
sb.Open();
label1.Text = "开启";
if (label1.Text == "开启")
{
button5.Enabled = false; //如果串口已经打开防止程序出错 打开串口的按钮禁止按第二遍
button10.Enabled = true;
}
break;
case "2":
sp.Open();
label1.Text = "开启";
if (label1.Text == "开启")
{
button5.Enabled = false; //如果串口已经打开防止程序出错 打开串口的按钮禁止按第二遍
button10.Enabled = true;
}
break;
}
}
//发送COM2和COM3串口数据
private void button6_Click_1(object sender, EventArgs e)
{
string str = ConfigurationManager.AppSettings["pro"];
switch (str)
{
case "1":
if (sb.IsOpen)
{
sb.Write(textBox3.Text); //获取文本框中的数据写入缓冲区 WriteLine和ReadLine 容易阻塞
}
break;
case "2":
if (sp.IsOpen)
{
sp.Write(textBox3.Text); //获取文本框中的数据写入缓冲区 WriteLine和ReadLine 容易阻塞
}
break;
}
}
//关闭COM2和COM3的串口按钮
private void button10_Click_1(object sender, EventArgs e)
{
string str = ConfigurationManager.AppSettings["pro"];
switch (str)
{
case "1":
sb.Close();
label1.Text = "关闭";
if (label1.Text == "关闭")
{
button10.Enabled = false;
button5.Enabled = true;
}
break;
case "2":
sp.Close();
label1.Text = "关闭";
if (label1.Text == "关闭")
{
button10.Enabled = false;
button5.Enabled = true;
}
break;
}
}
有任何问题请留言,超过2小时请私聊QQ:2773938492