基于JAVA的单片机上位机通信软件开发实训小结.docx
《基于JAVA的单片机上位机通信软件开发实训小结.docx》由会员分享,可在线阅读,更多相关《基于JAVA的单片机上位机通信软件开发实训小结.docx(12页珍藏版)》请在冰点文库上搜索。
基于JAVA的单片机上位机通信软件开发实训小结
淮安信息职业技术学院
面向对象编程
课程设计
题目:
基于JAVA的单片机
上位机通信软件开发
作者:
周阳洁
指导老师:
潘汉怀杨永
专业:
电子信息工程(物联网)
时间:
二〇一三年一月六日
摘要
随着计算机技术尤其是单片微型机技术的发展,单片机被广泛应用在工业控制系统中。
在分布式控制系统中多采用单片机进行数据采集和现场控制。
由于单片机的计算能力有限,难以进行复杂的数据处理,因此在功能复杂的控制系统中常采上位机下位机系统,单片机用作下位机进行数据采集和设备控制,而PC机用做上位机进行复杂的数据处理和对单片机的控制。
因此如何实现PC机与单片机之间的通信具有重要的现实意义。
本次实训详细介绍了单片机与PC机通信的软硬件实现。
在硬件设计中,单片机系统与PC机系统通过RS-232串行通信端口进行互连,单片机系统将由PC机传输过来的数据信息控制LED显示屏。
在软件设计中,采用JAVA语言设计PC上的串口通信程序。
(现在Java已用于开发大型企业的应用程序、增强WWW服务器的功能,以及为消费类设备提供应用程序。
它是一个跨平台,能够把真个Internet作为一个统一的运行平台。
)
目录
第一章摘要-1-
第二章目录-2-
第三章硬件设计1
3.1显示屏行驱动电路设计2
-3.2显示屏列驱动电路设计2
3.3PC机与AT89S51串口通信电路设计2
第四章软件设计3
4.1LED显示屏程序设计3
4.2PC机程序设计4
第五章系统调试5
第六章心得体会8
第三章硬件设计
本项目采用单片机控制LED显示屏,单片机与PC机通信采用JAVA语言开发,系统的硬件电路设计包含两部分内容:
一是系统扩展,即单片机功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路;二是系统的配置,即按照系统功能要求配置外围设备,如点阵显示器等,要设计合适的接口电路。
硬件电路设计如图3-1所示,硬件电路主要包括ATmega16单片机最小系统、串口通信电路和LED点阵驱动电路,Proteus软件没有驱动电流仿真能力,所以这里仅对设计电路功能仿真验证。
3.1显示屏行驱动电路设计
从单片机输出五个信号分别输入到2个级联的74HC154译码器(4线16),然后输出16位行信号,接单片机PC口,虚拟串口COMPIM。
3.2显示屏列驱动电路设计
从单片机里出来的列信号通过8个8位74HC595级联而成信号输出端连接16*16的点阵LED的输入端。
74HC595是移位寄存器(SHCP第11脚移位寄存器时钟输入;STCP第12脚存储寄存器时钟输入),不仅起到驱动点阵的作用,而且将串行数据转换成8位数据,可以用它的锁存功能实现硬件电路对数据的刷新,实现点阵的动态显示。
在protues里面COMPIM可以调用实际的串口和外部通信。
3.3PC机与AT89S51串口通信电路设计
PC机与89c52串口通信由RS232转换电路、子模块地址标识电路和点阵驱动电路组成。
由于采用单片机的异步串行口进行多机通信进行数据传输,单元模块应该有和其位置相对应的地址标识地址标识电路采用8位并进串出芯片74HC595组成。
LED点阵采用动态扫描法进行驱动,并且实现16阶灰度显示,为了节省单片机程序中扫描程序的时间消耗,提高扫描速度,显示数据采用并行输出的方法。
3-1LED显示屏硬件电路
第四章软件设计
4.1LED显示屏程序设计
Ø明确AT89C51、74HC595、74HC154芯片的作用;
Ø会使用取模软件,本次我们使用(从上到下从左到右纵向上高位)对AT89C51单片机驱动16*16*4点阵;(淮安信息职业技术)
Ø芯片74HC595控制发送代码
voidSendbyte_H(unsignedcharbb,unsignedcharaa)
{unsignedcharj;
for(j=0;j<8;j++){
H_shcp=0;H_ds=aa&0x01;
H_shcp=1;//数据在上升沿输入
aa>>=1;//数据右移一位}
for(j=0;j<8;j++)//循环8次移入数据{
H_shcp=0;H_ds=bb&0x01;
H_shcp=1;//数据在上升沿输入
bb>>=1;//数据右移一位}
H_stcp=0;H_stcp=1;H_ds=1;}
Ø串口中断4接受的代码
voidINT_UartRcv()interrupt4{
Rcv=SBUF-0x30;//用ASCII码转换
RI=0;//清除发送完成标志位
SBUF=Rcv;//发送数据
while(!
TI);//等待发送结束
TI=0;//清发送完成标志位}
Ø主代码
SCON=0x50;//SCON:
serailmode1,8-bitUART,enableucvr
TMOD|=0x20;//TMOD:
timer1,mode2,8-bitreload
PCON|=0x80;//SMOD=1;
TH1=0xFA;//Baud:
9600fosc=11.0592MHz
ES=1;//opentheenableserialTR1=1;//timer1run
EA=1;//opentheenableallinterrupt
while
(1){
for(i=0,r=k;i<16;i++,r++){
H_G_1=1;
HC154_data=i;
for(j=0;j<4;j++){
Sendbyte_H((display[Rcv*4+3-j][2*r]),(display[Rcv*4+3-j][2*r+1]));}
H_G_1=0;
for(t=0;t<130;t++);}
Sendbyte_H(0xff,0xff);for(t=0;t<200;t++);}
4.2PC机程序设计
✧导入了5个包
importjava.awt.*;
importjava.awt.event.*;//设置关闭窗口用的包
importjava.io.*;//提供了全面的I/O接口和类
importjava.util.*;//Enumeration为枚举型类
importm.*;//API协议中没有该包,SUN公司下的串口包
✧S_Frame类
classS_FrameextendsFrameimplementsRunnable,ActionListener
//定义了一个S_Frame类,父类:
Frame(窗体)接口:
Runnable(java.lang为非Thread子类的类提供了激活方式);ActionListener(java.awt.event接收操作事件的侦听器)
{staticCommPortIdentifierportId;//检测系统中可用的通讯端口类
staticEnumerationportList;//java.utilEnumeration为枚举型类
OutputStreamoutputStream;//java.io输出流接受输出字节并将这些字节发送到某个接收器
✧RS-232的串行口的设计
SerialPortserialPort;
ThreadreadThread;//线程是程序中的执行线程。
Java虚拟机允许应用程序并发地运行多个执行线程。
Panelp=newPanel();//对面板类的对象为P的实例化
TextFieldin_message=newTextField("OpenCOM1,9600baudrate,databits8,1stopbits......");//对象是in_message(允许编辑单行文本的文本组件)
//窗口下方显示"打开COM1,波特率9600,数据位8,停止位1......"(构造方法)
TextAreaout_message=newTextArea();
//对象是out_message显示文本的多行区域,可以将它设置为允许编辑或只读。
ButtonbtnOpen=newButton("Opentheserialport,sendingdata");
//java.awt对按钮类的对象为btnOpen的实例化窗口左上方显示"打开串口,发送数据ButtonbtnClose=newButton("Closetheserialport,stopsendingdata");//java.awt对按钮类的对象为btnOpen的实例化窗口左上方显示"关闭串口,停止发送数据"bytedata[]=newbyte[10240];//对位类的对象为data[]的实例化
booleanmark;/*设置判断要是否关闭串口的标志*/
✧如何安排窗体
a.用"super",让子类不隐藏或覆盖父类的成员变量和成员方法;
b.setSize(200,20)如:
setLocation(30,30);setVisible(true);setBackground(Color.lightGray);
Ø点击按扭打开串口mark=true;//用于中止线程的run()方法
Ø关闭窗口
publicvoidwindowClosing(WindowEvente)//用于接收窗口事件的侦听器接口
System.exit(0);//用户试图从窗口的系统菜单中关闭窗口时调用
Ø其他使用的类和方法
循环语句while判断语句if
异常处理try_catch_finally
第五章系统调试
正确安装JavaCommunicationAPI并将上述程序编译通过以后,可以按如下方法测试这个程序。
如果你只有一台机器,你可以利用一条RS-232电缆将COM1和COM2连接起来,在COM1上运行SerialExample,在COM2上运行Windows提供的超级终端程序。
如果你有两台机器的话,你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来,在一端运行例程,另外一端运行Windows提供的超级终端程序。
如果有必要的话,可以对SerialExample中所声明的串口进行相应改动。
本程序在WindowsXP+JavaSDK1.6环境下编译通过并成功运行。
采用计算机仿真调试,运用虚拟串口配对软件VirtualSerialPortsDriver实现COM1和COM2配对,上位机串口设为COM1,单片机串口设为COM2,通过下面步骤调试:
1、下载javaCommunicationsapi开发包。
|
2、将win32com.dll拷贝入C:
\j2sdk1.4.2_04\bin;
3、将comm.jar拷贝入C:
\j2sdk1.4.2_04\jre\lib\ext;
4、将m.properties拷贝入C:
\j2sdk1.4.2_04\jre\lib;
5、编译ReceiveComm.java,SendCom.java文件,运行结果如5-1、5-2所示;
6、打开proteuse软件设计硬件电路图如图3-1所示;
7、配对上位机和单机片串口,通过串口调试程序输入0X00时,LED显示屏显示淮安信息字样;通过串口调试程序输入0X01时,LED显示屏显示职业技术字样。
由于本设计没有编写上位机程序,所以只能串口接收数据采用调用形式显示汉字。
这里仅给出仿真结果如图5-3,图5-4所示。
注意:
由于串口为共享资源,所以在设计程序时应采用单例模式。
图5-1串口输入0时,LED显示屏显示结果
图5-2串口输入1时,LED显示屏显示结果
图5-3采用串口精灵的收发
图5-4ReceiveComm.java运行界面
图5-5采用串口精灵的发与ReceiveComm.java运行结果
第六章心得体会
第一次接触“Java”是在手机里,慢慢才知道它是应用于塞班、安卓系统之上。
本学期我们开设了《面向对象程序设计》,系统的学习JAVA语言。
Java语言是1991年,由美国Sun公司开发,为了解决家用消费电子产品智能化过程中的控制和通讯问题,设计出的一种适合开发跨平台嵌入式软件语言。
它提供了强大的图形、图像、动画、音频、视频、多线程和网络交互功能,这使它特别适合于设计交互式的多媒体网页。
这两周实训:
●在硬件上
A.对单片机AT89C51更进一步学习,它的最小系统、P3.0RXD和P3.1TXD端口;
B.对在数字电路上学习的74HC159译码器和74HC595移位寄存器的应用;
C.新学了虚拟端口COMPIM,在protues里面来实现调用实际的串口和外部通信;
D.对LED显示屏行列扫描熟悉。
●在软件上
A.编写LED显示屏驱动,用Keil的软件采用C语言来编写;
B.用MyEIclipse软件
i.学会I如何设计一个图形界面、对它的优化、窗口的关闭;
ii.发送数据代码编写;
iii.接受数据代码编写;
C.学会使用虚拟配对软件和串口精灵(既可以当上位机,也可以当下位机);
●对Java语言有了进一步掌握:
a)它的每一个程序都至少有一个类,同时每一种类型的程序都要运行在Java虚拟机JVM上;
b)如何对一个对象实例化,怎样使用构造方法;
c)成员的修饰符:
publicprivate缺省protected;
d)类有三大特性:
封装、继承和多态本项目采用“extend”和“super”;
e)异常处理try_catch_finally;
f)学会熟悉使用API协议。
Ø总体上实现主(PC)、从机(AT89C51)上的全双工异步通信功能
通过两周的实训,找出了自身有很多不足之处。
如:
宏定义后不要加“;”,不善于安装包和软件,对一些类和方法不熟悉。
综合能力欠缺,知识点掌握不是很牢,今后在这些方面要加以补充。
当然,我也收获了不少,培养了自己的应用能力和创新能力,对一些专业名称有所了解。
我也知道一个编程师,不断地看代码、修改代码,有一定的耐心,以量得到质变,开发出更好的项目,真心的希望自己能坚持下来!