欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    Java语言的串口通讯.docx

    • 资源ID:30700392       资源大小:187.14KB        全文页数:21页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java语言的串口通讯.docx

    1、Java语言的串口通讯基于Java语言的51单片机串口通讯PC机程序 分类: 论文 2006-04-02 09:48 3166人阅读 评论(0) 收藏 举报 基于Java语言的51单片机串口通讯PC机程序李群林电气与信息工程学院 测试计量技术与仪器,湖南大学,湖南 长沙,410082摘要:由于Java语言的诸多优点,Java得到了广泛的应用,如今利用Java开发串口通讯已相当成熟,实现简单,可移植性强。文章详细介绍了如何配置开发环境以及使用Java串口API函数编写PC机程序。本程序比使用C+语言编写的串口通讯程序更容易理解,且移植性非常强,视图与控制分开,便于维护和升级。关键字:Java,J

    2、Builder,KeilC,Java Communications API,串口通讯,RS232,单片机1 硬件部分(KeilC)图1 硬件电路图串口通讯硬件部分电路,收发器件采用max232,5V供电。J31接一单片机如AT89C52,单片机的串口与max232的10和11脚相连。max232与微机通过9针接头相连。本文的实验环境是AT89C52,单片机的内部程序是用KeilC语言编写的,程序功能非常简单,检测到开始信号后从串口读数据,然后把读入的数据发送给串口,遇到结束符停止。C语言代码如下供大家参考。在uv3中含有两个文件comm.h和comm.c,代码分别为:/*/* comm.h *

    3、/* serial port define, only use in comm project */ /*/#define uchar unsigned char #define uint unsigned int#define length 0x0F /数据包长度uchar CR = 0x0D;uchar LF = 0x0A;uchar ESC = 0x1B;uchar SYNC = 0x01; /数据包启始符uchar PID = 0x00; /数据包标示字uchar ADDR; /串口接收外部命令(片内地址)uchar DATA; /串口返回片内数据uchar ENDP = 0x00;

    4、/数据包结束符uchar ACK = 0x06; /串口确认uchar ERROR = 0x18; /串口错误uchar wrong = Bad command;/*END*/*/*comm.c */* Write time is 2005.4.15,By Gooseli */* Copyright is changsha HUNU unversity */* Cpu is At89C51,Fclk is 11.059MHz */* Compiler is keilC51 compiler */*/#include#include#include#includevoid commInit()/

    5、*/ 8051串口初始化 /*/ SCON = 0x52; PCON = 0x80; TMOD = 0x21; TH1 = 0x0FA; TL1 = 0x0FA; TCON = 0x40;/*/ 串口控制器工作于方式1,8位,频率可变。接收允许 / 串口波特率系数SMOD = 1 / 定时器1工作于方式1,8位自动装载。定时器0方式1,16位 / 11.059M晶振,波特率 = 9600,TH1 = 0x0FA; / 19200 0x0FD / 57600 0x0FF / 3.6864M晶振 9600 0x0FE / 19200 0x0FF / #3.6864M晶振工作于方式2 / #在SMO

    6、D = 1时,波特率 = 115200 / 开中断TR1 = 1 /*/ uchar flag;uchar readln();void println( uchar *str );main() commInit(); /初始化串口 while(1) flag = readln(); uchar readln() uchar a; uchar strlength; int i; scanf(%c,&a); /寻找起始符,回车则开始 if( a=SYNC | a=LF ) while(1) printf(/n); /printf(); scanf(%c,&a); if( a=ENDP | a =

    7、ESC ) /如果ESC则对话结束 break; for( i=0; i,wrong); return ERROR; /*END*/2 配置运行环境(JDK)Java通讯库函数Java Communications API,Java开发工具JBuilderX。此Java(TM) Communications API Specification 2.0(Windows Platform)是Sun公司为Windows平台提供的一个串口API扩展,可以到 下载。Sun公司还提供了其他操作系统下的API下载,移植性是Java先天的优势,如果需要在其他操作系统运行程序,不需要改动程序本身,只要在操作系统

    8、下植入相应的API库函数即可实现。JBuilder是Borland公司出品的一款功能强大的可视化Java集成开发工具,可以快速开发包括复杂企业级应用系统的各种Java程序,本文的程序都用其实现。当然我们以可使用其他优秀的开发工具,例如开放源代码的Eclipse,功能强大,插件丰富。在下载Java Communications API压缩文件里找到三个文件:comm.jar,win32comm.dll,m.properties,这三个文件是把API安装到Windows环境中的重要文件,我们把他们放在我们的JDK里面。把comm.jar复制到%JAVA_HOME%/jre/lib/ext,m.pr

    9、operties复制到%JAVA_HOME%/jre/lib,win32comm.dll复制到%JAVA_HOME%/bin即可。这样我们的程序就可以在Windows环境中运行了,Java Communications API压缩文件中自带有例子,我们可以尝试一下。接下来我们要把Java Communications API安装到JBuilder里面,如果JBuilder不是使用的外部的JDK,照上面的的步骤再做一次。假如我们外部的JDK和JBuilder的JDK是同一的JDK,我们就直接跳到下一步。1)打开JBuilder,为我们的任务建立一个工程,给它起个有意义的名字,不多讲了。JBuil

    10、der会自动生成两个文件,如,工程名为comm,就会生成文件commApplication和commFrame。2)选择Tools菜单,选择Configure Libraries,如图1所示。3)点击New按钮,为JBuilder增加一个函数库。如图2,点击OK即可。4)下一步为你的工程增加这个库函数,以便你在工程里调用它们。选择Project菜单中的Project Properities选项,左侧选中Paths,右侧选中Required Libraries,单击Add,出现一个小的对话框,选择我们刚才增加的comm函数库,如图3,点击OK两次即可。现在环境已经配置好了,我们要开始正式工作了。

    11、图2 Configure Library图2 New Librariy Wizard图3 Select comm. Library3 程序开发(JBuilderX)1 与51单片机交互信息,数据库存取(Data)为了保证数据传输的顺利进行,单片机与PC之间通讯要建立一个协议,在本实例中,采用如下协议:程序打开串口后,程序发送“启始”符(0x01)表示通讯开始。通讯开始后,程序就开始发送和接收数据包,数据包以“结束”符(0x00,0x0D, 0x0A)表示结尾。由于单片机受控于PC机,所以单片机一般不主动发送数据,只有在PC机发送一个“命令”,它才会发送一个“回应”。如果程序“停止”符(0x00

    12、),则通讯结束。2 界面设计(View)这部分设计主程序的视图,即使用者看到的部分,包括按钮,下拉菜单,文字编辑框等。为了程序的可读性,我们将所有的视图从主程序中分离出来,作成Bean的形式,然后在主程序中调用它们。Java提供了五种布局管理形式FlowLayout,,GridLayout, GridBagLayout, BorderLayout,,CardLayout。灵活的运用这些布局,可以达到各种各样的效果,其中GridBagLayout功能强大,使用灵活,本文主要采用这种布局。3 主程序设计(Control)这部分设计程序的实现方法,逻辑步骤。1)首先定义串口,输入输出流等,如下所示:

    13、package comm;import java.awt.*;import java.awt.event.*;import javax.swing.*;import m.*;/包含comm类包,才能使用其API函数 import java.io.*;import java.util.*;public class CommFrame extends JFrame implements Runnable, SerialPortEventListener JPanel contentPane; /定义一个JPanel,将视图Bean包含进来 BorderLayout borderLayout1 =

    14、new BorderLayout(); IOBean ioBean = new IOBean();/右侧视图Bean类事例化 ControlBean controlBean = new ControlBean();/左侧视图Bean类事例化 /Communination define static CommPortIdentifier portName;/定义串口 int portId; static Enumeration portList; InputStream inputStream;/定义输入流 OutputStream outputStream;/定义输出流 SerialPort

    15、serialPort; Thread readThread;/定义一个线程,程序全双工通讯 static String TimeStamp; /Construct the frame public CommFrame() enableEvents(AWTEvent.WINDOW_EVENT_MASK); try jbInit();/程序初始化 commInit();/串口初始化 catch(Exception e) e.printStackTrace(); private void jbInit() throws Exception public void commInit() public

    16、void commClose() public void commWrite() public void CommRead() public void run() public void serialEvent(SerialPortEvent event) ./代码如下/Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) super.processWindowEvent(e); if (e.getID() = WindowEvent.WINDOW_CLO

    17、SING) commClose(); System.exit(0); 2)串口初始化,首先监测串口是否被占用,如果没有被占用则打开串口。打开输入输出流以便下面的程序从串口读写数据,定义串口的波特率,位数,停止位,奇偶校验,在使用过程中可以改变这些内容以适应不同的需求。public void commInit() /Communination ports owned or not portId = 1; try portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements() portNam

    18、e = (CommPortIdentifier) portList.nextElement(); if (portName.getPortType() = CommPortIdentifier.PORT_SERIAL) if (portName.isCurrentlyOwned() /串口是否被占用 ioBean.Receiver.append(/nCOM+portId+Ownedby+ portName.getCurrentOwner(); TimeStamp = new java.util.Date().toString(); portId +; else if (portName.get

    19、Name().equals(COM + portId) break; /Communination ports init try serialPort = (SerialPort) portName.open(Gooseli_MCU_Control_App, 2000);/打开串口 controlBean.CommPortID.setText(COM + portId); controlBean.OnOff.setText(ON);/开关按钮置开状态 controlBean.OnOff.setSelected(true); TimeStamp = new java.util.Date().to

    20、String(); System.out.println(TimeStamp + : msg2 - SerialPort COM + portId + is opend); ioBean.Receiver.append(/nCOM + portId + is opend);/显示区域显示串口被打开 catch (PortInUseException e) System.out.println(e); ioBean.Receiver.append(/nCOM + portId + + e); try inputStream = serialPort.getInputStream();/打开输入流

    21、 catch (IOException e) try outputStream = serialPort.getOutputStream(); outputStream.write(byte)0x01);/向串口写入启始符开始传送数据包 ioBean.Receiver.setText(/nCOM + portId + + Start); controlBean.begin.setSelected(true); catch (IOException e) try serialPort.setSerialPortParams(9600,/波特率 SerialPort.DATABITS_8,/数据位

    22、 SerialPort.STOPBITS_1,/停止位 SerialPort.PARITY_NONE);/校验位 catch (UnsupportedCommOperationException e) CommRead();/程序开始从串口读数据 catch(Exception e) public void commClose() try inputStream.close(); outputStream.close(); serialPort.close(); System.out.println(TimeStamp + : msg2 - SerialPort COM + portId +

    23、is closing); ioBean.Receiver.append(/nCOM + portId + is closing); catch (Exception e) System.out.println(e); 3)程序初始化,这里定义了一些事件,以便控制程序的运行。例如开始按钮的事件定义如下:private void jbInit() throws Exception contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(borderLayout1); this.setSize(new Dimension

    24、(400, 300); this.setTitle(Serial Ports Communication Current); contentPane.add(ioBean,BorderLayout.CENTER); contentPane.add(controlBean, BorderLayout.WEST); controlBean.OnOff.addActionListener( new ActionListener() public void actionPerformed(ActionEvent ae) JToggleButton toggle = (JToggleButton) ae

    25、.getSource(); if (toggle.isSelected() controlBean.OnOff.setText(ON); commInit(); else controlBean.OnOff.setText(OFF); commClose(); );controlBean.begin.addActionListener( new ActionListener() public void actionPerformed(ActionEvent ae) JToggleButton toggle = (JToggleButton) ae.getSource(); if (toggle

    26、.isSelected() /如果按钮被按下,则开始 controlBean.begin.setText(Start); try outputStream.write(byte)0x01);/发送起始符 ioBean.Receiver.setText(/nCOM + portId + + Start); catch (IOException e) else /如果按纽复位 controlBean.begin.setText(Stop); try outputStream.write(byte)0x00);/发送结束符 ioBean.Receiver.append(/nCOM + portId

    27、+ + Stop); catch (IOException e) ); ioBean.jButton2.addActionListener( new ActionListener() public void actionPerformed(ActionEvent ae) commWrite(); ); 4)读写串口,使用多线程,实现全双工通讯。主函数CommFrame实现了Runnable接口,在程序中只需要重写run函数即可实现多线程。public void commWrite() String outString = ioBean.jTextField1.getText(); if (outString.e


    注意事项

    本文(Java语言的串口通讯.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开