交通灯课程设计报告

时间:2024.4.21

桂林航院电子工程系

单片机课程设计与制作说明书

设计题目:智能交通灯控制

专业年级: 10级电子信息工程技术(1)班

学    号:  201004520121       

          姓    名:   黄莉珊              

          同组姓名:  李丰       

指导教师:    赵素文             

单片机技术课程设计与制作成绩评定表

设计题目:智能交通灯

学号:                     姓名:

单片机课程设计与制作任务书

专业:10级电子信息工程技术一班 学号:201004520121姓名:黄莉珊

一、设计题目:

智能交通灯控制

二、设计要求:

1、设计一个十字路口的交通灯控制电路,要求主车道和干道两条交叉道路上车辆交替通行。每次通行时间都设为主干道25S,次道路为20S,且用数码管显示时间。

2、要求黄灯先亮5S才能变换通行车道。

3、黄灯亮时,要求每秒闪亮一次,并倒数秒在数码管上显示。

4、如有特殊情况要紧急通行时,可对红绿灯进行人为的控制。红绿灯用发光二极管显示。

三、设计内容:

画出硬件设计图、软件设计、开发板演示、程序调试。

四、设计成果形式:

1、设计说明书一份(不少于4000字);

2、样品一套。

五.完成期限: 20## 年  6月   日

指导教师:                     年   月   日

教研室:                       年   月   日

摘   要

交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机AT89C51为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。

本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、紧急情况中断系统、复位电路等几大部分组成。系统除基本的交通灯功能外,还具有倒计时、紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。

软件上采用C51编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序等。经过整机调试,实现了对十字路口交通灯的模拟。

关键词: AT89C52  LED 交通灯 程序

引言

   随着我国社会经济的发展,城市化、城镇化进程的加快,道路交通堵塞问题日趋严重,如何对交通进行合理的管理和调度而尽可能减少堵车现象成为目前我国很多地方尤其是特大城市急需解决的问题,显然交通灯在其中起着不可或缺的作用。本文就控制交通灯的方法进行了讨论,分析了各种方案的性价比,并用软、硬件加以实现。而后,对六车道以上道路的“十字交叉路口交通灯控制”进行了分析。最后,还对城市交通灯网的控制进行了展望。希望能给有关政府部门一些参考,更好地改善我们的城市交通。现今的交通发展迅速,车辆极具增加,马路不断扩宽,人行横道相对较少。在车流量较大的地段即便有人行横道,行人也很难通过马路。行人自控指示灯系统可以有效的改善这种状况。特别是像北京这样的大都市,经济飞速发展,车辆繁多,人口密集。缓解交通已成为当务之急.例如在我们新校区西门口(塔南路)就是这种情况,每天进出校门的学生特别多,大多还需要穿过这条繁忙的高速公路,这为学校师生带来大大的不便.该系统主要应用于交通领域,具有较高的实用价值。该系统利用红灯,黄灯,绿灯来指挥车辆和行人,以达到车辆停止,行人通行的目的,减少了交通拥挤现象,为行人节省了时间,即保证行人过马路时的安全,也减轻了交管部门的负担。本产品面对公共交通设施,并不注重经济收益,而是注重以后潜在的发展,从而带动相关产业。用户可以完全掌握行人自控指示灯系统的操作方法,以及各个按键的作用科学技术的突飞猛进直接把我们带进了信息化的社会,计算机的应用已普及到经济和社会生活的各个领域.

智能的交通信号灯指挥着人和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通管理现代化的重要课题.在城乡街道的十字交叉路口,为了保证交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行; 黄灯亮,表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行; 绿灯亮,表示该条道路允许通行.交通灯控制电路自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现十字路口城乡交通管理自动化。

本文为了实现交通道路的管理, 分析应用了单片机实现智能交通灯管制的控制系统,以及该系统软、硬件设计方法。

一、课程设计的目的与要求

1、课程设计目的:

(1)进一步理解和消化书本知识,运用所学知识和技能进行简单的设计。

(2)通过课程设计提高应用能力,分析问题和解决问题的能力。

(3)培养查阅资料的习惯,训练和提高自学,独立思考的能力。

2、课程设计要求

交通灯控制系统的设计

1) 掌握在单片机系统中扩展简单I/O接口的方法。

2) 掌握数据输出程序的设计方法。

3) 掌握模拟交通灯控制的实现方法。

4) 掌握外部中断技术的基本使用方法。

5) 掌握中断处理程序的编程方法。

从课程设计的目的出发,通过设计工作的各个环节,达到以下要求:

(1)能够正确理解课程设计的题目和意义,全面思考问题。

(2)运用科学合理的方法,认真按时完成。

一、      方案选择及总体设计

一、技术指标

1、设计一个十字路口的交通灯控制电路,要求主车道和干道两条交叉道路上车辆交替通行。每次通行时间都设为主干道25S,次道路为20S,且用数码管显示时间。

2、要求黄灯先亮5S才能变换通行车道。

3、黄灯亮时,要求每秒闪亮一次,并倒数秒在数码管上显示。

4、如有特殊情况要紧急通行时,可对红绿灯进行人为的控制。红绿灯用发光二极管显示。

二、智能交通灯的方案选择

 利用单片机控制技术.提出了软件和硬件设计方案及两点改进措施:1、根据各道路路口车流量的大小设置主干道的通行时间。2、考虑特殊车辆通行情况,设计紧急切换开关。

由于AT89S52单片机自单带有2计数器,6个中断源,能满足系统的设计要求。用单片机设计不但设计简单,而且成本低,用其设计的交通灯也满足了要求,所以本文采用单片机设计交通灯,系统构图如图1所示:

三、 智能交通灯方案的实现

根据设计任务和要求,可画出该控制器的原理框图, 为确保十字路口的交通安全,往往都采用交通灯自动控制系统来控制交通信号。其中红灯(R)亮,表示禁止通行;黄灯(Y)亮表示暂停;绿灯(G)亮表示允许通行。

1)  控制器的系统框图如图2所示。

图2  交通灯控制器系统框图

2)  电路图

智能交通灯电路图如图3所示。工作原理:

首先必须了解交通灯的亮灭规律。本实验需要用到试验箱上八个发光二极管中的六个,即红、绿、黄各两个。将L1(红)、L2(绿)、L3(黄)作为东西方向的指示灯,将L5(红)、L6(绿)、L7(黄)作为南北方向的指示灯。交通灯的亮灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。当有紧急车辆到达或交通拥堵时,可以手动控制两个方向上的灯可以让车辆慢行或禁行或延长红绿灯的停留时间,以便让紧急车辆通过或减轻交通拥堵压力,保证交通顺畅,紧急车辆通过后,交通灯恢复中断前的状态。

图3   智能交通灯电路图

3) 智能交通灯系统的组成

交通灯系统由三部分组成:信号灯电路,时间显示电路,控制开关电路。

4) 工作原理

Ⅰ、主干道、次道

十字路口车辆通行顺序如图4所示:

图4 十字路口车辆通行顺序

Ⅱ、信号灯电路

信号灯用来显示车辆通行状况,下面以一个十字路口为例,说明一个交通灯的四种状态见图5。每个路口的信号的的转换顺序为:绿——>黄——>红,绿灯表示允许通行,黄灯表示禁止通行,但已经驶过安全线的车辆可以继续通行,是绿灯过渡到红灯提示灯。红灯表示禁止通行。主干道绿灯的时间为25秒,红灯时间为20秒,黄灯时间为5秒。次道绿灯的时间为20秒,红灯的时间为25秒,黄灯时间为5秒。                      

图5交通信号灯运行状态

Ⅲ、时间显示电路

在交通信号灯的正上方安装一个可以显示绿灯通行时间,红灯等待时间的显示电路,采用数码管显示电路是一种很好的方法。由于东往西方向和西往东方向显示的时间相同,南往北方向和北往南方向显示的时间也相同,所以只需要考虑四位数码管显示电路,其中东西方向两位,南北方向两位,两位数码管可以时间的时间为0-99秒完全可以满足系统的要求,数码管连接方法如图6所示

图6 数码管连接方法

下面我们用这种方法显示交通灯的时间,南北(主干道)方向要显示25秒(绿灯),东西(次道)方向要显示20(红灯)秒。

显示程序如下所示:

void display(uchar i)  //显示时间

{   P2=0xff;

    delay(1);

    P2=0x7d;

   P0=table[i/10];

   delay(1) ;

    P2=0xff;

    delay(1);

   P2=0xbe;

   P0=table[i%10];

   delay(1); 

    P2=0xff;

    delay(1);

    P2=0xf7;

   switch(temp)

   {case 0:P0=table[10];break;//显示一个R

    case 1:P0=table[11];break;//显示一个Y

    case 2:P0=table[9];break;//显示一个G

    case 3:P0=table[11];break;//显示一个Y

    }

     delay(1);

   P2=0xff;

    delay(1);

    P2=0xfb;

   switch(temp)

   {case 0:P0=table[14];break;//显示一个”三“,表示车辆禁止通行,是红灯亮

     case 1:P0=table[12];break;//显示一个“H”表示车辆慢行

    case 2:P0=table[13];break;//显示一个“||”表示车辆畅通无阻

    case 3:P0=table[12];break;//显示一个“H”表示车辆慢行

     }

     delay(1);

  

   P2=0xff;

    delay(1);

    P2=0xef;

   switch(temp)

   {case 0:P0=table[9];break;//显示一个G

    case 1:P0=table[11];break;//显示一个Y

    case 2:P0=table[10];break;//显示一个R

    case 3:P0=table[11];break;//显示一个Y

    }

     delay(1);

   P2=0xff;

    delay(1);

    P2=0xdf;

   switch(temp)

   {case 0:P0=table[13];break;//显示一个“||”表示车辆畅通无阻

    case 1:P0=table[12];break;//显示一个“H”表示车辆慢?

    

         case 2:P0=table[14];break;//显示一个”三“,表示车辆禁止通行,是红灯?

    

         case 3:P0=table[12];break;     //显示“H"

     }

     delay(1);

 }

四、开关控制电路

一般情况下交通灯按照车流量大小(主干道、次道)合理分配通行时间,按一定规律变化,但考虑车道通车情况,设计手动控制通行开关,下面简述单片机的中断原理。

ⅰ)  Mcs—51的中断源

8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制,其中5个中断源的程序入口地址如表4所示:

表4中断源程序入口

  ⅱ) 中断的处理流程

CPU响应中断请求后,就立即转入执行中断服务程序。不同的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程一般都如下所述:

(1)现场保护和现场恢复:

  中断是在执行其它任务的过程中转去执行临时的任务,为了在执行完中断服务程序后,回头执行原先的程序时,知道程序原来在何处打断的,各有关寄存器的内容如何,就必须在转入执行中断服务程序前,将这些内容和状态进行备份——即保护现场。我们举个例子,在看书时,电话玲响需传去接电话时,必须在书本上做个记号,以便在接完电话后回来看书时,知道从哪些内容继续往下看。计算机的中断处理方法也如此,中断开始前需将有关寄存器的内容压入堆栈进行保存,以便在恢复原来程序时使用。中断服务程序完成后,继续执行原先的程序,就需把保存的现场内容从堆栈中弹出,恢复积存器和存储单元的原有内容,这就是现场恢复。 如果在执行中断服务时不是按上述方法进行现场保护和恢复现场,就会是程序运行紊乱,程序跑飞,自然使单片机不能正常工作。

(2)中断打开和中断关闭:

在中断处理进行过程中,可能又有新的中断请求到来,这里规定,现场保护和现场恢复的操作是不允许打扰的,否则保护和恢复的过程就可能使数据出错,为此在进行现场保护和现场恢复的过程中,必须关闭总中断,屏蔽其它所有的中断,待这个操作完成后再打开总中断,以便实现中断嵌套。

 (3)中断服务程序:

  既然有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容,一般以子程序的形式出现,所有的中断都要转去执行中断服务程序,进行中断服务。

   (4)中断返回:

  执行完中断服务程序后,必然要返回,中断返回就是被程序运行从中断服务程序转回到原工作程序上来。在MCS-51单片机中,中断返回是通过一条专门的指令实现的,自然这条指令是中断服务程序的最后一条指令。

ⅲ) 交通灯中的中断处理流程

(1)现场保护和现场恢复:

有某一个干道上的车流拥堵时就需要人工控制交通灯的工作,因此要进入中断,在中断之前,先将交通灯中断前情况保护好,当中断执行后再恢复现场,包括信号灯和时间显示电路。

(2)中断打开和中断关闭:

为了使车流拥堵的干道尽可能流畅按一下打开中断开关就可以打开中断,关闭中断开关就关闭中断。

(3)中断服务程序:

有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容:即如果南北方向出现车辆拥堵时就要要求通过,南北方向转换为绿灯,东西方向为红灯;如果东西方向出现拥堵就需要要求通过,东西方向转换为绿灯,南北方向为红灯。

(4) 中断返回:

执行完中断服务程序后,必然要返回,即交通灯信号回到最初的状态。

(5)在程序周采用的是P3.4、P3.5、P3.6、P3.7作为控制开关,下面是交通灯开关控制程序如下:

void uscan ()

{

   if(key==0)

     { delay(10);//去抖程序

         if(key==0)

          {

          TR0=~TR0;//启动/暂停

         /* switch(temp)

          {case 0:P1=0x7e;break;

           case 1:P1=0xbe;break;

            case 2:P1=0xdb;break;

          case 3:P1=0xdd;break;

          }*/

          while(!key);

          }

      }

   if(key1==0)

     {delay(10);

         if(key1==0)    

          {

            TR0=0;//中断定时器T0

             if(t==3){t=0;}

            while(!key1);

             switch(t)         //切换红黄绿三灯的状态,即改变东西南北的通行状态

             {    case 0:P1=0xff;

                      delay(5);

                     P1=0x7e;

                     delay(10);

                     num=num2;

                     temp=0;

                     break;

              case 1:P1=0xff;

                     delay(5);

                    D0=0;D1=0;

                    delay(10);

                    num=num3;

                    temp=1;

                    break;

              case 2:P1=0xff;

                     delay(5);

                    P1=0xdb;

                    delay(10);

                    num=num4;

                    temp=2;

                    break;

              }

              t++;

          //  TR0=1;        if(t==0)

           }

       }

   if(key2==0)

    { delay(10);

       if(key2==0)

        {

          TR0=0;

          while(!key2);

          switch(t)       //时间加1,改变时间

          {case 0:num++;break;

           case 1:num2++;num++;display(num2);break;

           case 2:num3++;num++;display(num3);break;

          case 3:num4++;num++;display(num4);break;

            }      

        // TR0=1;

        // delay(100);

          }

      }

   if(key3==0)

    { delay(10);

       if(key3==0)

        { 

          TR0=0;

          while(!key3);

          switch(t)      //时间减1,改变时间

          {case 0:num--;break;

           case 1:num2--;num--;display(num2);break;

           case 2:num3--;num--;display(num3);break;

          case 3:num4--;num--;display(num4);break;

            }          

          delay(150);

          if(num==0)         //时间减到0,重新启动定时器T0

          {

           TR0=1;

          switch(t)    

          {case 1:num2=1;num=1;display(num2);break;

           case 2:num3=1;num=1;display(num3);break;

          case 3:num4=1;num=1;display(num4);break;

            }          

           }

         // delay(100);

          }

      }

 }

五、交通灯的软件设计流程图

智能交通灯的软件设计流程图如图7所示:

图7 交通灯的软件设计流程图

程序设计:AT89C51单片机交通灯显示程序清单:见附录:

五. 智能交通灯方案的仿真及测试、数据及结果分析

1.智能交通灯方案的仿真

PROTEUS嵌入式系统仿真软件在设计时已经注意到和单片机各种编译程序的整合了,如它可以和Keil ,Wave6000等编译模拟软件结合使用。

打开PROTEUS软件,按照硬件电路设计将硬件画好,电路图绘制完成后, 再添加AT89C51 的应用程序。将鼠标移至AT89C51 上, 单击鼠标右键使之处于选中状态, 在该器件上单击左键, 打开如图11所示的对话框。在 Program File 栏添加编译好的十六进制格式的程序文件AA.hex(可以接受3 种格式的文件) ,给AT89C51输入晶振频率,此处默认为12MHZ, 单击OK 按钮完成程序添加工作, 下面就可以进行系统仿真了。单击主界面下方的按钮开始系统仿真。PROTEUS VSM 所进行的是一种交互式仿真, 在仿真进行中可以对各控制按钮、开关等进行操作, 系统对输入的响应会被真实的反映出来。在这个例子里, 开始仿真后,开关,按钮通过鼠标单击来改变状态,所改变状态的状态会在LED和数码管显示出来。

图11   AT89C51添加程序文件

2.测试、数据及结果分析
   (1).状态灯显示测试   当电路连接完毕后,将写好的测试程序刷写到芯片内,K1 和K2分别给端口送高电平和
低电平,通电即可检测。

将程序输入到单片机中,运行程序,可以观察到现象:首先是东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时5秒后,东西路口绿灯灭,黄灯开始闪烁。闪烁2次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时25秒后,南北路口的绿灯灭,黄灯开始闪烁。闪烁2次后,再切换到东西路口方向,重复上述过程。
  

(2).数码管的测试   将串口的和电路板上的接口连接,将写好的测试程序刷写到芯片内,开电源即可测试。

将程序输入到单片机中,运行程序,可以观察到现象:看到所有的数码管都为零,按下复位键,数码管还是没有变化,按一下键盘上的按键,也没有反映。关机,检查程序,发现显示程序中的的段码和位码弄错,改过来,重新烧录进单片机,。开机,看到数码管显示时间,但闪得很厉害。我想是延时时间过长,所以对程序进行修改,把原来的10us改为1us,重新烧录,闪烁现象消失。

(3)开关控制电路的测试   按下启动/暂停按键,看到数码管的时间显示由走到停到走;按下干道红绿灯的切换开关,可以看到由东西红灯和南北绿灯亮变到东西南北的黄灯都亮,再变南北绿灯和东西红灯亮。按一下暂停键,当时间暂停时,按下控制时间的两个按键+/-,可以改变时间的长短,再按一下启动键,看到时间从刚才设置的数值开始走,因此这部分电路没有出错。
   

(3).整体电路测试   系统上电,刷写好程序即可开始测试,观测一个周期灯的显示状态是否正常,同时观察倒计的计数是否正常。

给单片机上电,烧录程序。看到状态灯显示正常,数码管的时间显示也正常。观察状态灯的变化情况是否与时间显示一致。最后观察到不一致,发现有一个状态时南北和东西的红灯同时亮,还有一路车辆的慢行与车辆禁止通行的标志弄错了,一路车辆畅通无阻与车辆禁止通行的标志弄错,经检查,得知在取数据时弄错了,是由于定义时出现了错误而造成的。经修改,重新烧录,开发板成功实现了预期的功能。

六、总结

1.通过试验进一步理解和消化了书本知识,分析每个语句的含义,运用所学知识进行简单的程序设计。

了解了在单片机系统中扩展简单I/O接口的方法. 外部中断技术的基本使用方法,掌握了中断处理程序的编程方法。

2.通过查阅各种单片机资料,培养了我自学和独立思考的能力。与同学交流研究,让我懂得了更多以前不明白的知识.

3.在课程设计过程中,不断调试程序和修改程序,提高了对单片机的应用能力,分析问题和解决问题的能力。

七、心得体会

我们组所做的课程设计是智能交通灯。一开始拿到这个题目的时候,我们准备了好几个设计方案,真不知道做哪个电路好,在老师的指导下,自己找资料、看书,总算完成了。通过这次的课程设计,使我对单片机有了更深的认识,从理论和实践上都得到了很大的提高,所以这次任务的完成使我学到了很多东西。首先,丰富了自己的知识面,学到了以前没能学通的东西,具体了解了怎样去完成一个电路的设计:从流程图、电路图、焊接电路板、检查电路板、仿真到烧片一整套东西。

我的课程设计分为两个部分,硬件部分和软件部分。硬件部分介绍:单片机AT89C52的功能和其在电路的作用。介绍了AT89C52的管脚结构和每个管脚的作用及各自的连接方法。AT89C52与MCS-51兼容,4K字节可编程闪烁存储器,寿命:1000次可擦,数据保存10年,全静态工作:0HZ-24HZ,三级程序存储器锁定,128*8位内部RAM,32跟可编程I/O线,两个16位定时/计数器,5个中断源,5个可编程串行通道,低功耗的闲置和掉电模式,片内震荡和时钟电路,P0和 P1 可作为串行输入口,P3口因为其管脚有特殊功能,可连接其他电路。例如P3.0RXD作为串行输出口,其中时钟电路采用内时钟工作方式,控制信号采用手动控制。数据的传输方式分为单工、半双工、全双工和多工工作方式;串行通信有两种形式,异步和同步通信。介绍了串行串行口控制寄存器,电源管理寄存器PCON,中断允许寄存器IE。

从这个课程设计中,巩固了单片机AT89C52的内部结构及其工作原理,加深了对时钟电路和控制电路工作原理的了解,巩固了C语言的使用能力,提高了自己动手的能力,学到了很多经验,并且提高了自己分析问题的能力和创新能力,得到了理论联系实际的机会,做出了成果。使自己在硬件设计方面树立了信心,为以后从事这方面的工作打好了基础,这也是这次课程设计的最大收获。通过这次课程设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了所学知识的学习成果。这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能够真正掌握理论知识,从而提高自己的实际动手能力和独立思考的能。虽然在这次设计中有的地方对于知识的运用和衔接还不够熟练。但是我将在以后的工作和学习中继续努力、不断完善,为今后的发展打下了良好的基础。

附录2:硬件电路设计

附录3:程序

   

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit D0=P1^2;//黄灯的定义

sbit D1=P1^3;

sbit D2=P1^0;//红灯的定义

sbit D3=P1^1;

sbit D4=P1^4;//绿灯的定义

sbit D5=P1^5;

sbit key=P3^0;//键盘的定义

sbit key1=P3^1;

sbit key2=P3^2;

sbit key3=P3^3;           

uchar temp,num,num1,num2,num3,num4,t=0;

uchar code table[]={0x3f,0x06,0x5b,0x4f,

                    0x66,0x6d,0x7d,0x07,

                    0x7f,0x6f,0x77,0x6e,

                    0x36,0x76,0x49};  //0--9,R、Y、||、H、三

void delay(uint z) //延时程序

{

       uint x,y;

       for(x=z;x>0;x--)

       for(y=110;y>0;y--);

}

/********时间显示部分************/

void display(uchar i) 

{  

    P0=0x00;

    delay(1);//东西主干道时间

    P2=0x06;//显示秒的十位

       P0=table[i/10];

       delay(1) ;

    P0=0x00;

    delay(1);

       P2=0x07;//显示秒的个位

       P0=table[i%10];

       delay(1);

   

    P0=0x00;

    delay(1);//南北次道时间

    P2=0x00;//显示秒的十位

       P0=table[i/10];

       delay(1) ;

   

    P0=0x00;

    delay(1);

       P2=0x01;//显示秒的个位

       P0=table[i%10];

       delay(1);

      

/********显示红绿黄灯和车流量部分*****************/  

    P0=0x00;

    delay(1);

    P2=0x04;//东西方向的灯

       switch(temp)

       {case 0:P0=table[10];break;//显示一个R

        case 1:P0=table[11];break;//显示一个Y

        case 2:P0=table[9];break;//显示一个G

        case 3:P0=table[11];break;//显示一个Y

        }

     delay(1);

       P0=0x00;

    delay(1);

    P2=0x05;//东西方向车辆情况

       switch(temp)

       {case 0:P0=table[14];break;//显示一个"三",表示车辆禁止通行,是红灯亮

     case 1:P0=table[13];break;//显示一个"H"表示车辆慢行

        case 2:P0=table[12];break;//显示一个"||"表示车辆畅通无阻

        case 3:P0=table[13];break;//显示一个"H"表示车辆慢行

         }

         delay(1);

      

       P0=0x00;

    delay(1);

    P2=0x03;//南北方向的灯

       switch(temp)

       {case 0:P0=table[9];break;//显示一个G

        case 1:P0=table[11];break;//显示一个Y

        case 2:P0=table[10];break;//显示一个R

        case 3:P0=table[11];break;//显示一个Y

        }

     delay(1);

       P0=0x00;

    delay(1);

    P2=0x02;//南北方向车辆情况

       switch(temp)

         {case 0:P0=table[12];break;//显示一个"||"表示车辆畅通无阻

        case 1:P0=table[13];break;//显示一个"H"表示车辆慢

        case 2:P0=table[14];break;//显示一个"三",表示车辆禁止通行,是红灯

     case 3:P0=table[13];break;//显示一个"H"表示车辆慢行

         }

         delay(1);

 }

/**********按键控制部分**************/

void uscan ()

{

       if(key==0)

         { delay(10);//去抖程序

                if(key==0)

                 {

                 TR0=~TR0;//启动/暂停

                  /*switch(temp)

                 {case 0:P1=0x7e;break;

                  case 1:P1=0xbe;break;

            case 2:P1=0xdb;break;

                     case 3:P1=0xdd;break;

                     }*/

                 while(!key);

                 }

          }

       if(key1==0)

         {delay(10);//去抖程序

                if(key1==0)      

                 {

                 TR0=0;//中断定时器T0

             if(t==3){t=0;}

                   while(!key1);

                    switch(t)         //切换红黄绿三灯的状态,即改变东西南北的通行状态

                    {  case 0:P1=0xff;

                                 delay(5);

                                          P1=0xee;//第一个按键的灯亮灭

                                          delay(10);

                                          num=num2;

                                          temp=0;

                                          break;

                         case 1:P1=0xff;

                                   delay(5);

                                      D0=0;D1=0;

                                      delay(10);

                                      num=num3;

                                      temp=1;

                                      break;

                            case 2:P1=0xff;

                                   delay(5);

                                      P1=0xdd;//第二个按键的灯的亮灭

                                      delay(10);

                                      num=num4;

                                      temp=2;

                                      break;

                            }

                            t++;

                     /*TR0=1;               if(t==0)*/

                  }

              }

       if(key2==0)

        { delay(10);

           if(key2==0)

            {

                 TR0=0;

              while(!key2);

                 switch(t)       //时间加1,改变时间

                 {case 0:num++;break;

                  case 1:num2++;num++;display(num2);break;

                  case 2:num3++;num++;display(num3);break;

                     case 3:num4++;num++;display(num4);break;

            }      

            // TR0=1;

               // delay(100);

                 }

          }

       if(key3==0)

        { delay(10);

           if(key3==0)

            { 

                 TR0=0;

              while(!key3);

                 switch(t)      //时间减1,改变时间

                 {case 0:num--;break;

                  case 1:num2--;num--;display(num2);break;

                  case 2:num3--;num--;display(num3);break;

                     case 3:num4--;num--;display(num4);break;

            }          

                 delay(150);

                 if(num==0)         //时间减到0,重新启动定时器T0

                 {

                  TR0=1;

                     switch(t)    

                 {case 1:num2=1;num=1;display(num2);break;

                  case 2:num3=1;num=1;display(num3);break;

                     case 3:num4=1;num=1;display(num4);break;

            }          

                      }

                // delay(100);

                 }

          }

 }

/*********定时计数部分******************/

void uin()

{

        TMOD=0x01;//定时器T0工作方式1

        TH0=(65536-50000)/256;//赋初值

        TL0=(65536-50000)%256;

        EA=1;//申请总中断

        ET0=1;//启动中断

        TR0=1;//启动定时器T0

}

void main()

{     num=25;

    num2=25;

    num3=5;

    num4=20;

    uin();

       while(1)

       {uscan();

    display(num);

/*    if(TR0==0)

       {if(temp==0) {display0(num2);}

    if(temp==1) {display0(num3);}

       if(temp==2) {display0(num4);}

    if(temp==3) {display0(num3);}

       }*/

       }

}

void time0() interrupt 1

{

       TH0=(65536-50000)/256;//初始化 定时部分

       TL0=(65536-50000)%256;

       num1++;

       if(temp==0)

        {

          if(num1==20)

          {num1=0;

           num--;

           P1=0xee;//正常运行25秒时灯的亮灭

            if(num==0)

             {num=num3;

              P1=0xff;

              temp=1;

              }

           }

        }

       if(temp==1)

        {   

            if(num1==20)

             {num1=0;

               num--;

               D0=~D0;//东西路 红灯亮

               D1=~D1;//南北路 黄灯闪亮

               if(num==0)

               {num=num2;

               D0=1;

               D1=1;

               temp=2;

               }

              }

        }

       if(temp==2)

        {

             if(num1==20)

             {num1=0;

               num--;

               P1=0xdd;//正常运行20秒时灯的亮灭

               if(num==0)

                {num=num3;

               P1=0xff;

                temp=3;

                }

              }  

       }

       if(temp==3)

        {   

            if(num1==20)

             {num1=0;

               num--;

               D0=~D0;

               D1=~D1;

               if(num==0)

               {num=num4;

               D0=1;

               D1=1;

               temp=0;

               }

              }

        }

}

目   录

摘要

引言

一、      课程设计的目的与要求

二、   方案选择及总体设计

      1.  技术指标

      2.  智能交通灯的方案选择

     3.  智能交通灯方案的实现

三、   智能交通灯方案的仿真及测试、数据及结果分析

a)   智能交通灯方案的仿真

b)   测试、数据及结果分析

四、   总结

五、   心得体会

      附录3  程序

更多相关推荐:
单片机交通灯课程设计报告[1]

摘要31引言42总体设计方案521设计思路5211设计目的5212设计任务和内容6213方案比较设计与论证6214芯片简介922设计方框图153设计原理分析16313233交通灯显示时序的理论分析与计算16交通...

交通灯控制电路设计报告

华北科技学院数字电路设计报告交通灯控制电路设计报告目录一设计任务和要求2二设计方案的总体思路与选择31时钟信号发生器电路设计论证42定时器设计论证43控制器论证44信号灯的论证4三电路设计计算与分析51秒脉冲的...

EDA交通灯课程设计报告(EDA)

数字电路课程设计报告字路课程设计交通灯设计第1页共18页报告数电数字电路课程设计报告目录序言3第一章设计任务和要求411设计任务412设计要求4第二章电路工作原理及方案设计4第三章单元电路设计与仿真631软件原...

交通灯课程设计报告

交通灯课程设计报告1设计思路目录1引言2设计任务与要求3总体方案设计2设计原理及参考框图3交通灯控制时序图4系统硬件设计部分1时间秒脉冲发生器260s30s5s计数器及定时电路3主控电路4红黄绿交通灯控制电路5...

基于单片机的交通灯课程设计报告[1]

基于单片机的交通灯课程设计报告摘要本设计是一个以微电子技术,计算机和通信技术为先导的,而计算机技术怎样与实际应用更有效的结合并有效的发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。十字路口车…

PLC交通灯课程设计报告

信息与电子工程学院课程设计报告目录一课程设计概述311课程设计内容312课程设计技术指标3二方案的选择及确定4三系统硬件设计5四系统软件设计6五触摸屏设计8六系统调试9七总结以体会9八参考文献10九附录10附录...

单片机课程设计报告交通灯

单片机交通灯设计洛阳理工学院电气工程与其自动化系专业自动化班级自动化八班姓名01白彦芳02何一婷11靳亚磊指导老师姚惠林洛阳理工学院单片机课程设计目录1设计任务和性能指标311设计任务412性能指标42设计方案...

单片机交通灯课程设计报告

摘要自从1858年英国人发明了原始的机械扳手交通灯之后随后的一百多年里交通灯改变了交通路况也在人们日常生活中占据了重要地位随着人们社会活动日益增加经济发展汽车数量急剧增加城市道路日渐拥挤交通灯更加显示出了它的功...

简易交通灯控制器设计实验六报告格式

浙江万里学院实验报告专业班姓名学号实验日期一实验目的掌握有限状态机的描述掌握Verilog语言的多个过程语句always的应用练习复杂时序电路设计二实验内容简易交通信号控制器设计1设计目标1在交通灯系统中路口需...

单片机交通灯课程设计报告(含电路图,源程序)

摘要31引言42总体设计方案521设计思路5211设计目的5212设计任务和内容6213方案比较设计与论证6214芯片简介922设计方框图153设计原理分析16313233交通灯显示时序的理论分析与计算16交通...

单片机交通灯课程设计报告

单片机应用综合实验报告题目:平面交叉口多时段多相位交通信号灯控制器设计学院:电子与控制工程学院专业:自动化(交通信息与控制)班级:姓名:指导教师:实验题目:平面交叉口多时段多相位交通信号灯控制器设计实验功能要求…

基于AT89C51单片机的十字路口交通灯设计(论文)

黄河科技学院课程设计报告书题目交通灯课程单片机课程设计专业数控技术班学指导教师何春霞年011月620xx日摘要近年来随着科技的飞速发展单片机的应用正在不断深入同时带动传统控制检测技术日益更新在实时检测和自动控制...

交通灯课程设计报告(25篇)