基于Java语言的51单片机串口通讯PC机程序
可。
4)下一步为你的工程增加这个库函数,以便你在工程里调用它们。选择Project菜单中的Project Properities选项,左侧选中Paths,右侧选中Required Libraries,单击Add,出现一个小的对话框,选择我们刚才增加的comm函数库,如图3,点击OK两次即可。
现在环境已经配置好了,我们要开始正式工作了。
图2 Configure Library
图2 New Librariy Wizard
图3 Select comm. Library
3程序开发(JBuilderX)
1.与51单片机交互信息,数据库存取(Data)
为了保证数据传输的顺利进行,单片机与PC之间通讯要建立一个协议,在本实例中,采用如下协议:
程序打开串口后,程序发送“启始”符(0x01)表示通讯开始。
通讯开始后,程序就开始发送和接收数据包,数据包以“结束”符(0x00,0x0D, 0x0A)表示结尾。由于单片机受控于PC机,所以单片机一般不主动发送数据,只有在PC机发送一个“命令”,它才会发送一个“回应”。
如果程序“停止”符(0x00),则通讯结束。
2.界面设计(View)
这部分设计主程序的视图,即使用者看到的部分,包括按钮,下拉菜单,文字编辑框等。
为了程序的可读性,我们将所有的视图从主程序中分离出来,作成Bean的形式,然后在主程序中调用它们。Java提供了五种布局管理形式FlowLayout,,GridLayout,GridBagLayout,BorderLayout,,CardLayout。灵活的运用这些布局,可以达到各种各样的效果,其中GridBagLayout功能强大,使用灵活,本文主要采用这种布局。
3.主程序设计(Control)
这部分设计程序的实现方法,逻辑步骤。
1)首先定义串口,输入输出流等,如下所示:
package comm;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.comm.*;//包含comm类包,才能使用其API函数
import java.io.*;
import java.util.*;
public class CommFrame extends JFrame implements Runnable, SerialPortEventListener {
JPanel contentPane; //定义一个JPanel,将视图Bean包含进来
BorderLayout borderLayout1 = 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 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 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_CLOSING) {
commClose();
System.exit(0);
}
}
}
2)串口初始化,首先监测串口是否被占用,如果没有被占用则打开串口。打开输入输出流以便下面的程序从串口读写数据,定义串口的波特率,位数,停止位,奇偶校验,在使用过程中可以改变这些内容以适应不同的需求。
public void commInit() {
//Communination ports owned or not
portId = 1;
try{
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portName = (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.getName().equals("COM" + portId)) {
break;
}
}
}
//Communination ports init
try {
serialPort = (SerialPort) portName.open("Gooseli_MCU_Control_App", 20
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)