java 串口通信
来源:互联网 发布:mac蓝牙在哪 编辑:程序博客网 时间:2024/05/16 00:58
/** *//******************************************* 程序文件名称:SendComm.java* 功能:从串行口COM1中发送数据******************************************/import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.comm.*; 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("COM1")) ...{ /**//*打开串口 */ 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 endpublic class SendComm...{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(); }}
/** *//******************************************* 程序文件名称: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(); /**//* 用循环结构找出串口 */ while (portList.hasMoreElements())...{ /**//*强制转换为通讯端口类型*/ portId=(CommPortIdentifier)portList.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL)...{ if (portId.getName().equals("COM1")) ...{ try ...{serialPort = (SerialPort) portId.open("ReadComm", 2000); out_message.setText("已打开端口COM1 ,正在接收数据..... "); } catch (PortInUseException e) ...{ } /**//*设置串口监听器*/ try ...{serialPort.addEventListener(this);} catch (TooManyListenersException e) ...{ } /**//* 侦听到串口有数据,触发串口事件*/ 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(20000); } 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+" "); } catch (IOException e) ...{ } } //serialEvent() end} //类R_Frame endpublic class ReadComm...{public static void main(String args[]) ...{ /**//* 实例化接收串口数据的窗体类 */ R_Frame R_win=new R_Frame();/**//* 定义窗体适配器的关闭按钮功能 */ R_win.addWindowListener(new WindowAdapter() ...{public void windowClosing(WindowEvent e) ...{System.exit(0); } }); R_win.pack(); }}
http://blog.csdn.net/djsl6071/article/details/1594204
- java 串口通信技术
- java串口通信
- Java串口通信详解
- Java串口通信-01
- Java串口通信-2
- java串口通信
- Java串口通信详解
- Java串口通信详解
- Java串口通信详解
- Java串口通信详解
- java 串口通信
- Java串口通信详解
- Java串口通信详解
- Java串口通信详解
- java串口通信
- Java串口通信详解
- JAVA串口通信
- java 串口通信
- 在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
- 日志文件不停增长的原因以及解决的相关方法
- ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
- 缺省参数的值是在编译的时候 确定
- 关于数据库You can't perform any operations on this connection的错误
- java 串口通信
- SQL服务器名称的更改
- iphone EAGL 代表什么
- MRF HMM CRF简笔
- USB口是串口的一种
- android 动画总结
- JS不支持重载
- 软工总结(三)——需求分析
- jquery easyui 布局