代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace 串口
{
public partial class Form1 : Form
{
//SerialPort serialPort1 = new SerialPort();
private int received_count = 0;
private int total_count = 0;
private bool serial_open_state = false;
public Form1()
{
InitializeComponent();
}
void UpdataSerialPort()
{
string[] serialPort1 = SerialPort.GetPortNames();
cbox.Items.Clear();
foreach (string Port in serialPort1)
{
cbox.Items.Add(Port);
}
if (cbox.Items.Count > 0)
cbox.SelectedIndex = 0;
}
private void Form1_Load(object sender, EventArgs e)
{
UpdataSerialPort();
}
private void btn_scan_Click(object sender, EventArgs e)
{
UpdataSerialPort();
}
private void UserRecSerialPortDate(byte[] data)
{
StringBuilder str = new StringBuilder();
//string str = System.Text.Encoding.UTF8.GetString(data);
if (chb_recDataShowHex.Checked == true)
{
foreach (byte b in data)
{
str.Append(b.ToString("X02") + " ");
}
if (chb_hexWordWrapAuto.Checked == true)
{
str.Append("\r\n");
}
}
else
{
str.Append(System.Text.Encoding.UTF8.GetString(data));
}
received_count += data.Length;
Invoke(new MethodInvoker(delegate
{
textBox1.Text += str;
}));
}
private void UserOpenSerialPort()
{
serialPort1.Open();
//判断
if (serialPort1.IsOpen == true)
{
serial_open_state = true;
btn_open.Text = "关闭串口";
textBox1.Text += "打开成功\r\n";
}
//禁用控件
cbox.Enabled = false;
cbox2.Enabled = false;
}
private void UserCloseSerialPort()
{
serialPort1.Close();
//更新串口状态
serial_open_state = false;
btn_open.Text = "打开串口";
textBox1.Text += "关闭串口\r\n";
cbox.Enabled = true;
cbox2.Enabled = true;
}
private void btn_open_Click(object sender, EventArgs e)
{
if (serial_open_state == true)
{
UserCloseSerialPort();
}
else
{
//打开串口
//判断串口号是否为空
if (cbox.Text == "" || cbox.Text == null)
{
MessageBox.Show("串口号为空");
return;
}
//设置串口号
serialPort1.PortName = cbox.Text;
//打开串口
serialPort1.BaudRate = int.Parse(cbox2.Text); //设置波特率
serialPort1.DataBits = int.Parse(cbox3.Text); //设置数据位
//serialPort1.BaudRate = Convert.ToInt32(cbox2.Text);
//设置校验方式
switch (cbox4.Text)
{
case "None":
serialPort1.Parity = Parity.None;
break;
case "Even":
serialPort1.Parity = Parity.Even;
break;
case "Mark":
serialPort1.Parity = Parity.Mark;
break;
case "Odd":
serialPort1.Parity = Parity.Odd;
break;
}
//设置停止位
switch (cbox5.Text)
{
case "1":
serialPort1.StopBits = StopBits.One;
break;
case "1.5":
serialPort1.StopBits = StopBits.OnePointFive;
break;
case "2":
serialPort1.StopBits = StopBits.Two;
break;
}
UserOpenSerialPort();
}
}
private void serialPort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
int n = serialPort1.BytesToRead;
byte[] data = new byte[n];
if (n > 0)
{
serialPort1.Read(data, 0, n);
UserRecSerialPortDate(data);
}
}
private void btn_sendData_Click(object sender, EventArgs e)
{
serialPort1.Write("hello world");
byte[] data = new byte[10];
//获取用户输入框内容,并转换为字节数组
}
private void timer1_Tick(object sender, EventArgs e)
{
if (SerialPort.GetPortNames().Contains(cbox.Text) == false)
{
UserCloseSerialPort();
statusStrip1.Text = cbox.Text + "丢失,串口自动关闭";
}
}
private void btn_empty_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}
private void btn_saveRecData_Click(object sender, EventArgs e)
{
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "文本文件|*.txt";
// 显示对话框
if (dialog.ShowDialog() == DialogResult.OK)
{
// 文件名
string fileName = dialog.FileName;
// 创建文件,准备写入
FileStream fs = File.Open(fileName,
FileMode.Create,
FileAccess.Write);
StreamWriter wr = new StreamWriter(fs);
// 逐行将textBox1的内容写入到文件中
foreach (string line in textBox1.Lines)
{
wr.WriteLine(line);
}
// 关闭文件
wr.Flush();
wr.Close();
fs.Close();
StreamWriter sw = new StreamWriter(btn_saveRecData.Text, false, Encoding.UTF8);
sw.Write(textBox1.Text);
sw.Close();
MessageBox.Show("保存成功!", "提示");
}
}
}
}
赵龙威 物联网应用技术二班