利用 SerialPort 控件实现 PC 串口通信
整理参考自《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 串口通信的更多相关文章
- C#利用SerialPort控件进行串口编程小记
一.关于DataReceive事件. 主程序必须有 outserialPort.DataReceived +=new SerialDataReceivedEventHandler(outserialP ...
- 基于FPGA的红外遥控解码与PC串口通信
基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...
- 在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择
在实际的项目开发过程中,有好的控件或者功能模块,我都是想办法尽可能集成到我的WInform开发框架中,这样后面开发项目起来,就可以节省很多研究时间,并能重复使用,非常高效方便.在我很早之前的一篇博客& ...
- C/S模式开发中如何利用WebBrowser控件制作导航窗体
原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...
- DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST
Delphi XE10,Json 生成和解析,再利用indyhttp控件Post 年09月20日 :: 阅读数: --不多说,直接上代码 procedure TFrmMain.Brand; var J ...
- winform利用ImageList控件和ListView控件组合制作图片文件浏览器
winform利用ImageList控件和ListView控件组合制作图片文件浏览器,见图,比较简单,实现LISTVIEW显示文件夹图片功能. 1.选择文件夹功能代码: folderBrowserDi ...
- serialport控件的详细用法
http://www.cnblogs.com/jerry-bian/archive/2012/01/10/2317861.html 最近在做通讯协议,关于SerialPort类 DataReceive ...
- 利用activeX控件在网页里自动登录WIN2003远程桌面并实时控制
首先要自己配置并打开受控端的WEB远程桌面服务,这个在“添加/删除windows组件”里有,我只在windows 2003 server里试过,没试过XP.下面我们在客户端安装微软提供的远程桌面客户端 ...
- 如何显示二进制流的图片(利用img控件)
之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控件来显示的二进制流图片,我现在想的是能 通过普通的<img id ...
随机推荐
- 树莓派 raspberry 入门之安装操作系统以及配置
最近新入手一树莓派,型号是2代B,屏幕是微雪的7 inch c型 显示屏.下面来教大家怎么点亮树莓派. 第一步,装好显示器,显示器的电源接在树莓派的usb口上,HDMI口不多说,连上.然后装好鼠标.键 ...
- 软键盘android:windowSoftInputMode属性详解
android:windowSoftInputModeactivity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性.这个属性能影响两件事情:[一]当有焦 ...
- entity framework extended library , bulk execute,deleting and updating ,opensource
http://weblogs.asp.net/pwelter34/entity-framework-batch-update-and-future-queries
- 个人作业-Homework1感想
我以前没有系统学习过C++和C#,编程能力比较差.这次个人作业对我来说是一个很大的挑战.由于布置作业的时间是开学的第一周,因为还没有从假期的状态中转换出来,这对我写作业又增加了一定的难度. 在开始写作 ...
- 看看baidu是如何AJAX跨域的[转]
看看baidu是如何AJAX跨域的 最近做个人网站遇到AJAX跨子域名的问题. 偶尔看到baidu的通行证处理都是在二级域名passport.baidu.com中处理的, 但是baidu很多地方登录都 ...
- BT5升级MSF至Git更新的方法
由于Kali在虚拟机的运行效率实在让人不敢恭维,于是决心将BT5中的MSF进行升级,升级的主要目的是,BT5R3内置的MSF是用SVN进行更新, 但是新版本的MSF已经停止通过SVN更新,改用Git, ...
- ubuntu下firefox安装Adobe Flash Player
转自ubuntu系统自带的火狐(firefox)如何安装Adobe Flash 当你刚装完系统,发现打开某些网站时,提示你"需要安装flash",然后你点击确定,过了一会,提示你安 ...
- UIWebView 与 JS 交互(1):Objective-C 调用 Javascript
众所周知,随着硬件水平的发展,HTML5 与原生 APP 性能差距不断缩小,正在互联网科技领域扮演者越来越重要的角色.作为一种能很大程度上节约成本的技术方案,通过 HTML5 及 JS 实现的跨平台技 ...
- 安装edX DevStack
概述 edX Developer Stack 就是通常我们所说的Devstack,是为本地开发所设计的一个Vagrant实例. Devstack: 和产品(edx Product Stack)对系统的 ...
- tbr tbn tbc
http://tech.bobgo.net/?m=201004 因为最近的工作需要从MP4视频中提取一些关键帧,要了解如何将视频的时间点转换为对应的帧号,所以查阅了一些关于视频编解码以及时间同步方式的 ...