从菜鸟级的电子爱好者到骨灰级的电子工程师,相信大多数人都经历过制作万年历,毕竟它比较全面的考察对单片机基础知识的掌握,并且体现了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