Java软件与单片机串口通信

2019-04-15 17:32发布


    从菜鸟级的电子爱好者到骨灰级的电子工程师,相信大多数人都经历过制作万年历,毕竟它比较全面的考察对单片机基础知识的掌握,并且体现了C语言编程模块化的思想。       而本文旨在介绍在完成制作万年历后实现软件通过RS-232串口对万年历进行控制。软件的编写采用的Java语言,当然,使用C++、VB等语言也可以编写出与单片机串口通信的软件,使用VB的MSCOMM控件可以更方便的实现串口通信。       Java软件方面     需要用到Comm包,下载地址和使用方法请自行Google一下。     部分代码: 1.找出电脑上的串口     static EnumerationportList=CommPortIdentifier.getPortIdentifiers();    while (portList.hasMoreElements()){ //用循环结构找出串口
  portId=(CommPortIdentifier)portList.nextElement(); //强制转换为通讯端口类型
  if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
        System.out.println(portId.getName()); 2.打开串口  SerialPort serialPort;//RS-232串口  try {
  serialPort = (SerialPort) portId.open("ReadComm", 2000);//超时等待
  }
  catch (PortInUseException e) { } 3.设置串口通讯参数
  try {
  serialPort.setSerialPortParams(9600,
  SerialPort.DATABITS_8,
  SerialPort.STOPBITS_1,
  SerialPort.PARITY_NONE);
  }
  catch (UnsupportedCommOperationException e) { }     单片机方面 1.1602液晶时序图 2.protues仿真图(附Java软件效果图)   3.C51部分代码 void write_com(uchar com)//写指令
{
 rs=0;
 lcden=0;
 P0=com;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0; 
} void write_date(uchar date)//写数据
{
 rs=1;
 lcden=0;
 P0=date;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0; 
}
void init()
{
 uchar num;
 lcden=0;
 write_com(0x38);//初始化
 write_com(0x0c);//不显示光标
 write_com(0x06);//指针自加一,整屏显示不移动
 write_com(0x01);//清屏
 write_com(0x80);//设置光标指针(第一行)
 for(num=0;num<15;num++)
  {
   write_date(table[num]);
   delay(5);
  }
 write_com(0x80+0x40);//设置光标指针(第2行)
 for(num=0;num<12;num++)
  {
   write_date(table1[num]);
   delay(5);
  }
 TMOD=0x21; // 定时器0的方式1,定时器1的方式2
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1; //开总中断
 ET0=1;
 TR0=1;
 TH1=0xfd;//波特率9600
 TL1=0xfd;
 TR1=1;
}
void initser()
{
 SM0=0;
 SM1=1;//串口中断方式1  ES=1;
 REN=1; 
} 4.标准字符库
     软件控制单片机 点击软件相应的三个按钮(add、Shift、minus)发送对应的byte数据(0、1、2),单片机接收到byte数据后执行相应的命令(加数、切换、减数)。or