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
原创粉丝点击