`
eneve520
  • 浏览: 56648 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

串口通信

    博客分类:
  • J2SE
阅读更多

做过类似的串口通信,代码供参考
SENT

Java code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->package GPS; /****************************************** * 程序文件名称:SendComm.java * 功能:从串行口COM1中发送数据 ******************************************/ import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.comm.*; //可以使用开源的RXTX class S_Frame extends Frame implements Runnable,ActionListener { /*检测系统中可用的通讯端口类 */ static CommPortIdentifier portId; /*Enumeration 为枚举型类,在util中 */ static Enumeration portList; OutputStream outputStream; /*RS-232的串行口 */ SerialPort serialPort; Thread readThread; Panel p=new Panel(); TextField in_message=new TextField("打开COM1,波特率9600,数据位8,停止位1."); TextArea out_message=new TextArea(); Button btnOpen=new Button("打开串口, 发送数据"); Button btnClose=new Button("关闭串口, 停止发送数据"); byte data[]=new byte[10240]; /*设置判断要是否关闭串口的标志*/ boolean mark; /*安排窗体*/ S_Frame() { super("串口发送数据"); setSize(200,200); setVisible(true); add(out_message,"Center"); add(p,"North"); p.add(btnOpen); p.add(btnClose); add(in_message,"South"); btnOpen.addActionListener(this); btnClose.addActionListener(this); } //R_Frame() end /*点击按扭打开串口.*/ public void actionPerformed(ActionEvent event) { if (event.getSource()==btnClose){ serialPort.close(); //关闭串口 mark=true; //用于中止线程的run()方法 in_message.setText("串口COM1已经关闭,停止发送数据."); } else { mark=false; /*从文本区按字节读取数据*/ data=out_message.getText().getBytes(); /*打开串口*/ start(); in_message.setText("串口COM1已经打开,正在每2秒钟发送一次数据....."); } } //actionPerformed() end /*打开串口,并调用线程发送数据*/ public void start(){ /*获取系统中所有的通讯端口 */ portList=CommPortIdentifier.getPortIdentifiers(); /* 用循环结构找出串口 */ while (portList.hasMoreElements()){ /*强制转换为通讯端口类型*/ portId=(CommPortIdentifier)portList.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){ if (portId.getName().equals("COM2")) { /*打开串口 */ try { serialPort = (SerialPort) portId.open("ReadComm", 2000); } catch (PortInUseException e) { } /*设置串口输出流*/ try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} } //if end } //if end } //while end /*调用线程发送数据*/ try{ readThread = new Thread(this); //线程负责每发送一次数据,休眠2秒钟 readThread.start(); } catch (Exception e) { } } //start() end /*发送数据,休眠2秒钟后重发*/ public void run() { /*设置串口通讯参数*/ try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { } /*发送数据流(将数组data[]中的数据发送出去)*/ try { outputStream.write(data); } catch (IOException e) { } /*发送数据后休眠2秒钟,然后再重发*/ try { Thread.sleep(2000); if (mark) {return; //结束run方法,导致线程死亡 } start(); } catch (InterruptedException e) { } } //run() end } //类S_Frame end public class sentData {public static void main(String args[]) { S_Frame S_win=new S_Frame(); S_win.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0); } }); S_win.pack(); } }


GET

Java code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->package GPS; /****************************************** * 程序文件名称:ReadComm.java * 功能:从串行口COM1中接收数据 ******************************************/ import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.comm.*; class R_Frame extends Frame implements Runnable,ActionListener,SerialPortEventListener { /* 检测系统中可用的通讯端口类 */ static CommPortIdentifier portId; /* Enumeration 为枚举型类,在java.util中 */ static Enumeration portList; InputStream inputStream; /* 声明RS-232串行端口的成员变量 */ ////////////////////////////////// ////////////////////////////////// SerialPort serialPort; Thread readThread; String str=""; TextField out_message=new TextField("上面文本框显示接收到的数据"); TextArea in_message=new TextArea(); Button btnOpen=new Button("打开串口"); /*建立窗体*/ R_Frame() { super("串口接收数据"); setSize(200,200); setVisible(true); btnOpen.addActionListener(this); add(out_message,"South"); add(in_message,"Center"); add(btnOpen,"North"); } //R_Frame() end /*点击按扭所触发的事件:打开串口,并监听串口. */ public void actionPerformed(ActionEvent event) { /*获取系统中所有的通讯端口 */ portList=CommPortIdentifier.getPortIdentifiers(); /* 用循环结构找出串口 */ //////////////////////////////////////////////////// /////////////////////////////////////////////////////// System.out.print("正在搜索端口....."); while (portList.hasMoreElements()){ /*强制转换为通讯端口类型*/ portId=(CommPortIdentifier)portList.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){ if (portId.getName().equals("COM2")) { try { System.out.print("\n找到端口"); serialPort = (SerialPort) portId.open("ReadComm", 20); out_message.setText("已打开端口COM1 ,正在接收数据..... "); } catch (PortInUseException e) {System.out.print("\n无法找到"); } /*设置串口监听器*/ try { serialPort.addEventListener(this); } catch (TooManyListenersException e) { System.out.println("!!!!!");} /* 侦听到串口有数据,触发串口事件*/ serialPort.notifyOnDataAvailable(true); } //if end } //if end } //while end readThread = new Thread(this); readThread.start(); //线程负责每接收一次数据休眠20秒钟 } //actionPerformed() end /*接收数据后休眠20秒钟*/ public void run() { try { Thread.sleep(200); } catch (InterruptedException e) { } } //run() end /*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/ public void serialEvent(SerialPortEvent event) { /*设置串口通讯参数:波特率、数据位、停止位、奇偶校验*/ try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) {} byte[] readBuffer = new byte[20]; try { inputStream = serialPort.getInputStream(); } catch (IOException e) {} try { /* 从线路上读取数据流 */ while (inputStream.available() > 0) { int numBytes = inputStream.read(readBuffer); } //while end str=new String(readBuffer); /*接收到的数据存放到文本区中*/ in_message.append(str+"\n"); } catch (IOException e) { } } //serialEvent() end } //类R_Frame end public class getData { public static void main(String args[]) { ////////////////////////// Enumeration en = CommPortIdentifier.getPortIdentifiers(); CommPortIdentifier portId1; while (en.hasMoreElements()) { portId1 = (CommPortIdentifier) en.nextElement(); /*如果端口类型是串口,则打印出其端口信息*/ if (portId1.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println(portId1.getName()); } } /////////////////////////// /* 实例化接收串口数据的窗体类 */ R_Frame R_win=new R_Frame(); /* 定义窗体适配器的关闭按钮功能 */ R_win.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0); } }); R_win.pack(); } }
分享到:
评论

相关推荐

    实验15:串口通信,串口通讯实验报告,C,C++

    总的来说,这个实验旨在帮助你理解51单片机的串口通信机制,掌握基本的串行通信编程技巧,并能应用到实际项目中去。通过这个实验,你将不仅了解串口通信的基本原理,还能增强你的动手能力和问题解决能力。

    M218串口通讯范例_串口_tm218串口通信_施耐德M218PLC程序_

    串口通信,又称为串行通信,是通过一条数据线依次发送和接收数据的通讯方式。在M218中,串口通信通常使用RS-232、RS-485或RS-422标准,这些标准定义了电压等级、数据速率和接口引脚配置。在TM218串口通信中,我们...

    串口通讯C#源码工程含虚拟串口和串口通信工具

    串口通讯,也称为串行通信,是指数据逐位按顺序进行传输的方式。通常,串口使用RS-232、RS-485或USB等接口标准,常见的应用包括连接打印机、GPS接收器、Modem等硬件设备。在C#中,System.IO.Ports命名空间提供了...

    串口通信.rar_QNX 串口_QNX下的串口通信_qnx_串口通讯_串行通信

    QNX下的串口通信,在实际的机器上测试了一下,发现可以连续的发送数据。

    android串口通讯demo

    RS232是串行通信接口标准,常用于设备间的通信,例如连接摄像头。在这个Demo中,Android设备通过RS232接口向摄像头发送指令,控制其拍摄、预览等功能。这通常涉及到串口的配置参数,如波特率、数据位、停止位和校验...

    VB串口通信UART程序实例源码合集学习资料(200个).zip

    VB串行通信试验程序.rar VB使用mscom控件实现PC机与单片机串口通信.rar VB写的串口通信分析程序源码.rar VB写的串口通信,发送和接收实例.rar VB写的串口通讯,通过串口对单片机进行控制.rar VB写的串口通讯软件,...

    两个单片机之间实现串口通信c语言开发

    串口通信,也称为串行通信,是一种数据传输方式,它将数据一位一位地顺序传输,通常包括发送和接收两部分。相比于并行通信,串口通信需要的硬件资源较少,但传输速度相对较慢。在单片机应用中,常见的串口标准有UART...

    C#串口介绍以及简单串口通信程序设计和实现

     串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:  工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口...

    C++串口通信的例子(实现串口通信的类)

    串口通信,也称为串行通信,是数据逐位按顺序进行传输的一种通信方式。与并行通信相比,串口通信只需要较少的信号线,因此成本较低,但传输速度相对较慢。常见的串口标准有RS-232、RS-485和USB串口等。 在C++中实现...

    VB串口通信源码210个

    056、VB串行通信试验程序 057、VB的MODEM通信源代码,智能化水电远端数据读取系统 058、VB的串口源程序,包括串口的配置界面,接收功能和发送功能 059、VB访问串口,并读取电子秤上显示的数据 060、VB和西门子S7-300 ...

    微机原理实验 PC机串行通讯(8250)

    微机原理实验中的PC机串行通讯是计算机科学和技术领域中的一个重要实践环节,它涉及到串行通信的基本原理、接口芯片8250的工作机制以及PC机串行口的连接方法。这个实验旨在加深对这些知识的理解,并通过实际操作提升...

    asp.net 网页串口通讯(ActiveX)

    ASP.NET 网页串口通讯(ActiveX)是一种在Web应用中实现串行通信的技术。串口通讯,也称为串行接口通信,是计算机硬件之间传输数据的一种常见方式,通常用于连接各种设备,如打印机、扫描仪或GSM模块等。在ASP.NET中...

    C#串口通讯和socket通讯demo

    串口通讯,也称为串行通信,是计算机硬件之间通过串行数据线进行信息传输的方式。在C#中,`System.IO.Ports`命名空间提供了`SerialPort`类,用于处理串口操作。这个类提供了一系列的方法和属性,如`Open()`用于打开...

    山特UPS串口通讯协议

    山特UPS串口通讯协议 山特UPS串口通讯协议是山特公司出品的单进单出UPS串口通讯协议,用于实现集中监控管理。该协议规定了电源设备产品在设计、制造中应遵循的通讯协议,适用于厦门科华电子有限公司(集团企业)...

    基于51单片机的串口通信(12864,汉字)proteus、原理图、流程图、物料清单、仿真图、源代码

    基于51单片机的串口通信...1、甲乙单片机采用奇偶校验,进行方式3串行通信; 2、甲机将“电子科学”显示码依次发送给PC机,乙机将接收的数据用LCD显示出来; 3、甲乙机采用RS232串口通讯协议,利用MAX232芯片实现通信。

    VB串行通讯源码及串口通讯解说

    串口通讯,全称为串行通信接口,是计算机间或计算机与其他设备之间进行数据传输的一种方式。在VB中,串口通讯通常通过Microsoft的MSComm控件来实现。MSComm控件提供了一套完整的事件和属性,可以方便地进行串口设置...

    串口通信,Android端与电脑端串口通信Demo

    串口通信,全称为串行通信,是一种古老但依然广泛应用的数据传输方式,尤其在嵌入式系统和设备间通信中占据重要地位。Android系统作为移动设备操作系统,有时也需要与外部设备,如电脑或其他硬件模块,进行串口通信...

    完整串口通信程序(发送和接受)源代码.zip_串口发送_串口通信_串口通信代码_串口通讯_通信接受程序

    串口通信,也称为串行通信,是指数据以串行方式一位一位地传输。与并行通信相比,串行通信所需的硬件资源较少,但传输速度相对较慢。在个人计算机上,串口通常指的是RS-232接口,它定义了数据线、控制线以及相应的...

    VBA下基于MSCOMM串口通讯实例.rar

    这是Microsoft提供的一种组件,专门用于实现串行通信。在VBA中,我们可以将这个控件拖放到用户界面,然后通过其属性和事件来配置和管理串口。主要的属性包括: 1. CommPort:设置串口号,如COM1、COM2等。 2. ...

    使用VB.net编程实现串口通讯

    2. **串口通信基础**:串口通信,也称为串行通信,是指数据以位(bit)为单位,逐位进行发送和接收。常见的串口包括COM1、COM2等,通过串口参数(如波特率、数据位、停止位、校验位)设置实现不同设备间的数据交换。...

Global site tag (gtag.js) - Google Analytics