java串口程序---------------------------------------------------站等高手答疑解惑!!!

weixin_38053534 2013-04-15 09:52:59
各位高手好,小弟初次接触串口,是一头雾水不知如何下手,在网上找了一些示例,但也还是云里雾里的。 小弟本次要实现在本地通过串口向对应的LED屏发送实时信息,但是不知道该怎么具体实现?很是苦恼,所以在本地想测试一下网上现成的示例,了解一下串口程序是如何发送信息的过程,但不知如何搭建测试环境,求各位高手指点解惑,感激之情无以言表!谢谢! 如下是网上现成示例: 发送程序 /****************************************** * 程序文件名称: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("Open打开串口, 发送数据"); Button btnClose = new Button("Close关闭串口, 停止发送数据"); 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("COM3")) { /* 打开串口 */ try { serialPort = (SerialPort) portId.open("ReadComm", 2000); } catch (PortInUseException e) { e.printStackTrace(); } /* 设置串口输出流 */ try { outputStream = serialPort.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } } // 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 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("Open Serial打开串口"); /* 建立窗体 */ 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+"\n"); }catch (IOException e) { } } //serialEvent() end } // 类R_Frame end public 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(); } } 以上就是现成的类实现,不知道我在本地要怎么要才能与另外一个测试电脑来测试这个程序,求高手不吝赐教。 在线等高手赐教,急呀!!!
...全文
6 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧