1.首先要引用  System.IO.Ports

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;
using System.Threading; namespace FrmScanProt
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} //APICloud //app string text = "";
SerialPort sp = new SerialPort(); delegate void UpdateTextEventHandler(string text); //委托,此为重点.
UpdateTextEventHandler updateText; //事件 private void Form1_Load(object sender, EventArgs e)
{
AddParameters(); string[] itemName = SerialPort.GetPortNames(); //获取当前计算机串型端口名称数组.
cboPortName.Items.Clear();
foreach (var item in itemName)
{
cboPortName.Items.Add(item);
} cboPortName.SelectedIndex = ;
cboBaudRate.SelectedIndex = ;
cboDataBit.SelectedIndex = ;
cboParityBit.SelectedIndex = ;
cboStopBit.SelectedIndex = ; updateText += new UpdateTextEventHandler(UpdateTextBox); //委托方法
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); //处理串口对象的数据接收事件的方法. sp.Close();
lblScan.Text = "未开启采集程序."; } private void button1_Click(object sender, EventArgs e)
{
if (txtCode.Text != "")
{
listBox1.Items.Add(txtCode.Text);
txtCode.Text = "";
txtCode.Focus();
}
else { MessageBox.Show(" 条码不能为空!"); txtCode.Focus(); }
} private void btnStartScan_Click(object sender, EventArgs e)
{
if (!sp.IsOpen)
{
sp.Open(); //打开一个新的串口连接.
lblScan.Text = "采集中...";
txtCode.Focus();
}
} private void btnEndScan_Click(object sender, EventArgs e)
{
if (sp.IsOpen)
{
sp.Close(); //关闭一个串口连接.
lblScan.Text = "采集结束.";
txtCode.Focus();
}
} /// <summary>
/// 串口名称
/// </summary>
private void cboPortName_SelectedIndexChanged(object sender, EventArgs e)
{
sp.PortName = cboPortName.Items[cboPortName.SelectedIndex].ToString();
} /// <summary>
/// 波特率(每秒传送字节数)
/// </summary>
private void cboBaudRate_SelectedIndexChanged(object sender, EventArgs e)
{
//获取或设置串口波特率
// cboBaudRate.Items.Add(sp.BaudRate);
sp.BaudRate = Convert.ToInt32(cboBaudRate.Items[cboBaudRate.SelectedIndex].ToString()); }
/// <summary>
/// 数据字节
/// </summary>
private void cboDataBit_SelectedIndexChanged(object sender, EventArgs e)
{
//设置每个字节的标准数据长度
sp.DataBits = Convert.ToInt32(cboDataBit.Items[cboDataBit.SelectedIndex].ToString());
}
/// <summary>
/// 停止位置
/// </summary>
private void cboStopBit_SelectedIndexChanged(object sender, EventArgs e)
{
//设置每个字节的标准停止位数
sp.StopBits =(StopBits)cboStopBit.SelectedIndex;
}
/// <summary>
/// 奇偶位置
/// </summary>
private void cboParityBit_SelectedIndexChanged(object sender, EventArgs e)
{
//设置奇偶校验检查协议
// sp.Parity = Parity.Odd;
sp.Parity = (Parity)System.Enum.Parse(typeof(Parity), cboParityBit.SelectedIndex.ToString());
}
/// <summary>
/// 接收到的数据
/// </summary>
private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if(!sp.IsOpen)
{
MessageBox.Show("请先启用扫描枪采集...");
Thread.Sleep();
this.Close();
return;
} Thread.Sleep();
byte[] buffer = Encoding.UTF8.GetBytes(sp.ReadExisting());
string newString = Encoding.UTF8.GetString(buffer); //string readString = sp.ReadExisting();//读取串口对象的流和输入缓冲区所有立即可用的字节流. this.Invoke(updateText, new string[] { newString }); //控件基础句柄的线程上,执行委托.
} /// <summary>
/// 获取数据.
/// </summary>
private void UpdateTextBox(string text)
{
this.txtCode.Text = text;
listBox1.Items.Add(txtCode.Text);
txtCode.Text = "";
} private void AddParameters()
{
this.cboBaudRate.Items.AddRange(new object[] { "", "", "", "", "", "", "", "", "" }); this.cboDataBit.Items.AddRange(new object[] { "", "", "", "" }); this.cboStopBit.Items.AddRange(new object[] { "0.5", "", "1.5", "" }); this.cboParityBit.Items.AddRange(new object[]{"none","odd","even"});
} private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
}
}

C# 如何操作串口的更多相关文章

  1. C#操作串口总结

    Technorati 标签: C#,SerialPort,ReadTo,ReadTimeout        最近几天一直在调一个要长时间连续不断的操作串口,并且是多线程运行,不允许中断的服务.后来服 ...

  2. MSComm控件与Win32 API操作串口有何区别?

    MSComm控件与Win32 API操作串口有何区别? [问题点数:50分,结帖人shell_shell]   收藏帖子 回复 我是一个小兵,在战场上拼命!   结帖率 83.33% 我以前用MSCo ...

  3. android开发(37) android使用android_serialport_api 操作串口,解决权限问题

    最近有个项目,要使用android设备操作串口的 斑马GK888T打印机,使用打印机打印二维码. 硬件设备连接方式: 安卓设备 通过 串口RS232 连接 斑马打印机的串口 那么就要解决:使用安卓设备 ...

  4. CE 操作串口

    WinCE里面都是通过标准的系统API对串口进行操作的,但是串口不同于其它文件,它是是独占式地操作的. 下面是一个操作的串口类: #pragma once typedef void (*LPDataA ...

  5. 通过shell操作串口

    1. 通过stty工具设置串口参数,例如 stty -F /dev/ttyUSB0 raw speed 9600 -echo min 0 time 10 上例设置了ttyUSB0设备的数据流格式为ra ...

  6. Pyserial操作串口

    pySerial 介绍 封装了串口通讯模块,支持Linux.Windows.BSD(可能支持所有支持POSIX的操作系统),支持Jython(Java)和IconPython(.NET and Mon ...

  7. python操作串口

    import serial test = serial.Serial("COM1",115200)#这里就已经打开了串口 print(test.portstr) test.writ ...

  8. qt 操作串口 QSerialPort

    准备工作 *.pro中加入 QT += serialport 初始化 void MainWindow::initPort() { //读取串口信息 foreach (const QSerialPort ...

  9. qt 操作串口

    第三方类下载 https://sourceforge.net/projects/qextserialport/files/ 目录介绍 搭建工程 拷贝qextserialbase.cpp.qextser ...

随机推荐

  1. leetcode455

    public class Solution { public int FindContentChildren(int[] g, int[] s) { var listg = g.OrderBy(x = ...

  2. 【转】Ultra simple ISO-7816 Interface

    原文出自 http://hilbert-space.de/?p=135 While laying out a PCB for my SWP reader project I realized that ...

  3. heat 用法 示例

    heat.exe dir "./SampleFolder" -cg Files -dr INSTALLDIR -gg -g1 -sf -srd -var "var.Tar ...

  4. salt常用模块及API

    saltstack提供了非常丰富的功能模块,涉及操作系统的基础功能,常用工具支持等,更多模块信息见官网模块介绍:https://docs.saltstack.com/en/latest/ref/mod ...

  5. Haskell语言学习笔记(67)Gtk2Hs

    Gtk2Hs $ brew cask install xquartz $ brew install glib cairo gtk gettext fontconfig freetype $ expor ...

  6. mysql允许远程登录

    Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...

  7. centos7 /etc/profile /etc/bashrc

    在/etc/profile中添加环境变量后,是使用source /etc/profile编译后只能在当前终端生效 重新开启一个终端后,该环境变量失效. 解决方法: 重启系统:reboot,问题解决 环 ...

  8. mysql 数值与字符类型 长度梳理

    上述表格中的数值类型都是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的存储字节大小都是固定的.例如,设置int(1),虽然M值是1个字符,但是它所占用的空间大小永远都是4个字节的大小,换 ...

  9. dubbo2.5.3升级到dobbo2.8.4(dubbox) jar

    需要注意的地方: 1.pom文件中 dubbo的版本由2.5.3变为2.8.4,maven依赖如下:     <dependency>         <groupId>com ...

  10. webpack 常用插件及作用

    copy-webpack-plugin :复制文件到目标文件夹.在开发时使用热模替换,(没有生成dist 文件夹,都在内存中),如果想引用某一个js文件,直接写script标签是找不到的,因为服务器内 ...