Winform 串口通讯之读卡器

老板给我的第一个硬件就是一个读卡器,

说让我做一下试试,于是从网上查了查就写了出来,相当的简单。

但是后来还有一个地磅的串口通讯,我整整搞了一天。

在窗体类的构造函数中写入

Form.CheckForIllegalCrossThreadCalls = false;

可以在线程外更新窗体,这样就可以一直接收数据,一直更新ui了。

打开串口按钮:

 1             //实例化
 2             SerialPort Myport = new SerialPort();
 3             //设置串口端口
 4             Myport.PortName = cbxPortName.Text;
 5             //设置比特率
 6             Myport.BaudRate = Convert.ToInt32(cmbbaud.Text);
 7             //设置数据位
 8             Myport.DataBits = Convert.ToInt32(cmbBits.Text);
 9             //根据选择的数据,设置停止位
10             //if (cmbStop.SelectedIndex == 0)
11             //    Myport.StopBits = StopBits.None;
12             if (cmbStop.SelectedIndex == 1)
13                 Myport.StopBits = StopBits.One;
14             if (cmbStop.SelectedIndex == 2)
15                 Myport.StopBits = StopBits.OnePointFive;
16             if (cmbStop.SelectedIndex == 3)
17                 Myport.StopBits = StopBits.Two;
18
19             //根据选择的数据,设置奇偶校验位
20             if (cmbParity.SelectedIndex == 0)
21                 Myport.Parity = Parity.Even;
22             if (cmbParity.SelectedIndex == 1)
23                 Myport.Parity = Parity.Mark;
24             if (cmbParity.SelectedIndex == 2)
25                 Myport.Parity = Parity.None;
26             if (cmbParity.SelectedIndex == 3)
27                 Myport.Parity = Parity.Odd;
28             if (cmbParity.SelectedIndex == 4)
29                 Myport.Parity = Parity.Space;
30
31             //此委托应该是异步获取数据的触发事件,即是:当有串口有数据传过来时触发
32             Myport.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived);//DataReceived事件委托
33             //打开串口的方法
34             try
35             {
36                 Myport.Open();
37                 if (Myport.IsOpen)
38                 {
39                     MessageBox.Show("串口已打开");
40                 }
41                 else
42                 {
43                     MessageBox.Show("串口未能打开");
44                 }
45             }
46             catch (Exception ex)
47             {
48                 MessageBox.Show("串口未能打开"+ex.ToString());
49             }

关闭就使用 Myport.Close(); 在读卡器的串口通讯中是不会有问题的

DataReceived事件委托的方法

 1  private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
 2         {
 3             try
 4             {
 5                 string currentline = "";
 6                 //循环接收串口中的数据
 7                 while (Myport.BytesToRead > 0)
 8                 {
 9                     char ch = (char)Myport.ReadByte();
10                     currentline += ch.ToString();
11                 }
12                 //在这里对接收到的数据进行显示
13                 //如果不在窗体加载的事件里写上:Form.CheckForIllegalCrossThreadCalls = false; 就会报错)
14                 this.txtReceive.Text = currentline;
15             }
16             catch (Exception ex)
17             {
18                 Console.WriteLine(ex.Message.ToString());
19             }
20         }
时间: 2024-10-05 16:32:49

Winform 串口通讯之读卡器的相关文章

Winform 串口通讯之地磅

继上次的读卡之后,要做一个地磅的读取. 下面是我在读卡Demo上改的读取地磅的. 地磅是一直向串口发送数据的,所以需要截取数据来一直判断数据是否合法,然后计算出结果. 其中遇到了一个小问题,文末有介绍. 本人初学菜鸟,大牛们有意见欢迎评论. 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6

C#串口通讯

本文提供一个用C#实现串口通讯实例,亲自编写,亲测可用! 开发环境:VS2008+.net FrameWork3.5(实际上2.0应该也可以) 第一步 创建一个WinForm窗体,拉入一些界面元素 重点就是,图中用红框标出的,工具箱——组件——SerialPort,做.net串口通讯,这是必备控件 第二步 设置SerialPort控件属性 用C#向串口发送数据没什么特别的,就是调用SerialPort的Write方法往串口写数据就行 但是从串口那里接收数据的方式就比较特别了 首先,需要在代码里声

多机串口通讯

★使用器件 使用了3块80c51的单片机,其中U1为主机控制其他两个从机U2,U3.每个单片机上都有一个数码管用来显示数据.主机上有两个按键KEY_1,KEY_2,分别用来控制不同的从机. ★实现目标 主要实现的目标就是通过写多机通讯来了解他们其中的协议,以及简单协议的写法!本程序主要达到了一下效果,主机可以通过发送命令来控制从机:发送数据给从机.接收从机的数据.然后将从机或者主机显示的数据显示在数码管上. ★协议要求 1.地址:主机的地址设置为0x01,从机1(U3)的地址为0x03,从机2(

Android通过JNI实现与C语言的串口通讯操作蓝牙硬件模块

一直想写一份技术文档,但因为自感能力有限而无从下笔,近期做了个关于Android平台下实现与C语言的通讯来操作蓝牙模块的项目,中间碰到了很多问题,也在网上查了很多资料,在完毕主要功能后.也有一些人在网上问我一些问题.这里写下这篇文档算是一个阶段性的总结. 假设反响好.兴许将会发上Android Stub与新版Android HAL的学习文档. 因为蓝牙模块是串口通讯机制.使用C语言来訪问,而Android的应用层採用Java.无法直接操作硬件.故使用JNI的技术实现主要功能.Android的JN

pcommlite串口通讯库使用

MFC下串口编程使用最多的两种方法是读取注册表和使用mscomm组件,都有着或多或少的缺陷,调用系统SDK比较麻烦,而MSCOMm组件最多支持16个串口,串口号大于16的时候无法打开,遇到这种情况,可以使用一个名为pcommlite的串口通讯库,下载安装之后,解压出来的文件包括 根据编译的平台选择相应的lib文件加入工程,并加入pcomm.h文件 寻找系统串口,sio_open()打开串口 sio_close()关闭串口 BYTE i = 0; CString str; // TODO: 在此添

串口通讯方式1编程

在上位机上用串口调试助手发送一个字符X,单片机收到字符后返回给上位机"I get X",串口波特率设为9600bps. #include<reg52.h> #define uchar unsigned char unsigned char flag,a,i; uchar code table[]="I get"; void init() { TMOD=0x20;  //设定T1定时器的工作模式2 TH1=0xfd; //T1定时器装初值 TL1=0xfd

(c#2.0)serialPort串口通讯

原文:(c#2.0)serialPort串口通讯 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Configuration; usi

Python 串口通讯

摘要: pyserial module: https://github.com/tbusf/pyserial Python使用pyserial进行串口通信:http://blog.csdn.net/log1100/article/details/54380325 串口通讯的python模块--pySerial :http://blog.csdn.net/dainiao01/article/details/5885122 Parameters for the Serial class ser =

串口通讯中垃圾数据的处理

在双机串口通讯中,开关机(串口开闭)期间发送方有时候会发一些无效的垃圾数据,同时因为有的协议解析只有接收到一定数量才能解析.这就会出现一个现象:如果开头的数据是错误的,又没有及时丢弃,后面正确的数据接着位置存储,最终造成解析失败.现象就是有时候数据交互正确,有时候错误(冷启动第一次出现错误的几率较大).所以串口通讯中对垃圾数据的防护及解析的顺序方法就显的很重要. if(USART_GetITStatus(UART4,USART_IT_RXNE))    {        USART_ITConf