C# 一个C#串口通信的简单调试工具
来源:互联网 发布:php class w3c 编辑:程序博客网 时间:2024/05/03 22:22
这个小工具是小弟两年前写的,代码可能有点稚嫩,但是原理以及机制依旧不变 ,原文发布在其他博客中.....
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.Collections;namespace one{ /// <summary> /// 一个串口的例子 /// </summary> public partial class Form1 : Form { Form from = new Form(); private string str = string.Empty; private byte[] by; public Form1() { InitializeComponent(); } #region 加载本电脑上的串口 private void Form1_Load(object sender, EventArgs e) { button3.Enabled = true; button4.Enabled = false; comboBox2.Text = "9600"; string[] portList = System.IO.Ports.SerialPort.GetPortNames(); for (int i = 0; i < portList.Length; i++) { comboBox3.Items.Add(portList[i]); comboBox1.Items.Add(portList[i]); comboBox4_shou.Items.Add(portList[i]); } } #endregion /// <summary> /// 将信息发送到该Com口 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { byte[] b = new byte[10]; b = GEt(); write(); //MessageBox.Show(ByteArrayToHexString(Data).ToString()); } #region 写入数据 public void write() { try { // serialPort1.PortName = comboBox1.Text; //serialPort1.Open(); //serialPort1.BaudRate = int.Parse(comboBox2.Text); //声明一个byte的数组来将需要发的信息发到byte 上 byte[] Data = new byte[4]; Data = Encoding.Unicode.GetBytes(textBox1.Text.Trim()); // string sr = ByteArrayToHexString(Data); //使用缓冲区将数据写入 串行端口 serialPort1.Write(by, 0, by.Length); } catch (Exception p) { Console.WriteLine(p.Message); MessageBox.Show(p.Message); } } #endregion private void button2_Click(object sender, EventArgs e) { //read(); textBox2.Text = ""; } #region 读取串口数据的方法 public void read() { try { byte[] _data = new byte[4]; serialPort2.Read(_data,0,_data.Length ); // str = Encoding.Unicode.GetString(_data); str = ByteArrayToHexString(_data); } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion #region 打开串口 /// <summary> /// 打开当前串口 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { try { serialPort1.PortName = comboBox1.Text; serialPort1.BaudRate = 9600; if (!serialPort1.IsOpen) { serialPort1.Open(); button3.Enabled = false; button4.Enabled = true; } else { MessageBox.Show("串口或许被打开或者不存在"); } } catch (Exception g) { Console.WriteLine(g.Message); MessageBox.Show(g.Message); } } #endregion #region 关闭串口 /// <summasry> /// 关闭当前串口 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { try { if (serialPort1.IsOpen) { serialPort1.Close(); button4.Enabled = false; button3.Enabled = true; } else { MessageBox.Show("串口或许被关闭或者串口不存在"); } } catch (Exception ex) { Console.WriteLine(ex); MessageBox.Show(ex.Message); } } #endregion private void button5_Click(object sender, EventArgs e) { MessageBox.Show(serialPort1.ReadBufferSize.ToString()); } #region 打开串口 /// <summary> /// 打开接受信息的串口 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button7_Click(object sender, EventArgs e) { try { serialPort2.PortName = comboBox4_shou.Text; serialPort2.BaudRate = 9600; if (!serialPort2.IsOpen) { serialPort2.Open(); button7.Enabled = false; button6.Enabled = true; } else { MessageBox.Show("串口或许被打开或者不存在"); } } catch (Exception g) { Console.WriteLine(g.Message); MessageBox.Show(g.Message); } } #endregion #region 串口被关闭 /// <summary> /// 关键接受信息的串口 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button6_Click(object sender, EventArgs e) { try { if (serialPort2.IsOpen) { serialPort2.Close(); button6.Enabled = false; button7.Enabled = true; } else { MessageBox.Show("串口或许被关闭或者串口不存在"); } } catch (Exception ex) { Console.WriteLine(ex); MessageBox.Show(ex.Message); } } #endregion #region 设置自动发送的代码 private void timer1_Tick(object sender, EventArgs e) { if (chek_bok.Checked) { write(); send(); } else { send(); } } #endregion #region 读取串口数据 private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { read(); } #endregion #region 发送数据 /// <summary> /// 发送数据 /// </summary> private void send() { button8.Text = DateTime.Now.ToString(); if (str.Length > 0) { textBox2.Text += " " + str; str = ""; } else { textBox2.ForeColor = Color.Red; } if (textBox2.Text.Length > 100) { //textBox2.Clear(); } } #endregion #region 将字节数据转换为16进制的数据 /// <summary> /// 一个将字节数组转换为16进制的 /// </summary> /// <param name="data"></param> /// <returns></returns> private string ByteArrayToHexString(byte[] data) { StringBuilder sb = new StringBuilder(data.Length * 3); foreach (byte b in data) { sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' ')); string s= Convert.ToString(b, 16); } return sb.ToString().ToUpper(); } #endregion /// <summary> /// 返回一个byte[] 类型的一个数组 /// </summary> /// <returns>byte类型的数组</returns> public byte[] GEt() { string s = textBox1.Text.Trim(); /*拿到那个从文本框输入的文本值 * * 并且 */ if (s.Length<10) { for (int i = 0; i < 9; i++) { if (s.Length==9) { goto GZ; } else { s += 0; } } } GZ: List<byte> arr = new List<byte>(); string a_ = string.Empty; for (int i = 0; i < s.Length;i++) { if (s.Length > 2) { a_ = s.Substring(0, 2); s = s.Remove(0, 2); byte a = Convert.ToByte(Convert.ToInt32(a_, 16)); arr.Add(a); } else { break; } } by = new byte[4]; by = arr.ToArray(); return by; } }}
0 0
- C# 一个C#串口通信的简单调试工具
- 一个基于C#的简单串口示例
- C#做一个简单的进行串口通信的上位机
- C#做一个简单的进行串口通信的上位机
- C#超级通信调试工具
- C#串口通信的初学
- 收藏一个C# 串口通信相关的帖子
- C#串口调试工具 v2.0
- C#串口介绍以及简单串口通信程序设计实现
- C# 串口介绍以及简单串口通信程序设计实现
- C# 简单的串口读取
- C#串口通信
- C#实现串口通信
- C# Mscommm串口通信
- C#串口通信
- C#未完成----串口通信
- c#串口通信Develop
- C#串口通信
- iOS7中类似iOS6效果的Grouped TableView
- php时间函数大锦集
- 武当山自由行--你的不二之选
- GitHub上README写法暨GFM语法解读
- 素数输出...
- C# 一个C#串口通信的简单调试工具
- leetcode之Clone Graph
- 李瑞英张宏民退居幕后 网友感叹难舍“国脸”
- foo ?
- 新人要学的HTML实用颜色代码大全
- 曝李小冉鄢颇分手2个月 男方曾被女方旧爱砍伤
- PHP 文档学习 - 3 - 流程控制
- Android使用gson解析json
- 博客已搬家