精华内容
下载资源
问答
  • 用PROTEL画出交通信号灯原理图,实现红绿黄灯的交替变化
  • 交通信号灯+数电课程设计报告+仿真文件+原理图
  • 交通信号灯电路

    2015-05-04 22:27:32
    交通信号灯控制系统 protues文件 电路
  • 编写程序控制8255可编程控制接口芯片,使实验台上的红、绿、黄发光二极管按照十字路口交通信号灯 的变化规律,同时用两组2位数码管表示南北、东西方向交通信号灯的时间。
  • 微机原理 交通信号灯

    2011-01-04 12:23:55
    微机原理与接口技术 交通信号灯 主要金发覅ivjijividv你
  • 交通信号灯

    2018-04-25 17:11:38
    课程设计交通信号灯, PROTEUS原理图可供下载。 绿灯30秒,红灯20秒,黄灯5秒。
  • 研究目的: 模拟交通灯控制器就是使用单片机来控制一些LED和数码管,...利用所学知识设计一款基于单片机的交通信号灯的控制系统。主要功能如下:东西向与南北向信号灯定时20秒交换一次、每次交换时点亮黄灯5s提醒行人。
  • 交通灯 原理图 PCB

    2012-04-05 20:20:59
    交通灯 原理图 PCB 大学生毕业设计 交通灯
  • 交通灯原理图以及源程序,供开发者研究学习
  • 用java语言实现的信号灯,希望对想了解实现原理的同学有所帮助.自己写的,欢迎指导.
  • 交通信号灯.SchDoc

    2020-12-01 18:21:22
    基于51单片机设计的交通信号灯,这个是完整的电路原理图,其中数码管用的是两个一位红色共阳数码管(因为手头只有这些材料了)
  • 本文主要为单片机交通信号灯设计应用图解,一起来学习下
  • 太阳能LED交通信号灯由光伏极板、充放电控制器、蓄电池、LED交通信号灯系统构成。系统框图如1所示。 1 系统框图 其中,光伏极板是用来将太阳能转换成电能,为系统供电。 充放电控制器是将太阳能产生的电...
  • 基于51单片机的交通灯原理图加代码

    万次阅读 多人点赞 2019-07-21 17:59:54
    花了一个星期制作的交通灯仿真程序+原理图,通过数码管显示路口的时间,通过led显示红绿灯。@TOC ![#include<reg51.H>      // 对单片机的口进行了定义 #define uint unsigned int #...

    花了一个星期制作的交通灯仿真程序+原理图,通过数码管显示路口的时间,通过led显示红绿灯。@[TOC]在这里插入图片描述
    #include<reg51.H> // 对单片机的口进行了定义

    #define uint unsigned int

    #define uchar unsigned char

    uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段码组合,共阳极

    uchar code b[4]={0x01,0x02,0x04,0x08}; //位码组合

    uchar code c[4]={0xcc,0xd4,0x78,0xb8};/P1 绿红、黄红、红绿、红黄/

    //12MHz

    //*************************************************************************************

    uchar NB=25,DX=30,NBG=25,DXG=15,H=5; /数码管显示值设置/

    uchar i,k=0,cnt=0,j=0;

    sbit K0=P3^4; /支干道通行/

    sbit K1=P3^5; /主干道通行/

    sbit K4=P3^6; /返回/

    sbit K3=P3^2; /设置时间/

    sbit K2=P3^3; /紧急刹车/

    void delay(uchar t); /定义延时程序/

    void key(); /定义键盘程序/

    void display(); /定义显示程序/

    void settime(); /定义时间设置显示程序/

    //程序初始********************

    void init(void)

    {

    TMOD=0x01; /使用定时器0模式一/

    TH0=0x3c; /(65536-5000)/256/

    TL0=0xb0; /(65536-5000)%256/

    IT0=1; //开中断

    ET0=1;

    TR0=1;

    EA=1;

    EX0=1;

    EX1=1;

    P1=c[k]; //开启交通灯

    }

    //中断0处理程序**************

    void int0(void) interrupt 0 // 通行时间设置

    {

    EA=0;

    P1=0xd8; /红灯全亮/

    for(;?

    {

    settime();
    
     if(K1==0)       /*P3^6=0设置主干道通行时间*/
    
    {  
    
          delay(40);
    
          if(K1==0)
    
    {
    
             while(!K1)
    
             {settime();}
    
     DXG++;    /*主干道通行时间加1*/
    
             if(DXG==100)
    
             DXG=0;   
    
          }
    
    }
    
    
    
     if(K0==0)        /*P3^5=0设置支干道通行时间*/
    
    {  
    
             delay(40);
    
             if(K0==0)
    
       {
    
               while(!K0)
    
               {settime();}
    
      NBG++;      /*支干道通行时间加1*/
    
               if(NBG==100)
    
               NBG=0;  
    
             }
    
    }
    
    
    
    if(K4==0)          /*P3^7=0返回*/ 
    
       {  
    
         delay(40); 
    
      if(K4==0)
    
      {
    
         while(!K4)
    
      {
    
      }
    
             k=0;P1=c[k];
    
      NB=NBG,DX=NBG+H; 
    
         display(); 
    
      EA=1;
    
    
    
            break;
    
      }                
    
       }
    
    }
    

    }

    //***************中断1处理程序

    void int1(void) interrupt 2 //紧急情况

    {

        /*东西南北红灯亮*/
    

    EA=0;

    TR0=!TR0; /停止计数/

    for(;? /主支干道显示全为0/

    {

    P1=0xd8,

    P0=a[0];

    P2=b[0];
    
    delay(20);
    
    
    
     P2=b[1];
    
    delay(20);
    
    P2=b[2];
    
    delay(20);
    
    P2=b[3];
    
    delay(20);
    
    
    
    if(K4==0)         /*返回*/
    

    {

    delay(20);

    EA=1;

    P1=c[k]; /返回紧急前状态开始计数/

    TR0=!TR0; /重启计数/

    break;

    }

    }

    }

    void time1(void) interrupt 1 /交通灯控制程序/

    {

    TH0=0x3c; /定时50ms/

    TL0=0xb0;

    cnt++;

    if(cnt>=20) /每2050ms=1s自减一*/

    {

    NB–;

    DX–;

    cnt=0;

    if(NB0||DX0)

    {

    k++;

    if(k>3) /k取0,1,2,3/

    k=0;

    switch(k)

    {

    case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;   /*主干道通行显示绿红*/
    
       case 1:NB=H;j=1;P1=c[k];break;        /*主干道黄灯闪烁*/
    
    case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;   /*支干道通行显示红绿*/
    
    case 3:DX=H;j=2;P1=c[k];break;        /*支干道黄灯闪烁*/
    

    }

    }

    }

    }

    void delay(uchar t) //延时程序延时0.1*nms

    {

    uchar i;

    do

    {

     for(i=0;i<20;i++) 
    
     ;;; 
    

    } while(t–);

    }

    void settime()

    {

    P2=b[0],P0=a[(NBG+H)%10]; /*显示主干道通行时间  */
    
       delay(20); 
    
    
    
    P2=b[1],P0=a[(NBG+H)/10]; 
    
    delay(20); 
    
    
    
    P2=b[2],P0=a[(DXG+H)%10];  /*显示支干道通行时间*/
    
    delay(20); 
    
           
    
       P2=b[3],P0=a[(DXG+H)/10]; 
    
    delay(20); 
    

    }

    void key() //键盘程序用KO K1模拟一道有车一道无车

    {

     if(K1==0)        /*主干道有车支干道无车*/
    
    {  
    
       delay(40);
    
       if(K1==0)    
    
       { 
    
          while(!K1)
    
          {  
    
            display();
    
          }
    
      k=0,P1=c[k];cnt=0;
    
          NB=NBG, DX=NBG+H;
    
         display();
    
       }
    
    }
    
    if(K0==0)         /*支干道有车主干道无车*/
    
    {  
    
       delay(40);
    
       if(K0==0)
    
       {
    
          while(!K0)
    
          {
    
           display(); 
    
          }
    
         k=2,P1=c[k];cnt=0;
    
          NB=DXG+H,DX=DXG;
    
            display(); 
    
    }
    

    }

    }

    void display() //显示程序

    {

    P2=b[0],P0=a[NB%10]; /由k的不同值进入确定显示数值/

    delay(20);

    P2=b[1],P0=a[NB/10];

    delay(20);

    P2=b[2],P0=a[DX%10];

    delay(20);

    P2=b[3],P0=a[DX/10];

    delay(20);

    }

    void main(void)

    { //主程序

    init();

    for(;?

    {

    display();

    key();

    //黄灯闪烁程序

    while(j==1) /主干道黄灯闪烁/

       {              
    
       P1=0xdc;         /*给黄灯一高电平黄灯灭*/    
    
    for(i=83;i>0;i--){display();}      /*执行for循环延时*/   
    
    P1=c[k];         /*再给黄灯一低电平黄灯亮*/
    
    for(i=83;i>0;i--){display();}
    

    }

    while(j==2)

         {              /*支干道黄灯闪烁*/
    
      
    
    P1=0xf8;
    
    for(i=83;i>0;i--){display();}
    
    P1=c[k];
    
    for(i=83;i>0;i--){display();}
    

    }

    }

    }

    展开全文
  • 这个也是我们小学期做的,还算可以吧,希望大家有用。
  • 交通灯单片机仿真原理图,很不错的程序实现的现实交通灯原理图,可以直接使用或者修改使用
  • 交通信号灯报告内不含有程序原理图时钟模块,原理图是用proteus生成
  • 8086交通灯 原理图及代码 简单但很全面
  • 基于单片机80C51 C语言制作LED模拟交通灯,包含Proteus仿真原理图及Keil C51源码。 资源来源网络,仅供学习参考,请勿用于商业用途。
  • 简易交通信号灯控制电路,它的控制器主要由控制器、秒脉冲发生器、定时器、译码显示电路及信号灯组成。通过采用数字电路对交通灯控制电路的设计,提出使交通灯控制电路用数字信号自动控制十字路口两组红、黄、绿交通灯...
  • 阿波罗——交通信号灯感知

    千次阅读 2018-07-26 15:07:36
    交通信号灯感知 本文档详细的介绍了Apollo2.0中交通信号感知模块的工作原理。 简介 交通信号灯感知模块通过使用摄像头提供精确全面的路面交通信号灯状态。 通常情况下,交通信号灯有3种状态: 红 黄 绿 然而...

    交通信号灯感知

    本文档详细的介绍了Apollo2.0中交通信号感知模块的工作原理。

    简介

    交通信号灯感知模块通过使用摄像头提供精确全面的路面交通信号灯状态。

    通常情况下,交通信号灯有3种状态:

    • 绿

    然而当信号灯不能正常工作时,它可能是黑色的或者闪烁着红灯或黄灯。有时候在摄像头的视野内找不到信号灯,从而导致无法正确检测信号灯状态。

    为了覆盖全部的情况,交通信号灯感知模块提供了5种信号灯状态输出:

    • 绿
    • 未知

    该模块的高精地图功能反复的检测车辆前方是否有信号灯出现。在给定车辆的位置后,可以通过查询高精地图获取信号灯的边界,并用边界上的4个点来表示信号灯。如果存在信号灯,则信号灯位置信息将从世界坐标系投射到图片坐标系。

    Apollo已经证明了仅仅使用一个固定视野的摄像头无法识别所有的信号灯。存在这种限制的原因是:

    • 感知范围应该大于100米
    • 信号灯的高度和路口的宽度变化范围很大

    结果是Apollo2.0使用了2个摄像头来扩大感知范围。

    • 一个远距摄像头,焦距是25毫米,被用来观察前方远距离的信号灯。远距摄像头捕获的信号灯在图片上展现的非常大而且容易被检测。但是远距摄像头的视野有限制,如果路线不够直或者车辆太过于靠近信号灯,经常无法拍摄到信号灯。

    • 一个广角摄像头。焦距是6毫米,是对远距摄像头视野不足的补充。

    该模块会根据当前信号灯的投射状态决定使用哪个摄像头。虽然只有两个摄像头,但是该模块的算法被设计的可以控制多个摄像头。

    下述图片展示了使用远距摄像头(上图)和广角摄像头(下图)检测到信号灯的图片。

    telephoto camera

    wide angle camera

    数据管道

    数据管道有两个主要的部分,会在下面章节中介绍

    • 预处理阶段
      • 信号灯投射
      • 摄像头选择
      • 图像和信号灯缓存同步
    • 处理阶段
      • 调整—提供精确的信号灯边界盒
      • 识别—提供每个边界盒的颜色
      • 修正—根据时间顺序关系修正颜色

    预处理阶段

    没有必要在每一帧的图像中去检测信号灯。信号灯的变化频率是很低的而且计算机的资源也有限。通常,从不同摄像头输入的图像信息会几乎同时的到达,但是只有一个会进入管道的处理阶段。因此图像的遴选和匹配是很必要的。

    输入输出

    本章节介绍了预处理阶段的输入输出数据。输入数据可以通过订阅Apollo相关模块数据来获得,或者直接读取本地的存储文件。输出数据被传输到下一层的处理阶段。

    输入数据

    • 可以通过订阅以下topic来获取不同摄像头的图像数据:

      • /apollo/sensor/camera/traffic/image_long
      • /apollo/sensor/camera/traffic/image_short
    • 定位信息,通过查询以下topic获得:

      • /tf
    • 高精地图

    • 校准结果

    输出数据

    • 被选择的摄像头输出的的图像信息
    • 从世界坐标系投射到图像坐标系的信号灯边界盒

    摄像头选择

    使用一个唯一的ID和其边界上的4个点来表示信号灯,每个点都是世界坐标系中的3维坐标点。

    下例展示了一个典型的信号灯记录信息signal info。给出车辆位置后,4个边界点可以通过查询高精地图获得。

    signal info:
    id {
      id: "xxx"
    }
    boundary {
      point { x: ...  y: ...  z: ...  }
      point { x: ...  y: ...  z: ...  }
      point { x: ...  y: ...  z: ...  }
      point { x: ...  y: ...  z: ...  }
    }

    3维世界坐标系中的边界点随后被投射到每个摄像头图像的2维坐标系。对每个信号灯而言,远距摄像头图像上展示的4个投射点区域更大,这比广角摄像头更容易检测信号灯。最后会选择具有最长的焦距且能够看到所有信号灯的摄像头图片作为输出图像。投射到该图像上的信号边界盒将作为输出的边界盒。

    被选择的摄像头的ID和时间戳缓存在队列中:

    struct ImageLights {
     CarPose pose;
     CameraId camera_id;
     double timestamp;
     size_t num_signal;
     ... other ...
    };

    至此,我们需要的所有信息包括定位信息、校准结果和高精地图。因为投射不依赖于图像的内容,所以选择可以在任何时间完成。在图像信息到达时进行选择仅仅是为了简单。而且,并不是图像信息一到达就要进行选择,通常会设置选择的时间间隔。

    图像同步

    图像信息包含了摄像头ID和时间戳。摄像头ID和时间戳的组合用来找到可能存在的缓存信息。如果能在缓存区找到和该图像的摄像头ID一样且时间戳相差很小的缓存信息,则该图像会被传输到处理阶段。所有不合适的缓存信息会被丢弃。

    处理阶段

    该阶段分为3个步骤,每个步骤重点执行一个任务:

    • 调整 — 在ROI中检测信号灯边界盒
    • 识别 — 鉴别边界盒的颜色
    • 修正 — 根据信号灯颜色的时间顺序关系修正颜色

    输入输出

    本章节介绍处理阶段的输入和输出数据。输入数据从预处理阶段获得,输出数据作为鉴别信号灯的结果。

    输入数据

    • 被选择的摄像头图像信息
    • 一组边界盒信息

    输出数据

    • 一组带有颜色标签的边界盒信息

    调整

    被定位信息、校准信息和高精地图信息影响的投射点 不是完全可靠的 。通过投射的信号灯位置计算的一个大的兴趣区域(Region of Interest ROI)被用来确定信号灯精确的边界盒。

    在下述图片中,蓝色的长方形表示被投射的信号灯的边界盒,实际上和信号灯的准确位置有一定的偏差。大的黄色长方形是ROI。

    example

    信号灯检测是一个常规的卷积神经网络检测任务,它接收带有ROI信息的图像作为输入数据,顺序输出边界盒。输出结果中的信号灯数量可能多于输入数据。

    Apollo会根据输入信号灯的位置、形状及检测的评分选择合适的信号灯。如果CNN在ROI内找不到任何的信号灯,则输入数据中的信号灯将被标记为未知,且跳过剩下的两个步骤。

    识别

    信号灯识别是一个常规的卷积神经网络鉴别任务,它接收带有ROI信息的图像和一组边界盒信息作为输入数据。输出数据是一个$4\times n$ vector, 表示每个边界盒是黑色、红色、黄色和绿色的概率。 当且仅当概率足够大时,有最大概率的类别会被识别为信号灯的状态。否则信号灯状态被设置为未知,表示状态未确定。

    修正

    因为信号灯可能会闪烁或者被遮挡,并且识别阶段也 并不是 完美的,输出的信号灯状态可能不是真正的状态。修正信号灯状态是很有必要的。

    如果修正器接收到一个确定的信号灯状态例如红色或者绿色,则修正器保存该状态并直接输出。如果接收到黑色或者未知,修正器会检测状态保存列表。如果信号灯状态已经确定持续了一段时间,那么将保存的状态输出。否则将黑色或者未知输出。

    因为时间顺序关系的存在,黄色只会在绿色之后红色之前出现,所以为了安全的考虑,在绿色出现之前任何红色之后的黄色都会被设置为红色。

    展开全文
  • 可编程控制器(PLC)以微处理器为核心,普遍采用依据继电接触器控制系统电气原理图编制的梯形图语言进行程序设计,编程容易,功能扩展方便,修改灵活,而且结构简单,抗干扰能力强。西门子可编程控制器指令丰富,可以接...
  • 本题模拟场景为十字路口交通信号灯及路口公共时钟,通过Proteus8仿真平台进行模拟。南北路口方向和东西路口方向均设有红、黄、绿三种状态灯以及数字倒计时显示,同时设有路口公共时钟模拟显示当前时间,提供时钟控制...

    一、方案设计

    1. 设计内容

    本题模拟场景为十字路口交通信号灯及路口公共时钟,通过Proteus8仿真平台进行模拟。南北路口方向和东西路口方向均设有红、黄、绿三种状态灯以及数字倒计时显示,同时设有路口公共时钟模拟显示当前时间,提供时钟控制开关。为了演示方便,设定交通路口信号灯红灯和绿灯的状态为10s。程序开始时,南北路口方向绿灯和东西路口方向红灯持续亮10s(第一阶段),过后南北路口方向黄灯交替闪烁3s和东西路口方向红灯亮(第二阶段),接着南北路口方向红灯和东西路口方向绿灯持续亮10s(第三阶段),最后南北路口方向红灯亮和东西路口方向黄灯交替闪烁3s(第四阶段),不断循环重复以上四个阶段。

    2. 设计思路

    整个系统主要由控制模块、地址译码模块、显示模块三个部分组成。首先以8086微处理器作为CPU,8253做定时器进行计时,8259提供中断服务程序来处理完成交通信号灯计算显示状态、10s倒计时数字显示刷新、公共时钟逻辑单位换算。其中:
    (1)显示模块通过8255并行接口芯片和74LS373锁存器,其中A口和B口来共同控制八位共阴极数码管来模拟显示路口公共时钟,C口用于控制模拟南北、东西四个路口的红灯、黄灯、绿灯等六个LED灯显示状态。74LS373锁存器控制显示交通信号灯10s倒计时的数字(0–9)输出。
    (2)控制模块采用8253定时计数器来提供定时启动8259中断服务功能。8253的clk时钟信号频率设定为1MHz,使用8253的计数器0和计数器串联实现间隔1s产生一次中断,8253输出信号OUT1接通8259的IRQ1输入信号,进而转到中断服务处理程序。时钟控制开关则是在8253GATE端和GND接地端两端通过一个开关来实现暂停计时功能,注意启动程序计时需要断开时钟控制开关。
    (3)地址译码模块主要通过3-8译码器(74LS138)来进行8253、8255、8259、接口芯片、74LS373锁存器等地址译码。

    二、系统实现

    1. 原理图设计

    系统使用74LS138进行端口译码,其中 、A0和 共同选通接74LS373的LE, 接8253A的 , 接8255A的 , 接8259的IR3。8253的CLK信号输入频率为1MHz,计数器0和计数器1进行串联,输出信号OUT1接IR1,GATE1通过时钟控制开关和接地端相连,8086CPU工作主频设定为5MHz。具体各部分的连接如图所示:
    在这里插入图片描述

    图1 显示模块图
    在这里插入图片描述

    图2 控制及译码模块图

    2. 功能实现

    系统在源代码的编写过程中,对常用的I/0端口寻址操作、以及接口芯片的初始化操作编写宏指令,进行模块化封装,简化易读。其中OUT_PUT用于端口输出,SET_8253用于8253初始化,SET_VEC用于中断向量的设置,SET_8259用于8259的初始化,INT_PRO用于时间的单位换算,详见2.3的源代码。此外,对8259、8253、8255等芯片的选通地址进行伪指令定义,比如TCON0表示8253计数器0的端口地址等等,还包括公共时钟显示延时子程序DELAY和中断服务程序IRQ1FUN。

    2.1系统程序设计

    第一步完成8255、8253、8259接口芯片的初始化,接着开中断,进入一个显示等待中断的循环。
    初始化过程中,调用预先设定好的宏来设置中断向量,宏调用如下:SET_VEC 91H,IRQ1FU。其中IRQ1FUN为中断服务程序,中断向量码设置为91H,接入8259的IR1引脚。需设置ICW1,ICW2和ICW4,使用单片8259,采用边沿触发,单片,需要ICW4,采用自动结束方式,ICW1=13H,ICW2=91H,ICW4=03H,同样初始化8259采用宏调用完成。即:OUT_PUT PORT8259,13H;OUT_PUT PORT8259+2,91H; OUT_PUT PORT8259+2,03H。
    完成中断初始化之后,完成8255初始化,使用A口,B口和C口,方式0,输出,故命令内容为:80H,向其控制口写入即可,控制口地址为IOCON。调用宏,OUT_PUT IOCON,80H。
    8253的初始化要设置计数器0,在OUT1自动发出周期为1S的方波,接8259的IR1,即每隔1s产生一次中断。初始化8253控制寄存器及计数器调用的宏如下:
    SET_8253 TCONTR,00110111B,TCON0,1000H ;TCON0是计数器0的地址
    SET_8253 TCONTR,01110111B,TCON1,1000H ;TCON1是计数器1的地址
    在这里插入图片描述

    图3 系统程序流程图

    完整的代码参见 2.3 部分。

    2.2 各模块功能设计

    2.2.1 显示模块设计

    显示模块由六个LED灯、一个共阴极八数码管、两个7SEG-DIGITAL七段数码管组成。

    共阴极八数码管模拟公共时钟(包含时分秒),由8255A口和B口共同控制,假定本程序模拟交通路口场景启动初始时间为14时30分,通过中断服务程序来更新公共时钟显示数字。查阅资料可知,以下是其在数据段定义的显示0—9数字的对应编码。
    LIGHT DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

    接着采用8255C口控制模拟交通灯的东西南北方向LED灯,AD数据总线通过74LS373锁存器控制交通灯10s倒计时显示7SEG-DIGITAL数码管。程序运行时通过8253间隔1s发出时钟信号,中断服务程序响应后累计当前时间值除以32(一个周期,0s-9s为状态1,10s-15s为状态2,16s-25s为状态3,26s-31s为状态4)求余,余数存在AH中,作为交通灯状态标记位。此做法摒弃了传统单一8255芯片实验利用人为设定的长短延时来固定刷新显示时间,而是结合8253的计时功能进行刷新,这样更加精准,减少设定时长不合理导致时间上的误差。

    计算获得交通灯状态标记位后,进行对应状态内容的显示。状态一:南北路口绿灯亮10s,东西路口红灯亮10s。状态二:接着进行3s的南北路口黄灯交替闪烁亮灭,东西路口红灯亮。状态三:南北路口红灯亮10s,东西路口绿灯亮10s。
    状态四:接着进行3s的南北路口红灯亮,东西路口黄灯交替闪烁亮灭。通过对当前累计时间进行取模求余,则可以实现以上四个状态的循环显示。

    除了LED灯规律循环显示以外,同时也在时钟信号达到时刻更新显示倒计时数码管显示数字,通过数据总线和74LS373来输出显示。下面是倒计时显示数字对应的7SEG-DIGITAL数码管编码,对应(9s-0s,3s-0s,9s-0s,3s-0s)的显示规律。

    TABLE DB 0FFH,0C0H,0FFH,0F9H,0FFH,0A4H,0C0H,0F9H,0A4H,0B0H,99H,92H,
    82H,0F8H,80H,90H

    而公共时钟数字显示部分也是类似的方法,在时钟信号达到时刻进行时分秒的换算,比如模10求余获取低位和高位数字进行处理进位等操作,接着通过8255A口和B口进行输出显示。

    显示模块流程图如下所示:
    在这里插入图片描述

    图4 显示模块流程图

    2.2.2 中断服务程序设计

    中断服务程序主要对当前累计时间进行运算处理,进而计算当前交通信号灯对应状态编码AH和由SI控制的倒计时显示数字对应数码管编码和DI控制的公共时钟对应显示数码管编码。

    首先判断当前计数值并自增,若公共时钟计数已经达到最大值,则下一计数单元递增(时分秒换算),接着模10取余获取高位、地位,转化成对应的数字编码,通过DI获取在数据段定义好的数码管显示编码LIGHT。

    倒计时显示数字(0–9)则是先DEC SI,判断SI是否位于在数据段定义好的倒计时显示数编码TABLE首地址,若是则置SI于显示数编码末地址,接着通过数据总线输出给373锁存器再进行显示。
    交通状态标志位则是通过AX(累计时间)模32求余,接着判断余数AH。如果AH大于等于26,则说明处于状态4,然后进行TEST AH,01H。IOC为8255 C端口地址,调用宏定义,若AH为奇数则OUT_PUT IOC,10000000B(南北红灯亮东西黄灯灭),偶数则OUT_PUT IOC,10000010B(南北红灯亮东西黄灯亮)。接着如果AH大于等于16,则说明处于状态3,然后进行OUT_PUT IOC,10000001B(南北红灯亮东西绿灯亮)。接着如果AH大于等于10,则说明处于状态2,然后进行TEST AH,01H。若AH为奇数则OUT_PUT IOC,00000100B(南北红灯亮东西黄灯灭),偶数则OUT_PUT IOC,01000100B(南北红灯亮东西黄灯亮)。最后则位于状态1,进行OUT_PUT IOC,00100100B(南北绿灯亮东西红灯亮)。

    中断服务程序流程图如下所示:
    在这里插入图片描述

    图5 中断服务程序流程图

    2.3 程序源代码

    ;====================================================================
    ; author:GUET_diadestiny
    ; 计时十字路口交通信号灯及公共时钟
    ;====================================================================
    OUT_PUT MACRO  PORT,DATA  
        MOV  DX, PORT
        MOV  AL, DATA
        OUT  DX, AL
    ENDM
    
    ;8253初始化,CONTROLER为命令口地址,CMD为命令内容,TIMEPORT为计数器N的端口,COUNT为计数初值
    SET_8253 MACRO CONTROLER,CMD,TIMEPORT,COUNT
          OUT_PUT CONTROLER,CMD
          MOV  DX, TIMEPORT
          MOV  AX, COUNT
          OUT  DX, AL
          MOV AL,AH
          OUT DX,AL
    ENDM
    
    ;中断向量设置,VECTOR为中断向量,FUNCNAME为中断子程序名
    SET_VEC MACRO VECTOR,FUNCNAME
        PUSH  DS
        MOV AX,0
        MOV DS,AX
        MOV DI,VECTOR*4
        MOV AX,OFFSET FUNCNAME
        MOV [DI],AX
        MOV AX,SEG FUNCNAME
        MOV [DI+2],AX
        POP DS 
    ENDM
    
    ; INI_A为偶数口地址,ICW1,ICW2,ICW4为对于要写入的命令,适合单片8259初始化
    SET_8259  MACRO  INI_A,ICW1,ICW2,ICW4
        OUT_PUT INI_A,ICW1 
        OUT_PUT INI_A+2,ICW2 
        OUT_PUT INI_A+2,ICW4
    ENDM 
    
    ;NOW用于表示当前计数单元,MAX用于当前计时最大值,NEXT表示下一计数单元,STORAGE为转换的LED编码存储单元
    INT_PRO  MACRO  NOW,MAX,NEXT,STORAGE
        LOCAL JUST
        MOV AX,0    
        MOV AL,NOW
        CMP AL,MAX              ;比较计数是否到最大值
        JNE JUST                ;不是则跳转
        INC NEXT                 ;是则下一计数单元加一
        MOV NOW,0
    JUST:
        MOV BL,10
        DIV BL
        MOV BL,AL
        MOV AL,LIGHT[BX]           ;转换高位
        MOV STORAGE,AL
        MOV BL,AH
        MOV AL,LIGHT[BX]           ;转换低位
        MOV STORAGE+1,AL
    ENDM
    
    
    DATA SEGMENT
    
         TCON0 EQU 0090H ;8253计数器0地址
         TCON1 EQU 0092H
         TCON2 EQU 0094H
         TCONTR EQU 0096H
         OUT373 EQU 0080H
         
         IOA   EQU 00A0H  ;8255A端口地址
         IOB   EQU 00A2H
         IOC   EQU 00A4H
         IOCON EQU 00A6H
         
         PORT8259 EQU 00B0H  ;8259端口地址
         
         TABLE DB 0FFH,0C0H,0FFH,0F9H,0FFH,0A4H,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ; 交通灯倒计时数码管顺序显示数字对应编码
         TABLE_END = $  ;下文计算偏移
         
         LIGHT DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH   ;共阴极八数码管0-9对应编码,公共时钟
         
         NOW_FLAG DW 0  ;当前累计数
         
         N_HOUR  DB  14                      ;当前时时刻(假定当前时间是14点30分)
         N_MIN   DB  30                      ;当前分时刻
         N_SEC   DB  0                       ;当前秒时刻
         HOUR    DB  0,0,40H                 ;用于存放LED时显示编码
         MINTU   DB  0,0,40H			;用于存放LED分显示编码
         SEC     DB  0,0			;用于存放LED秒显示编码
         TEMP    DB  0                       ;临时保存编码
        
    DATA ENDS
    
    STACK SEGMENT 
          DW 2048 DUP(0)
    STACK ENDS
    
    CODE SEGMENT
       ASSUME CS:CODE,DS:DATA,SS:STACK
    START:
       MOV AX,DATA ;设置数据段
       MOV DS,AX
       
       SET_VEC 91H,IRQ1FUN;设置中断向量IRQ1
       SET_8259 PORT8259,13H,91H,03H   ;初始化8259,设定ICW2=90H
       OUT_PUT IOCON,80H  ;初始化8255
       SET_8253 TCONTR,00110111B,TCON0,1000H ;初始化8253
       SET_8253 TCONTR,01110111B,TCON1,1000H ;初始化8253
       
       OUT_PUT PORT8259+2,00H ;OCW1,开放中断输入
       LEA SI,TABLE_END ;装载地址至SI
       STI   ;开中断
       LEA DI,LIGHT ;装载地址至DI
    ENDLESS:
        MOV CX,7F08H               ;控制输出共阴极数码管
        LEA DI,HOUR			;装载存储编码
    SHOW:    
        OUT_PUT  IOA,[DI]
        OUT_PUT  IOB,CH            
        CALL DELAY
        OUT_PUT  IOB,0FFH    
        INC  DI
        ROR  CH,1
        DEC  CL
    JNZ  SHOW 
        
    JMP ENDLESS
       
    IRQ1FUN PROC NEAR
       INC N_SEC
       INT_PRO N_SEC,60,N_MIN,SEC      ;秒
       INT_PRO N_MIN,60,N_HOUR,MINTU   ;分
       INT_PRO N_HOUR,24,TEMP,HOUR     ;小时
        
       DEC SI ;倒计时逆序
       CMP SI,OFFSET TABLE-1
       JNZ THEN1
       LEA SI,TABLE_END-1
    THEN1: MOV AL,[SI]
           MOV DX,OUT373
           OUT DX,AL ;373输出到倒计时数码管
           
           MOV AX,NOW_FLAG
           MOV BL,20H
           DIV BL ;经过推算,32个红绿灯状态为设定的一个周期
           INC NOW_FLAG
           CMP AH,26 ;将余数AH进行比较,得到状态编码
           JB NN1
           TEST AH,01H
           JZ FOUR_ONE
           OUT_PUT IOC,10000000B ;红绿灯状态4.2
           IRET
    FOUR_ONE: OUT_PUT IOC,10000010B ;红绿灯状态4.1    
    	  IRET
    NN1:   CMP AH,16
           JB NN2
           OUT_PUT IOC,10000001B ;红绿灯状态3
           IRET
    NN2:   CMP AH,10
           JB NN3
           TEST AH,01H
           JZ TWO_ONE
           OUT_PUT IOC,00000100B ;红绿灯状态2.2
           IRET
    TWO_ONE: OUT_PUT IOC,01000100B ;红绿灯状态2.1
             IRET
    NN3:   OUT_PUT IOC,00100100B ;红绿灯状态1
           IRET
    IRQ1FUN ENDP
    
    ;共阴极数码管所需延时子程序 
    DELAY PROC NEAR
        PUSH CX
        PUSH DI
        MOV CX,30H       
    Y1: 
        LOOP Y1
        POP DI
        POP CX    
        RET
    DELAY ENDP
             
    CODE ENDS
          END START
    

    若需要程序源代码以及电路图的pdsprj文件,可以私信或者评论留下邮箱~~
    (觉得有帮助的可以点个赞哈)

    三、仿真结果分析及总结

    仿真结果如图所示:
    断开时钟控制开关,假定场景当前时间为14点30分,南北方向可通行,东西方向禁止通行(状态一)进行10s倒计时。
    在这里插入图片描述
    图6 交通信号灯状态1

    10s倒计时过后,南北方向进行3s倒计时的黄灯闪烁交替(状态二)。
    在这里插入图片描述
    图7 交通信号灯状态2

    3s倒计时过后,东西方向可通行,南北方向禁止通行(状态三)进行10s倒计时。
    在这里插入图片描述
    图8 交通信号灯状态3

    10s倒计时过后,东西方向进行3s倒计时的黄灯闪烁交替(状态四)。
    在这里插入图片描述
    图9 交通信号灯状态4

    同时在程序运行的过程中,可以闭合时钟控制开关,暂停该场景下公共时钟计时功能,再次断开时钟控制开关即可继续计时。
    在这里插入图片描述
    图10 闭合时钟控制开关

    经过测试,系统实现了计时十字路口交通信号灯及公共时钟的功能。在仿真测试的过程中,LED模拟灯和倒计时数码管和公共时钟的运行计时保持同步,并且没有闪烁,能正确模拟各个状态的交通信号灯循环工作状态。同时,通过闭合设定的时钟控制开关可以实现控制暂停计时功能,断开则继续计时。

    通过借助protues仿真平台动手实践完成本次大作业,我加深了对微机原理和接口技术这两大模块的理解,熟悉运用汇编语言与接口进行交互,利用接口芯片(中断控制器8259,定时计数器8253,并行接口8255等),实现了模拟特定场景的需求功能。经过思考,本次大作业系统还存在一些可以改善和优化的地方,比如增加LED跑马灯模拟人行道以及来往的车辆,或者利用两个七段数码管模拟真实十字交通路口场景下60s的红绿灯倒计时以及复位时钟等功能,还可以进一步优化源代码。

    四、参考文献

    1. 顾晖,陈越,梁惺彦. 微机原理与接口技术–基于 8086 和 Proteus 仿真(第 2 版)[M]. 北
      京:电子工业出版社,2015.
    2. 黄冰, 覃伟年, 黄知超. 微机原理及应用(第三版)[M].重庆:重庆大学出版社,2017.
    3. 漆强, 刘爽. 利用虚拟仿真技术改进显示器件驱动实验[J]. 实验技术与管理,
      2017(02):12-15.
      4.黄海萍, 高海英,姚荣彬. 微机原理与接口技术实验教程[M].北京:国防工业出版社, 2013.
    展开全文
  • 交通信号灯是交通信号中的重要组成部分,是道路交通的基本语言。交通信号灯由红灯(表示禁止通行)、绿灯(表示允许通行)、黄灯(表示警示)组成。分为:机动车信号灯、非机动车信号灯、人行横道信号灯、车道信号灯...

    交通信号灯是交通信号中的重要组成部分,是道路交通的基本语言。交通信号灯由红灯(表示禁止通行)、绿灯(表示允许通行)、黄灯(表示警示)组成。分为:机动车信号灯、非机动车信号灯、人行横道信号灯、车道信号灯、方向指示信号灯、闪光警告信号灯、道路与铁路平面交叉道口信号灯。
    道路交通信号灯是交通安全产品中的一个类别,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具。适用于十字、丁字等交叉路口,由道路交通信号控制机控制,指导车辆和行人安全有序地通行。
    交通信号灯的种类有:机动车道信号灯,人行横道信号灯,非机动车道信号灯,方向指示信号灯,移动式交通信号灯,太阳能闪光警告信号灯,收费站天棚信号灯.
    交通信号灯是交通信号指挥中的重要组成部分,是道路交通的基本语言。交通信号灯由红灯(表示禁止通行)、绿灯(表示允许通行)、黄灯(表示警示)组成。分为:机动车信号灯、非机动车信号灯、人行横道信号灯、车道信号灯、方向指示信号灯、闪光警告信号灯、道路与铁路平面交叉道口信号灯。广泛用于公路交叉路口,弯道、桥梁等存有安全隐患的危险路段,指挥司机或行人交通,促进交通畅通,避免交通事故和意外事故发生。

    实验用到的元件 
    红‘绿’黄 LED各一个 ,
    3个470欧姆的电阻,
    1个10K欧姆电阻,
    1个轻触,
    6根杜邦线,
    一块实验板。

    原理图

    3个LED自由闪烁 当 按住轻触开关 停止闪烁。
    代码:

    int redPin = 2;
    int yellowPin = 3;
    int greenPin = 4;
    int buttonPin = 5;
    
    int state = 0;
    
    void setup()                    
    {
      pinMode(redPin, OUTPUT);    
      pinMode(yellowPin, OUTPUT);    
      pinMode(greenPin, OUTPUT);     
      pinMode(buttonPin, INPUT); 
    }
    
    void loop()                    
    {
      if (digitalRead(buttonPin))
      {
        if (state == 0)
        {
          setLights(HIGH, LOW, LOW);
          state = 1;
        }
        else if (state == 1)
        {
          setLights(HIGH, HIGH, LOW);
          state = 2;
        }
        else if (state == 2)
        {
          setLights(LOW, LOW, HIGH);
          state = 3;
        }
        else if (state == 3)
        {
          setLights(LOW, HIGH, LOW);
          state = 0;
        }
        delay(1000);
      }
    }
    
    void setLights(int red, int yellow, int green)
    {
      digitalWrite(redPin, red);
      digitalWrite(yellowPin, yellow);
      digitalWrite(greenPin, green);
    }  
      
    

     

    展开全文
  • 用altium10 制作,的 就是数字电路逻辑设计的 一些原理图
  • 实验五_PLC实现的交通信号灯控制
  • 里面包好开题报告,任务书,制作详解,芯片资料,元件清单,论文,答辩问题,交通灯程序设计,原理图,PCB图,所需的任何软件都有。
  • 微机原理课程设计-模拟十字路口交通信号灯

    千次阅读 多人点赞 2019-04-18 15:37:18
    一、设计任务描述 1.1设计目的 通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深... 控制LED,按照十字路口红绿灯的原理亮灭显示: (1) 东西方向车辆放行x秒...
  • 2.2 十字路口交通信号灯控制系统电路………………………………………10 2.3 十字路口交通信号灯PLC硬件控制电路设计 …………………………… 10 2.4 十字路口交通信号灯PLC控制程序设计………………………………...
  • 【摘要】介绍了一种基于电子工作平台的软件(Multisim)设计城市交通信号灯控制系统的方法,先从理论上进行分析、 设计电路,再通过Multisim 测试性能,以达到实际应用的需要。 【关键字】Multisim;交通信号灯;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,779
精华内容 1,111
关键字:

交通信号灯原理图