交通灯


交通灯管理系统模拟十字路口逻辑。需求1.路线分析。S-->NS-->WS-->E···2.忽略黄灯,只考虑红绿灯。3.右转车辆不受控。4.南北向与东西向车辆交替放行,同向先直后转。5.车辆通过路口时间1S。6.随机生成车辆与红绿控制灯时间间隔自定。面向对象分析与设计1.设计Road类表示路线2.每个Road对象代表一条路线,共有12个。3.路线上随机增加车辆添加到一个集合中。4.不断检测若控制灯为绿,则集合中第一个元素。5.不断检查控制本路段的灯是否为绿,若是将下一个灯变红。6.设计一个Lamp类表示交通灯,维护自己红绿两种状态,都有变红或绿的方法,并能返回其状态。7.四个右转灯设计为常绿。8.其余八个灯两两成对,每队状态相同,对四个灯轮询。9.Lamp类中设计两个变量,一个用来记住与自己相反的灯,一个用于记住下一个灯。10.获得某个方向的灯时都是同一个实例对象,所以Lamp类改用枚举具有方便性。 11.设计一个LampController类,控制灯的变化。编程实例:

package com.isoftstone.interview.traffic;

public enum Lamp {
 S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
 N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
 S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);
 
 private Lamp(String opposite,String next,boolean lighted){
  this.opposite = opposite;
  this.next = next;
  this.lighted  = lighted;
 }
 
 private Lamp(){
 }
 
 private boolean lighted;
 private String opposite;
 private String next;
 
 public boolean isLighted(){
  return lighted;
 }
 
 public void light(){
  this.lighted = true;
  if(opposite != null){
   Lamp.valueOf(opposite).light();
  }
  System.out.println(name() + "lamp is green,有六个方向的车在通行");
 }
 
 public Lamp blackOut(){
  this.lighted = false;
  if(opposite != null){
   Lamp.valueOf(opposite).blackOut();
  }
  Lamp nextLamp = null;
  if(next != null){
   nextLamp = Lamp.valueOf(next);
   nextLamp.light();
   System.out.println("绿灯从" + name() + "-->切换为" + next);
  }
  return nextLamp;
 }
}


package com.isoftstone.interview.traffic;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class LampController {
 private Lamp currentLamp;
 
 public LampController(){
  currentLamp  = Lamp.S2N;
  currentLamp.light();
  
 ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);//设定定时器
 timer.scheduleAtFixedRate(
   new Runnable(){
    public void run(){
     currentLamp = currentLamp.blackOut();
    }
   }, 
   10, 
   10, 
   TimeUnit.SECONDS);
 }
}

package com.isoftstone.interview.traffic;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


public class Road {
 List<String> vehicle = new ArrayList<String>();
 
 private String name = null;
 public Road(String name){
  this.name = name;
  
 ExecutorService pool = Executors.newSingleThreadExecutor();//java5的线程
 pool.execute(new Runnable(){  //创建线程
  public void run(){
   for(int i=1;i<1000;i++){
    try {
     Thread.sleep((new Random().nextInt(10) + 1) * 1000);
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    vehicle.add(Road.this.name  + "_" +i);
   }
  }
 });
 
 ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
 timer.scheduleAtFixedRate(
   new Runnable(){
    public void run(){
     if(vehicle.size()>0){
      boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
      if(lighted){
       System.out.println(vehicle.remove(0) + "is traversing");
      }
     }
    }
    }, 
   1, 
   1, 
   TimeUnit.SECONDS);
 }
}

package com.isoftstone.interview.traffic;

public class MainClass {

 /**
  * @param args
  */
 public static void main(String[] args) {
  
   String[] direction = new String[]{
   "S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2N" 
  };
  for(int i=0; i<direction.length;i++){
   new Road(direction[i]);
  } 
  
  new LampController();
 }

}


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本设计是交通灯用于十字路口的设计,是单片机控制的简易系统,结构很简单,我采用的是AT89C52作为芯片,采用一些相应的简单外围电路都是书本上的,比如外围的时钟晶振电路,复位电路等等,在硬件电路的设计方面,主题思想是用一片单片机加上输出的LED显示器和TRAFFICLIGHTS作为输出结果,通过按键来控制交通灯的输出,采用一个中断作为特殊车辆的控制位,采用P1口作为输入控制口即A道和B道的控制口,其为双向IO口同时作为交通灯的输出口,采用P0口作为LED的输出口,但P0口做输出口时需要接上拉电阻,其显示的是红绿黄灯的切换时间,在软件程序的设计方面,本设计采用了C语言作为编辑语言,其结构简单,语言方便,实现起来比较容易,作为特殊车辆,采用的是外部中断0即INT0作为它的控制口,我的程序大体的分为四部分,主程序和两个子程序即显示程序和延时程序,和一个宏定义。对于定时器,我采用了定时器0,主程序是一些程序的初始化比较简单,主要是开中断,开定时器和方式选择等等,遇到中断,和有按键按下就调用显示程序,程序的开始是宏定义,定义管脚的作用和名称,然后是延时程序中断程序和显示程序,在显示程序中字形码对应的是LED的输出(其为共阴极显示),应该特别注意的是在理想电路设计中我没注意电阻和电容的选择,其不影响仿真输出,但在实际电路中电阻和电容如果选择不正确可能影响输出结果。在仿真电路中使用总线形式用来节省空间。
本设计是关于单片机控制的交通灯模拟系统的设计。主要内容有交通灯模拟系统设计方案,主要功能,各功能模块的介绍,电路设计,硬件部分设计,软件部分设计,模拟系统的仿真调试,设计方法以及课程设计的心得体会等等。 该设计中用光二极管来模拟信号灯,紧急车的优先通过请求信号由外部中断技术来模拟。根据交通灯系统所需要实现的功能要求,先画出中断程序部分的流程图和主程序流程图,然后根据流程图写出其子程序。从而通过模拟系统的仿真来实现该设计所要求的功能。 本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。最后,系统要求实现如下的交通灯的功能: 1、南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行时间为20秒,时间可设置修改;    2、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;    3、黄灯亮时,要求每秒闪亮一次。    4、东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。    5、一道有车而另一道无车(实验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行。 6、有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2 开关模拟。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值