微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Java语言的51单片机串口通讯PC机程序

基于Java语言的51单片机串口通讯PC机程序

时间:11-20 来源:互联网 点击:

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().toString();

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();//打开输入流

} 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,//数据位

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 + " 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(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.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.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 + " " + "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.equals("clear")) {

ioBean.Receiver.setText("\nCOM" + portId +" Receive:");

}

ioBean.jTextField1.setText("Gooseli:");

try {

//outputStream.write((byte)0x01);

outputStream.write(outString.getBytes());

outputStream.write((byte)0x0D);

//outputStream.write((byte)0x00);

ioBean.Receiver.setText("\nCOM" + portId + ">>" + outString);

} catch (IOException e) {}

}

public void CommRead() {

try {

serialPort.addEventListener(this);

} catch (TooManyListenersException e) {}

serialPort.notifyOnDataAvailable(true);

readThread = new Thread(this);

readThread.start();

}

public void run() {

try {

Thread.sleep(20000);

}

catch (InterruptedException e) {}

}

public void serialEvent(SerialPortEvent event) {

switch(event.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top