日期:2014-05-17 浏览次数:20870 次
以前一直用delphi和BCB设计和串口通信有关的软件, 不过为了与时俱进,今天在网上找了找资料,写了一个C#的串口小程序供大家参考学习.
GUI的图片:
功能的设定是非常简单的,为了大家修改成自己需要的模式,我删除了大部分不常用的功能留下了最最基础的代码.
通过选择串口,设定波特率,启动,发送字符,HEX格式切换等基本功能实现了串口通信的功能。
一下是基本代码,因为所有的代码我都简化和加了注释,所以相信是非常容易理解的。
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; namespace MyUSART { public partial class MainForm : Form { bool USARTstate = true;// 串口状态 true 为可以启动 false 为可以关闭 int RxNum = 0; int TxNum = 0; public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { timer1.Enabled = false; timer1.Interval = 50; try { foreach (string com in System.IO.Ports.SerialPort.GetPortNames()) this.comboBox1PortName.Items.Add(com); comboBox1PortName.SelectedIndex = 0; comboBox2BaudRate.SelectedIndex = 0; } catch (System.Exception ex) { MessageBox.Show("找不到通讯串口!", "串口提示"); } } private void button1USARTstart_Click(object sender, EventArgs e) { if(USARTstate)//默认启动 { button1USARTstart.Text = "停止"; serialPort1.PortName = comboBox1PortName.Text; serialPort1.BaudRate = Convert.ToInt32(comboBox2BaudRate.Text); try { serialPort1.Open(); USARTstate = false;//可以关闭 comboBox1PortName.Enabled = false; comboBox2BaudRate.Enabled = false; timer1.Enabled = true; } catch (System.Exception ex) { MessageBox.Show("打开串口失败!\r\n:"+ex.Message); } } else { button1USARTstart.Text = "启动"; try { serialPort1.Close(); USARTstate = true;//可以启动 comboBox1PortName.Enabled = true; comboBox2BaudRate.Enabled = true; timer1.Enabled = false; } catch (System.Exception ex) { MessageBox.Show("关闭串口失败!\r\n:"+ex.Message); } } } //public static 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, ' ')); // return sb.ToString().ToUpper(); //} public static string ByteArrayToString(byte[] data)//字节数组转为十六进制字符串 { StringBuilder sb = new StringBuilder(data.Length * 3); foreach (byte b in data) sb.Append(Convert.ToChar(b)); //return sb.ToString().ToUpper(); return sb.ToString(); } public static byte[] HexStrToHexByte(string hexStr) { hexStr = hexStr.Replace(" ", "");//去掉字符串中所有的空格 if (hexStr.Length % 2 != 0) hexStr += " "; byte[] returnBytes = new byte[hexStr.Length / 2];//新建一个byte数组,存放16进制byte for (int i = 0; i < returnBy