串口调试助手预源代码
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
using System.Threading.Tasks; using System.Windows.Forms; using System.IO;
using System.IO.Ports; using System.Threading;
using DevExpress.XtraEditors;
using System.Text.RegularExpressions;
namespace WindowsFormsApplication3 {
public partial class Form1 : XtraForm {
SerialPort sp1 = new SerialPort(); int Flag = 0;
int StateChanged = 0;
int StateChanged_Ascii = 1; int StateChanged_16 = 0;
string Temp = null;
string Temp_memoSend = null;
private void memoSend_EditValueChanged(object sender, EventArgs e) {
}
public Form1() {
InitializeComponent();
sp1.DataReceived += sp1_DataReceived; }
private void Form1_Load(object sender, EventArgs e) {
this.MaximizeBox = false; //检查是否有串口
string[] str = SerialPort.GetPortNames(); if (str == null) {
MessageBox.Show(\本机没有串口!\ return; }
//添加串口项目
foreach (string port in System.IO.Ports.SerialPort.GetPortNames()) {
cbSerial.Properties.Items.Add(port); }
//串口设置默认选择项
cbSerial.SelectedIndex = 0;
Control.CheckForIllegalCrossThreadCalls = false; sp1.DataReceived += new
SerialDataReceivedEventHandler(sp1_DataReceived); //订阅委托
}
private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void OpenSerial_Click(object sender, EventArgs e) {
sp1.Close();
//SerialPort sp1 = new SerialPort();
if (!sp1.IsOpen)//串口是关闭的,设置参数,打开串口 {
try {
//获取串口号
string serialName = cbSerial.SelectedItem.ToString(); sp1.PortName = serialName;
//设置各参数
string strBaudRate = cbBaudRate.Text; string strDateBits = cbDataBits.Text; string strStopBits = cbStop.Text;
sp1.BaudRate = Convert.ToInt32(strBaudRate);//波特率 sp1.DataBits = Convert.ToInt32(strDateBits);//数据位 switch (cbStop.Text) //停止位 {
case \
sp1.StopBits = StopBits.One; break; case \
sp1.StopBits = StopBits.One; break; case \
sp1.StopBits = StopBits.Two; break; default:
MessageBox.Show(\参数不正确!\ break; }
switch (cbParity.Text) //校验位 {
case \无\
sp1.Parity = Parity.None; break; case \奇校验\
sp1.Parity = Parity.Odd; break; case \偶校验\
sp1.Parity = Parity.Even; break; default:
MessageBox.Show(\参数不正确!\ break; }
if (sp1.IsOpen == true) {
sp1.Close(); }
sp1.Open();
//btnOpen.Enabled = false;
labSerial.Text = \串口号:\ labState.Text = \状态:打开\ }
catch (System.Exception ex) {
MessageBox.Show(\ return; } } }
//private void CloseSerial_Click(object sender, EventArgs e) //{
// if (sp1.IsOpen) // {
// sp1.Close();
// labSerial.Text = \串口号:\ // labState.Text = \状态:关闭\ // } //}
private void Send_Click(object sender, EventArgs e) {
string StrSend = memoSend.Text; if (!sp1.IsOpen) {
MessageBox.Show(\请先打开串口!\ return; } else {
if (rbtnSendStr.Checked) //字符串发送 {
if (ckTimeSend.Checked
&& !(string.IsNullOrEmpty(textTime.Text)))//判断是否定时发送数据 {
string Time = textTime.Text;
tmSend.Interval = int.Parse(Time) * 1000;//时间单位是秒,化成毫秒单位
tmSend.Start(); //开启定时器 } else {
sp1.Write(StrSend); //写入数据 }
}
else //十六进制发送 {
if (ckTimeSend.Checked && !(string.IsNullOrEmpty(textTime.Text))) {
string Time = textTime.Text;
tmSend.Interval = int.Parse(Time) * 1000; tmSend.Start(); } else {
string StrSend_1 = StrSend.Trim(); //去掉前后的空格
//string StrSend_2 = StrSend_1.Replace(\ //string StrSend_3 = string.Join(\Regex.Matches(StrSend_2, @\
string[] StrArray = StrSend_1.Split(' '); //用空格符隔开字符串数组
var Str_Send = new List
// int byteBufferLength = StrArray.Length; //数组StrArray的长度
for (int i = 0; i < StrArray.Length; i++) {
if (StrArray[i].Trim() == \ {
//byteBufferLength--; continue; } else