交通灯

对交通灯管理系统车辆行驶路线的理解:

  总共12条路线,由于车辆是靠着马路右侧行驶,所以右转弯的4条路线的控制灯可以假设称为常绿状态,另外,其他的8条线路是两两成对的,可以归为4组,4组灯是同时变绿和变红,在当前绿灯变红时当前灯的下一个方向上的灯变绿。

  对象分析与代码实现:谁拥有数据,谁就对外提供操作这些数据的方法。

  总共有3个对象,(1)交通灯Lamp,12个方向上的每个交通灯都维护一个状态:亮(绿)或不亮(红),每个交通灯要有变亮和变黑的方法,并且能返回自己的亮黑状态。

  首先要有判断当前灯是否为亮(绿)的方法:

    public boolean isLighted(){

        retrun lighted;

    }

  再有就是对应方向上的灯同时变亮(绿)的方法:

    public void light(){

        this.lighted = true;

        if(opposite != null){

            Lamp.valueOf(opposite).light();

        }

        System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");

    }

    最后就是对应方向上的灯同时变黑(红)的方法,这里设计的让此方法返回下一个灯。

        public Lamp blackOut(){

        this.lighted = false;

        if(opposite != null){

            Lamp.valueOf(opposite).blackOut();

        }      

        Lamp nextLamp= null;

        if(next != null){

            nextLamp = Lamp.valueOf(next);

            System.out.println("绿灯从" + name() + "-------->切换为" + next);          

            nextLamp.light();

        }

        return nextLamp;

    }

}

  交通灯类的编写在java高新技术中带有抽象方法的枚举时已经写过

(2)交通灯控制系统LampController,LampController构造方法中要设定第一个为绿的灯。

    currentLamp = Lamp.S2N; //刚开始让由南向北的灯变绿;

        currentLamp.light();

LampController对象的start方法中将当前灯变绿,然后启动一个定时器,每隔10秒将当前灯变红和将下一个灯变绿。

/*每隔10秒将当前绿灯变为红灯,并让下一个方向的灯变绿*/    

        ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);

        timer.scheduleAtFixedRate(

                new Runnable(){

                    public  void run(){

                        System.out.println("来啊");

                        currentLamp = currentLamp.blackOut();

                }

                },

                10,

                10,

                TimeUnit.SECONDS);

    }

 (3)路Road,路中存储着车辆的集合,显然路上就应该有增加车辆和减少车辆的方法了。

  //模拟车辆不断随机上路的过程     

        ExecutorService pool = Executors.newSingleThreadExecutor();

        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) {

                        e.printStackTrace();

                    }

                    vechicles.add(Road.this.name + "_" + i);

                }              

            }

           

        });

       

        //每隔一秒检查对应的灯是否为绿,是则放行一辆车     

        ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);

        timer.scheduleAtFixedRate(

                new Runnable(){

                    public void run(){

                        if(vechicles.size()>0){

                        boolean lighted =                            Lamp.valueOf(Road.this.name).isLighted();

                            if(lighted){

                                System.out.println(vechicles.remove(0) + " is                                                       traversing !");

                            }

                        }

                       

                    }

                },

                1,

                1,

                TimeUnit.SECONDS);

       

    }

 

本设计是交通灯用于十字路口的设计,是单片机控制的简易系统,结构很简单,我采用的是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、付费专栏及课程。

余额充值