基于Java语言的51单片机串口通讯PC机程序
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.
Java语言51单片机串口通讯PC机程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)