很多初学者在接触到串口编程时,不知道如何入手,找了网上一些文章,也是鱼龙混杂,不好学习。
今天,我分享一篇文章,讲述 基于C# Winform的串口数据接收编程(适合大概明白WinForm编程的同学,没有接触过WinForm的同学下载源码学习)
首先添加串口(自行拖拽)
SerialPort serialPort1 = new SerialPort('COM2', 9600, Parity.None, 8, StopBits.One); //初始化串口设置
创建一个数据接收方法
void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { Byte[] InputBuf = new Byte[128]; try { serialPort1.Read(InputBuf, 0, serialPort1.BytesToRead); //读取缓冲区的数据直到“}”即0x7D为结束符 //InputBuf = UnicodeEncoding.Default.GetBytes(strRD); //将得到的数据转换成byte的格式 System.Threading.Thread.Sleep(50); this.Invoke(disp_delegate, InputBuf); } catch (TimeoutException ex) //超时处理 { MessageBox.Show(ex.ToString()); } }
建立一个委托事件:(关于C#委托事件,下文会有参考文章)
public void DispUI(byte[] InputBuf) { //textBox1.Text = Convert.ToString(InputBuf); ASCIIEncoding encoding = new ASCIIEncoding(); richTextBox1.Text = encoding.GetString(InputBuf); }
完整的程序代码:
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 WindowsFormsApplication3{ public partial class Form1 : Form { SerialPort serialPort1 = new SerialPort('COM2', 9600, Parity.None, 8, StopBits.One); //初始化串口设置 public delegate void Displaydelegate(byte[] InputBuf); Byte[] OutputBuf = new Byte[128]; public Displaydelegate disp_delegate; public Form1() { disp_delegate = new Displaydelegate(DispUI); serialPort1.DataReceived += new SerialDataReceivedEventHandler(Comm_DataReceived); InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { if (button1.Text == '打开') { serialPort1.Open(); button1.Text = '关闭'; } else { serialPort1.Close(); button1.Text = '打开'; } } catch (Exception ex) { MessageBox.Show(ex.Message, '错误提示', MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { Byte[] InputBuf = new Byte[128]; try { serialPort1.Read(InputBuf, 0, serialPort1.BytesToRead); //读取缓冲区的数据直到“}”即0x7D为结束符 //InputBuf = UnicodeEncoding.Default.GetBytes(strRD); //将得到的数据转换成byte的格式 System.Threading.Thread.Sleep(50); this.Invoke(disp_delegate, InputBuf); } catch (TimeoutException ex) //超时处理 { MessageBox.Show(ex.ToString()); } } public void DispUI(byte[] InputBuf) { //textBox1.Text = Convert.ToString(InputBuf); ASCIIEncoding encoding = new ASCIIEncoding(); richTextBox1.Text = encoding.GetString(InputBuf); } }}
程序运行
最后分享一个虚拟串口工具:vspd(在没有底层硬件的时候,这个工具就派上用场了,结合串口小助手还有自己开发的程序使用)
程序源码:http://download.csdn.net/detail/kevin_iot/9724392
委托事件:http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。