想实现的功能是:点击Button1向串口发送第一条命令,TextBox1显示串口返回的数据.点击Button2发送第二条命令,TextBox2显示串口返回的数据.
下面的代码只是实现了点击Button1向串口发送第一条命令,TextBox1显示串口返回的数据
因为是才学C#,很多东西不是很懂.下面的代码应该怎么改才能实现我想要的功能.哪位懂的朋友讲讲要实现我想要的功能的原理,有代码最好.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 PortsTest2
{
public partial class Form1 : Form
{
public delegate void _SafeAddtrTextCall(string text);
private void safeAddtrText(string text)
{
if (this.InvokeRequired)
{
_SafeAddtrTextCall call = delegate(string s) { textBox1.Text += s; }; this.Invoke(call, text); }
else
{
textBox1.Text += text;
}
} public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM5";
serialPort1.BaudRate = 2400;
serialPort1.DataBits = 8;
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.Even;
serialPort1 .DataReceived +=new SerialDataReceivedEventHandler(serialPort1_DataReceived);
} private void button1_Click(object sender, EventArgs e)
{
string str = "FEFEFE68AAAAAAAAAAAA681300DF16";
if (serialPort1.IsOpen)
{
serialPort1.Close();
} try
{
serialPort1.Open(); serialPort1.Write(HexToByte(str), 0, HexToByte(str).Length);
}
catch (System.Exception ex)
{
MessageBox.Show("未能打开端口,请检查是否已经连接串口.\n" + ex.Message);
}
} private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string tmpstr = "";
for (int i = 0; i < serialPort1.BytesToRead; i++)
{
tmpstr += Convert.ToString(serialPort1.ReadByte (),16)+" ";
}
tmpstr = tmpstr.ToUpper();
safeAddtrText(tmpstr );
} private static byte[] HexToByte(string hexString)//string转16进制byte[]
{
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
} public static string ToHexString(byte[] bytes) // 16进制byte[]转string
{
string hexString = string.Empty;
if (bytes != null)
{
StringBuilder strB = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
strB.Append(bytes[i].ToString("X2"));
}
hexString = strB.ToString();
}
return hexString;
} private void button2_Click(object sender, EventArgs e)
{
string str = "FEFEFE68AAAAAAAAAAAA681300DF16"; if (serialPort1.IsOpen)
{
serialPort1.Close();
} try
{
serialPort1.Open(); serialPort1.Write(HexToByte(str), 0, HexToByte(str).Length);
}
catch (System.Exception ex)
{
MessageBox.Show("未能打开端口,请检查是否已经连接串口.\n" + ex.Message);
}
}
}
}
下面的代码只是实现了点击Button1向串口发送第一条命令,TextBox1显示串口返回的数据
因为是才学C#,很多东西不是很懂.下面的代码应该怎么改才能实现我想要的功能.哪位懂的朋友讲讲要实现我想要的功能的原理,有代码最好.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 PortsTest2
{
public partial class Form1 : Form
{
public delegate void _SafeAddtrTextCall(string text);
private void safeAddtrText(string text)
{
if (this.InvokeRequired)
{
_SafeAddtrTextCall call = delegate(string s) { textBox1.Text += s; }; this.Invoke(call, text); }
else
{
textBox1.Text += text;
}
} public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM5";
serialPort1.BaudRate = 2400;
serialPort1.DataBits = 8;
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.Even;
serialPort1 .DataReceived +=new SerialDataReceivedEventHandler(serialPort1_DataReceived);
} private void button1_Click(object sender, EventArgs e)
{
string str = "FEFEFE68AAAAAAAAAAAA681300DF16";
if (serialPort1.IsOpen)
{
serialPort1.Close();
} try
{
serialPort1.Open(); serialPort1.Write(HexToByte(str), 0, HexToByte(str).Length);
}
catch (System.Exception ex)
{
MessageBox.Show("未能打开端口,请检查是否已经连接串口.\n" + ex.Message);
}
} private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string tmpstr = "";
for (int i = 0; i < serialPort1.BytesToRead; i++)
{
tmpstr += Convert.ToString(serialPort1.ReadByte (),16)+" ";
}
tmpstr = tmpstr.ToUpper();
safeAddtrText(tmpstr );
} private static byte[] HexToByte(string hexString)//string转16进制byte[]
{
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
} public static string ToHexString(byte[] bytes) // 16进制byte[]转string
{
string hexString = string.Empty;
if (bytes != null)
{
StringBuilder strB = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
strB.Append(bytes[i].ToString("X2"));
}
hexString = strB.ToString();
}
return hexString;
} private void button2_Click(object sender, EventArgs e)
{
string str = "FEFEFE68AAAAAAAAAAAA681300DF16"; if (serialPort1.IsOpen)
{
serialPort1.Close();
} try
{
serialPort1.Open(); serialPort1.Write(HexToByte(str), 0, HexToByte(str).Length);
}
catch (System.Exception ex)
{
MessageBox.Show("未能打开端口,请检查是否已经连接串口.\n" + ex.Message);
}
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货