using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//引用这个才可以实例化串口
using System.IO.Ports;
namespace series_port_demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//声明一个串口
public SerialPort sp;
private void Form1_Load(object sender, EventArgs e)
{
RichTextBox.CheckForIllegalCrossThreadCalls = false;
Control.CheckForIllegalCrossThreadCalls = false;
//实例化一个串口
sp = new SerialPort();
//遍历本机串口
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
cmb_Port.Items.Add(port);
}
if (cmb_Port.Items.Count >= 1)
{
cmb_Port.SelectedIndex = 0;
}
cmb_Baud.SelectedIndex = 3;
cmb_DataBits.SelectedIndex = 1;
cmb_StopBit.SelectedIndex = 0;
cmb_Parity.SelectedIndex = 0;
//接收数据
sp.DataReceived += new SerialDataReceivedEventHandler(sp_Received);
}
public void openSerial()
{
if (sp.IsOpen == false)
{
try
{
//sp.ReceivedBytesThreshold = 10;
sp.PortName = cmb_Port.Text.ToString();
sp.BaudRate = Convert.ToInt32(cmb_Baud.Text.ToString());
sp.DataBits = Convert.ToInt32(cmb_DataBits.Text.ToString());
// sp.StopBits = (StopBits)int.Parse(cmb_StopBit.Text.ToString());
//sp.Parity = (Parity)Convert.ToInt32(cmb_Parity.Text.ToString());
switch (cmb_StopBit.Text) //停止位
{
case "1":
sp.StopBits = StopBits.One;
break;
case "1.5":
sp.StopBits = StopBits.OnePointFive;
break;
case "2":
sp.StopBits = StopBits.Two;
break;
default:
MessageBox.Show("Error:参数不正确!", "Error");
break;
}
switch (cmb_Parity.Text) //校验位
{
case "无":
sp.Parity = Parity.None;
break;
case "奇校验":
sp.Parity = Parity.Odd;
break;
case "偶校验":
sp.Parity = Parity.Even;
break;
default:
MessageBox.Show("Error:参数不正确!", "Error");
break;
}
sp.ReadTimeout = 1000;
}
catch (Exception ex)
{
MessageBox.Show("错误信息:" + ex.Message, "串口参数设置错误");
}
}
try
{
if (sp.IsOpen == false)
{
sp.Open();
}
cmb_Port.Enabled = false;
cmb_Baud.Enabled = false;
cmb_DataBits.Enabled = false;
cmb_StopBit.Enabled = false;
cmb_Parity.Enabled = false;
//接收数据
sp.DataReceived += new SerialDataReceivedEventHandler(sp_Received);
}
catch (Exception ex)
{
MessageBox.Show("错误信息:" + ex.Message, "打开串口失败");
}
}
private void btn_open_Click(object sender, EventArgs e)
{
openSerial();
}
//接收数据
public string rec_auto;
public void sp_Received(object sender, SerialDataReceivedEventArgs e)
{
try
{
byte[] auto_rec = new byte[sp.BytesToRead];
string RecLength = sp.Read(auto_rec, 0, auto_rec.Length).ToString();
rec_auto = new UTF8Encoding().GetString(auto_rec);
rtb_rec.Text = rec_auto;
}
catch (Exception ex) { MessageBox.Show(ex.Message, "串口接收错误"); }
}
//发送数据
public void sendMsg()
{
if (!sp.IsOpen)
{
openSerial();
}
if (sp.IsOpen)
{
try
{
byte[] buff_data;
string sendMs = rtb_send.Text.ToString();
buff_data = Encoding.ASCII.GetBytes(sendMs);
sp.Write(buff_data, 0, buff_data.Length);
}
catch (Exception ex)
{
MessageBox.Show("错误信息" + ex.Message, "串口发送信息失败");
}
}
else
{
MessageBox.Show("请打开串口", "串口发送信息失败1");
}
}
private void btn_send_Click(object sender, EventArgs e)
{
sendMsg();
}
}
}
c# 串口通讯完整代码
最新推荐文章于 2024-04-30 12:01:50 发布