本文用网页控制单片机的实例,实现了软件和硬件之间的沟通。
一、开发技术
硬件:430单片机;
软件:jsp,servlet。
二、开发思路
我们在430单片机上写上我们的程序,把单片机连接到串口上,能够通过串口精灵来控制430单片机。然后我们在servlet中开发Java控制串口的程序,该servlet相当于前面的串口精灵。通过点击网页上的不同数字,传递到单片机上,通过不同的数字来控制单片机实现不同的效果。
三、程序如下
430单片机程序
#include "msp430x14x.h"
int a=10;
unsigned char j=0x01,j2=0x00;
unsigned char j1=0X80,K1=0X01;
void delay(int i)
{
while(i--)
{
for(int j=0;j<125;j++);
}
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
P2DIR=0xff; //把p2设为输出。
P2OUT=0xff; //把p2设为高电平
P3SEL|=0x30;
P6DIR=0xff;
P6OUT=0xff;
ME1|=UTXE0+URXE0;
UCTL0|=CHAR;
UTCTL0|=SSEL0;
UBR00=0x0D;
UBR10=0x00;
UMCTL0=0x6B;
UCTL0&=~SWRST;
IE1|=URXIE0;
_EINT();
while(1)
{
if(a=='0') //实现流水灯。
{
P2OUT=~j;
j=j<<1;
if(j==0X00)
j=0x01;
for(int i=0;i<10000;i++)
for(int k=0;k<3;k++);
}
if(a=='1') //实现碰撞灯
{
j1=j1>>1;
K1=K1<<1;
if(j1==0x01)
j1=0x80;
if(K1==0x80)
K1=0x01;
P2OUT=~(j1|K1);
for(int i=0;i<10000;i++)
for(int k=0;k<2;k++);
}
if(a=='2') //实现闪光灯
{
j2^=0XFF;
P2OUT=j2;
for(int i=0;i<10000;i++)
for(int k=0;k<2;k++);
}
if(a=='3') //实现蜂鸣器
{
P6OUT^=0xff;
for(int i=0;i<10000;i++)
for(int k=0;k<2;k++);
}
}
}
#pragma vector = UART0RX_VECTOR //中断服务子程序
__interrupt void shen(void)
{
P6OUT=0xff;
a=RXBUF0;
while(!(IFG1&UTXIFG0));
TXBUF0 = a;
}
Servlet程序
package filst;
import java.io.* ;
import java.util.*;
import gnu.io.*;
public class Put{
InputStream inputStream;
OutputStream outputStream;
SerialPort serialPort;
CommPortIdentifier portId;
int x0=0,x1=0,x2=0,x3=0;
public void put(String name,int x0,int x1,int x2,int x3) { //参数分别表示:串口号,波特率,数据位,停止位,校验位
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
CommPortIdentifier temp = (CommPortIdentifier) portList.nextElement();
if (temp.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判断如果端口类型是串口
if (temp.getName().equals(name)) { // 判断如果端口已经启动就连接
portId = temp;
}
}
}
try {
serialPort = (SerialPort) portId.open(name, 2000);
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
serialPort.setSerialPortParams(x0,x1,x2,x3);
} catch (Exception e) {}
}
public void send(String content){ // 发送的内容。
try {
outputStream.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
public void ClosePort() { //关闭串口。
if (serialPort != null) {
serialPort.close();
}
}
}
jsp程序
<%@ page language="java" contentType="text/html;charset=gb2312"%>
接受内容的JSP页面
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%
student.put("COM3",9600,7,1,2);
student.send(request.getParameter("sh"));
student.ClosePort();
%>