界面的问题设计串口通信 假如我现在按下按键,我按键的后台程序,会自动发送一个我已经定义好的数组例如:ff,01,ff,ff,ff,ff,01,03,05。这些数据要通过串口发送出去,应如何实现?求助啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 c#串口通信,不难的,lz看看:http://hi.baidu.com/deep_pro/blog/item/4d5f200340c44d80d53f7c49.html。 用C#的SerialPort类具体串口通信的例子网上很多的! 我这里写的串口通信程序(一) 这个串口通信程序,测试了只能够自发自收,假如我用单片机发数据就收不到了,?问:这个只是适合自发自收吗? SerialPort sp = new SerialPort(); private void btn1_Click(object sender, EventArgs e) { sp.PortName = "COM3"; sp.BaudRate = 9600; sp.Open(); byte[] data = Encoding.Unicode.GetBytes(re.Text); string str = Convert.ToBase64String(data); sp.WriteLine(str); MessageBox.Show("数据发送成功", "系统提示"); } private void btn2_Click(object sender, EventArgs e) { byte[] data = Convert.FromBase64String(sp.ReadLine()); tr.Text = Encoding.Unicode.GetString(data); sp.Close(); MessageBox.Show("数据接收成功", "系统提示");(二)这个是用事件触发的,但是用单片机发数据在revtext.Text上接受不到,问?为什么? }System.IO.Ports.SerialDataReceivedEventArgs 将导致该该事件被触发; private void mycomm_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { int DataLength = mycomm.BytesToRead;//获取接受缓冲区中数据的字节数 int i = 0; StringBuilder strb = new StringBuilder(); while (i < DataLength) { byte[] dbs = new byte[2048]; int len = mycomm.Read(dbs,0,2048);//每次从输入缓冲区中读取2048个字节,并将这些字节写入到dbs[]数组中 strb.Append(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len)); i += len; } revtext.Text += strb;// revtext.Text 将显示接收到的数据 }(三)这个与上面类似,用单片机可以实现发数据,在界面上接收,但是收到的是乱码?问:为什么? private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { int DataLength = serialPort1.BytesToRead; int i = 0; StringBuilder strb = new StringBuilder(); while(i<DataLength ) { byte[] dbs = new byte[14]; int len = serialPort1.Read(dbs, 0, 14); RevAppend(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len)); i += len; } void RevAppend(string str) { if (textBox1.InvokeRequired) this.Invoke(new MethodInvoker(delegate { textBox1.AppendText(str); ; textBox1.SelectionStart = int.MaxValue; textBox1.SelectionLength = 1; textBox1.ScrollToCaret(); })); else { textBox1.AppendText(str); textBox1.SelectionStart = int.MaxValue; textBox1.SelectionLength = 1; textBox1.ScrollToCaret(); } }这些是我写的,可是出现的问题,我上面都写了,希望你们帮忙看看 /// <summary> ///发送一个数据 /// </summary> /// <param name="COM">"COM1"</param> /// <param name="BaudRate">9600</param> /// <param name="Data">"123"tobyte[]</param> /// <param name="Encoding">ASCII</param> public static byte[] SerialPort(string p_COM, int p_BaudRate, byte[] p_Data, Encoding p_Encoding) { SerialPort _SendPort = new SerialPort(); _SendPort.PortName = p_COM; _SendPort.BaudRate = p_BaudRate; _SendPort.DataBits = 8; _SendPort.Parity = Parity.None; _SendPort.StopBits = StopBits.One; _SendPort.DtrEnable = true; _SendPort.DtrEnable = true; _SendPort.Encoding = p_Encoding; if (_SendPort.IsOpen) { _SendPort.Close(); _SendPort.Open(); } else { _SendPort.Open(); _SendPort.Write(p_Data, 0, p_Data.Length); byte[] refData = new byte[_SendPort.BytesToRead]; for (int i = 0; i != p_Data.Length; i++) { refData[i] = Convert.ToByte(_SendPort.ReadByte()); } return refData; } return null; }我觉得这个不错 一目了然->http://wenku.baidu.com/view/ae9f3ecaa1c7aa00b52acbe3.html好吧,再给个Demo地址->http://download.csdn.net/detail/mendern/2425658深入学习,参考:http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html?31411http://topic.csdn.net/u/20080619/08/dcef3fe2-f95b-4918-8edb-36d48a3d0528.html?15470 ff,01,ff,ff,ff,ff,01,03,05你这个数据,我猜一下,如果说错了请当我没说你这个应该是16进制 将每个数转换成byte 然后组团发送 邮箱管理软件接收邮件管理的实现原理 C#去掉word页眉内容 基于ASP.Net的B/S结构系统开发 散分贴 xml文件读取 c#弹出画面 返回一个值的问题! 大家帮看看把! axWebBrowser焦点问题 身份证信息的读取 这句是什么意思啊?新手求教 求《C#.NET Web 开发指南》(机械工业出版社)的配套光盘资料 下面程序直接输入,有报警,关于student的报警,请问什么原因 有做过舆情分析系统的吗,我崩溃了~ [分享] C# 基于AForge类库实现的摄像头控制,(附本衰人照片) 最近很流行免积分下载..
。
SerialPort sp = new SerialPort();
private void btn1_Click(object sender, EventArgs e)
{
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Open();
byte[] data = Encoding.Unicode.GetBytes(re.Text);
string str = Convert.ToBase64String(data);
sp.WriteLine(str);
MessageBox.Show("数据发送成功", "系统提示");
} private void btn2_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(sp.ReadLine());
tr.Text = Encoding.Unicode.GetString(data);
sp.Close();
MessageBox.Show("数据接收成功", "系统提示");
(二)这个是用事件触发的,但是用单片机发数据在revtext.Text上接受不到,问?为什么?
}
System.IO.Ports.SerialDataReceivedEventArgs 将导致该该事件被触发; private void mycomm_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int DataLength = mycomm.BytesToRead;//获取接受缓冲区中数据的字节数
int i = 0;
StringBuilder strb = new StringBuilder();
while (i < DataLength)
{
byte[] dbs = new byte[2048];
int len = mycomm.Read(dbs,0,2048);//每次从输入缓冲区中读取2048个字节,并将这些字节写入到dbs[]数组中
strb.Append(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len));
i += len;
}
revtext.Text += strb;// revtext.Text 将显示接收到的数据
}(三)这个与上面类似,用单片机可以实现发数据,在界面上接收,但是收到的是乱码?问:为什么?
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{ int DataLength = serialPort1.BytesToRead;
int i = 0;
StringBuilder strb = new StringBuilder();
while(i<DataLength )
{
byte[] dbs = new byte[14];
int len = serialPort1.Read(dbs, 0, 14);
RevAppend(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len));
i += len;
} void RevAppend(string str)
{
if (textBox1.InvokeRequired)
this.Invoke(new MethodInvoker(delegate
{
textBox1.AppendText(str); ;
textBox1.SelectionStart = int.MaxValue;
textBox1.SelectionLength = 1;
textBox1.ScrollToCaret();
}));
else
{
textBox1.AppendText(str);
textBox1.SelectionStart = int.MaxValue;
textBox1.SelectionLength = 1;
textBox1.ScrollToCaret();
}
}这些是我写的,可是出现的问题,我上面都写了,希望你们帮忙看看
/// <summary>
///发送一个数据
/// </summary>
/// <param name="COM">"COM1"</param>
/// <param name="BaudRate">9600</param>
/// <param name="Data">"123"tobyte[]</param>
/// <param name="Encoding">ASCII</param>
public static byte[] SerialPort(string p_COM, int p_BaudRate, byte[] p_Data, Encoding p_Encoding)
{
SerialPort _SendPort = new SerialPort();
_SendPort.PortName = p_COM;
_SendPort.BaudRate = p_BaudRate;
_SendPort.DataBits = 8;
_SendPort.Parity = Parity.None;
_SendPort.StopBits = StopBits.One;
_SendPort.DtrEnable = true;
_SendPort.DtrEnable = true;
_SendPort.Encoding = p_Encoding; if (_SendPort.IsOpen)
{
_SendPort.Close();
_SendPort.Open();
}
else
{
_SendPort.Open();
_SendPort.Write(p_Data, 0, p_Data.Length);
byte[] refData = new byte[_SendPort.BytesToRead];
for (int i = 0; i != p_Data.Length; i++)
{
refData[i] = Convert.ToByte(_SendPort.ReadByte());
}
return refData;
} return null; }我觉得这个不错 一目了然->http://wenku.baidu.com/view/ae9f3ecaa1c7aa00b52acbe3.html好吧,再给个Demo地址->http://download.csdn.net/detail/mendern/2425658深入学习,参考:
http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html?31411
http://topic.csdn.net/u/20080619/08/dcef3fe2-f95b-4918-8edb-36d48a3d0528.html?15470