整理参考自《Visual C#.NET 串口通信及测控应用典型实例》1.3 节 以及 一篇博文:C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子

硬件部分

如果是两个串口设备,把其中一个的 2、3、5 引脚分别连接到另一个的 3、2、5 引脚即可。

如果是单个串口设备,则将其2、3引脚相连就行了。

如果没有串口设备,可以使用软件(Virtual Serial Port Driver)模拟串口。

硬件连接好之后,可以先下载一个“串口调试助手1”测试串口连接是否正常。

软件部分

利用 .NET 平台下的 SerialPort 控件。

通信接收实现方式:

1. 查询方式:通过一个计数器,定时查询是否有可接受的内容。

界面如下:

实现代码:

using System;
using System.Windows.Forms; namespace QueryMode
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
} private void FormMain_Load(object sender, EventArgs e)
{
spSend.PortName = "COM2";
spSend.BaudRate = ;
spSend.Open();
spReceive.PortName = "COM3";
spReceive.BaudRate = ;
spReceive.Open(); timerReceive.Start();
} private void btnSend_Click(object sender, EventArgs e)
{
string dataToSend = txtSend.Text;
if (dataToSend == "")
{
MessageBox.Show("发送数据不能为空");
}
else
{
spSend.Write(dataToSend);
}
} private void timerReceive_Tick(object sender, EventArgs e)
{
string dataReceived;
dataReceived = spReceive.ReadExisting();
txtRecevie.AppendText(dataReceived);
} private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
spSend.Close();
spReceive.Close();
}
}
}

2. 事件方式:利用 SerialPort 控件的 DataReceived 事件。

界面部分基本同上,只是不需要 timer 控件了。

实现代码:

using System;
using System.Windows.Forms; namespace EventMode
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
} private void FormMain_Load(object sender, EventArgs e)
{
spSend.PortName = "COM2";
spSend.BaudRate = ;
spSend.Open();
spReceive.PortName = "COM3";
spReceive.BaudRate = ;
spReceive.Open();
} private void btnSend_Click(object sender, EventArgs e)
{
string dataToSend = txtSend.Text;
if (dataToSend == "")
{
MessageBox.Show("发送数据不能为空");
}
else
{
spSend.Write(dataToSend);
}
} private void spReceive_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string dataReceived;
dataReceived = spReceive.ReadExisting();
this.Invoke((EventHandler)delegate
{
txtRecevie.AppendText(dataReceived);
});
} private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
spSend.Close();
spReceive.Close();
}
}
}

需要说明的是,在 DataReceived 事件处理方法中,在用到主窗体的 TextBox 控件时,要通过控件的 invoke 方法,否则会出现线程间的操作问题:


注1:串口调试助手软件主页:http://www.gjwtech.com/(用 Chrome 打开时提醒“存在恶意软件”,请谨慎操作。)

备选下载地址:http://pan.baidu.com/s/16AzRO(串口调试助手V2.2)

注2:程序完整解决方案下载:http://pan.baidu.com/s/1d4om3(VS2010 版)

利用 SerialPort 控件实现 PC 串口通信的更多相关文章

  1. C#利用SerialPort控件进行串口编程小记

    一.关于DataReceive事件. 主程序必须有 outserialPort.DataReceived +=new SerialDataReceivedEventHandler(outserialP ...

  2. 基于FPGA的红外遥控解码与PC串口通信

    基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...

  3. 在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择

    在实际的项目开发过程中,有好的控件或者功能模块,我都是想办法尽可能集成到我的WInform开发框架中,这样后面开发项目起来,就可以节省很多研究时间,并能重复使用,非常高效方便.在我很早之前的一篇博客& ...

  4. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  5. DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST

    Delphi XE10,Json 生成和解析,再利用indyhttp控件Post 年09月20日 :: 阅读数: --不多说,直接上代码 procedure TFrmMain.Brand; var J ...

  6. winform利用ImageList控件和ListView控件组合制作图片文件浏览器

    winform利用ImageList控件和ListView控件组合制作图片文件浏览器,见图,比较简单,实现LISTVIEW显示文件夹图片功能. 1.选择文件夹功能代码: folderBrowserDi ...

  7. serialport控件的详细用法

    http://www.cnblogs.com/jerry-bian/archive/2012/01/10/2317861.html 最近在做通讯协议,关于SerialPort类 DataReceive ...

  8. 利用activeX控件在网页里自动登录WIN2003远程桌面并实时控制

    首先要自己配置并打开受控端的WEB远程桌面服务,这个在“添加/删除windows组件”里有,我只在windows 2003 server里试过,没试过XP.下面我们在客户端安装微软提供的远程桌面客户端 ...

  9. 如何显示二进制流的图片(利用img控件)

    之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控件来显示的二进制流图片,我现在想的是能 通过普通的<img id ...

随机推荐

  1. wpf单实例运行

    默认情况下我们可以打开一个应用程序多个实例,例如你双击一个exe多次.当然有些时候这么做会带来很多好处,但是有时我们又不希望这么做,要避免这个问题其实很简单,同WinForm中单实例运行一个应用是一样 ...

  2. hdu 5510 Bazinga KMP+尺取法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:至多50组数据,每组数据至多500个字符串,每个字符串的长度最长为2000.问最大的下标( ...

  3. 3.MVC框架开发(Razor内嵌函数)

    1.建立没有返回值的Razor内嵌函数(但是能直接输出内容) 必须以@符号开头,没有返回值但能直接输出内容,比如: @helper showTitle(string strTitle){ ){ @(s ...

  4. JDBC和DBUtils区别(查询时jdbc只能返回ResultSet需要po转vo,dbutils返回的BeanListHandler与BeanHandler对应集合与对象)

    17:34 2013/6/7 JDBC //添加客户 public void addNewCustomer(Customer c) throws DAOException { Connection c ...

  5. python与编码

    Python中的文字对象 Python 3.x中处理文字的对象有str, bytes, bytearray. bytes和bytearray可以使用除了用作格式化的方法(format, format_ ...

  6. 使用Yeoman搭建 AngularJS 应用 (3) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/setup.html 与Yeoman的交互大多数是通过命令行.在苹果机器需要使用Terminal应用,在Linux使用shell.如果使用W ...

  7. delphi xe5 android listbox的 TMetropolisUIListBoxItem

    listbox实现以下效果: \ 关键代码,采用数据集的方式 type PpatientData=^RpatientData; RpatientData= record patient_id:stri ...

  8. Java 8 vs. Scala(二):Stream vs. Collection

    [编者按]在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比.在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要 ...

  9. MongoDB实战指南(二):索引与查询优化

    数据库保存记录的机制是建立在文件系统上的,索引也是以文件的形式存储在磁盘上,在数据库中用到最多的索引结构就是B树.尽管索引在数据库领域是不可缺少的,但是对一个表建立过多的索引会带来一些问题,索引的建立 ...

  10. ANDROID_MARS学习笔记_S01原始版_017_绑定SERVICE

    一.流程 1.编写service,重写onBind(Intent intent),返回自定义的Binder 2.自写义Binder,提供一个可访问的方法,以传递数据 3.点击界面按钮会开启servic ...