课程设计题七:交通灯控制器

2019-09-29来源: eefocus关键字:交通灯控制器  STC89C51  状态倒计时

要求:


1、红灯和绿灯相互转换时经过黄灯,黄灯闪烁三次(6秒);


2、主干道方向通行30秒,辅干道方向通行20秒,单独左转信号15秒;先直行信号,后左转信号。


3、设手动、自动、特殊情况三种方式。


4、特殊情况时所有路口红灯都亮,给120、110等通行。


5、自动时显示各种状态倒计时。


一、Protues仿真图:

二、程序源码:

因为注释非常的全,这里就不再进行讲解了。

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

================================================================================

【平    台】STC89C51_sumjess平台

【编    写】sumjess

【E-mail  】1371129880@qq.com

【软件版本】V2.0

【最后更新】2019年06月10日

【相关信息参考下列地址】

【网    站】

           https://blog.csdn.net/qq_38351824

           http://www.51hei.com/bbs/mcu-2-1.html

---------------------------------------------------------------------------------

【dev.env.】MDK4.02及以上版本

【Target  】STC89C51

第一次修订:2019/05/09

第二次修订:2019/05/21

第三次修订:2019/06/10

【problem 】

    (1)库内补充的不全面;

    (2)库内解释部分不全面;

    (3)库内还存在一定的bug;

【direction】

      下一步的目标就是把库继续集成!

【explain 】

      为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!

【warning】

      目前程序中暂无错误 !   

---------------------------------------------------------------------------------

没有完美的代码,只有不断的奉献,大家一起努力;

赠人玫瑰手留余香,欢迎大家反馈bug!

================================================================================

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

 

#include

#include

#define uchar     unsigned char

#define uint      unsigned int

 

uchar h;

uint r=0;

uint s;

uchar flag=1;

uchar code  dis[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff,};

                 // 0     1    2 3 4   5    6 7 8   9    -

sbit key = P3^5;

 

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

{

   uint i,j;

    for(i=0;i

  for(j=0;j<100;j++);

}

 

void t0(void) interrupt 0 using 1

{

  delay(2);

   if(INT0==0)

    {

      r++;

  if(r==2)

   {

  r=0;

   }

  r%=2;

  if(r==0)

   {

    P0=0xeb;

        P1=0x00;

        P2=0xff;

   }while(1)

    {

  if(INT0==0|INT1==0|T0==0)

  {

  delay(2);

  if(INT0==0|INT1==0|T0==0)

  break;

  }

   if(key==0) {flag=0;break;}

    }   

    }

}

 

void t1(void) interrupt 2 using 1

{

  delay(2);

   if(INT1==0)

    {

  r++;

  if(r==2)

   {

  r=0;

   }

  r%=2;

  if(r==0)

   {

    P0=0xdd;

        P1=0x00;

        P2=0xff;

   }while(1)

    {

  if(INT1==0|INT0==0|T0==0)

  {

   delay(2);

   if(INT1==0|INT0==0|T0==0)

  break;

  }

   if(key==0) {flag=0;break;}

    }

    }

}

 

void t2(void) interrupt 1 using 1

{

  TH0=0xff;

  TL0=0xff;

    delay(2);

     if(T0==0)

     {

    P0=0xdb;

        P1=0x00;

        P2=0xff;

   }

   while(1)

    {

  if(INT0==0|INT1==0)

  {  

    delay(2);

if(INT0==0|INT1==0)

  break;

  }

  if(key==0) {flag=0;break;}

    }

}

 

 

 

void main(void)

{

  TMOD=0x06;

  TH0=0xff;

  TL0=0xff;

  TR0=1;

  EA=1;

  EX0=1;

  EX1=1;

  ET0=1;

   

 while(1)

{

flag=1;

  if(flag==1){

     P0=0xeb;

     for(h=28;h>0;h--)

     {

       for(s=248;s>0;s--)

       {

    if(flag==0) break;

        P1=0x00;

        P2=0xff;

        P1=0x01;

        P2=dis[h/10];

        delay(1);

P1=0x00;

        P2=0xff;

        P1=0x02;

        P2=dis[h%10];

delay(1);

P1=0x00;

        P2=0xff;

P1=0x04;

        P2=dis[(h+2)/10];

delay(1);

P1=0x00;

        P2=0xff;

P1=0x08;

        P2=dis[(h+2)%10];

        delay(1);

       }

     }

if(flag==0) break;

    delay(248);

 

    P0=0xf3;

     for(h=3;h>0;h--)

     {

    if(flag==0) break;

        delay(392);

         P0=0xf3;

         delay(1);

        P1=0x00;

        P2=0xff;

        P1=0xaa;

        P2=dis[(h-1)%10];

         delay(600);

        P0=0xfb;

     }

   if(flag==0) break;

    delay(248);

     

    P0=0xdd;

     for(h=38;h>0;h--)

     {

   if(flag==0) break;

       for(s=248;s>0;s--)

       {

    if(flag==0) break;

P1=0x00;

        P2=0xff;

        P1=0x01;

        P2=dis[(h+2)/10];

delay(1);

P1=0x00;

        P2=0xff;

        P1=0x02;

        P2=dis[(h+2)%10];

delay(1);

        P1=0x00;

        P2=0xff;

        P1=0x04;

        P2=dis[h/10];

         delay(1);

        P1=0x00;

        P2=0xff;

        P1=0x08;

        P2=dis[h%10];

         delay(1);

       }

     }

   if(flag==0) break;

    delay(248); 

 

    P0=0xde;

     for(h=3;h>0;h--)

     {

    if(flag==0) break;

        delay(392);

        P0=0xde;

         delay(1);

        P1=0x00;

        P2=0xff;

        P1=0xaa;

        P2=dis[(h-1)%10];

        delay(600);

        P0=0xdf;

      }

if(flag==0) break;

delay(248);

    } 

   } 

}

关键字:交通灯控制器  STC89C51  状态倒计时 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476085.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:课程设计题八:篮球比赛计分器
下一篇:课程设计题五:汽车尾灯控制器设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于VHDL的交通灯控制器设计
  应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。   1 系统功能与要求   交通灯控制器控制两个主干道交叉路口的交通,路口车辆多,直行信号、左转弯信号分开显示,a,b两个主干道的通行时间相等,其中指示直行的绿灯亮30 s,指示左转弯的绿灯亮12 s,绿灯变至红灯时,黄灯亮3 s,以便于车辆能停在停车线内,红灯信号的最后3 s相应的黄灯也同时亮,以便提示驾驶人员准备起步。在两个主干道路口都配备传感器用来检测有无车辆通行。当两个主干道都有车辆时,自动处于主干道a绿灯,主干道b红灯的状态,然后轮流切换通行
发表于 2012-05-29
采用Multisim10的十字路口交通灯控制器系统仿真设计
Multisim 10对十字路口交通灯控制器各个单元电路和整体电路的设计和仿真,只要点击鼠标就能方便、快捷地搭建电路,并且修改电路方便。在电路设计仿真完成之后再构建实际电路,从而降低了成本,大大提高了教学和专业设计的效率。
发表于 2012-04-07
基于VHDL语言的交通灯控制器设计及仿真结果
  应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。   1 系统功能与要求   交通灯控制器控制两个主干道交叉路口的交通,路口车辆多,直行信号、左转弯信号分开显示,a,b两个主干道的通行时间相等,其中指示直行的绿灯亮30 s,指示左转弯的绿灯亮12 s,绿灯变至红灯时,黄灯亮3 s,以便于车辆能停在停车线内,红灯信号的最后3 s相应的黄灯也同时亮,以便提示驾驶人员准备起步。在两个主干道路口都配备传感器用来检测有无车辆通行。当两个主干道都有车辆时,自动处于主干道a绿灯,主干道b红灯的状态,然后轮流切换通行
发表于 2010-06-30
基于VHDL语言的交通灯控制器设计及仿真结果
GY521 mpu-6050调试经验与教训
源程序如下://****************************************// Update to MPU6050 by shinetop// MCU: STC89C52// 2012.3.1// 功能: 显示加速度计和陀螺仪的10位原始数据//****************************************// GY-52 MPU3050 IIC测试程序// 使用单片机STC89C51 // 晶振:11.0592M// 显示:LCD1602// 编译环境 Keil uVision2// 参考宏晶网站24c04通信程序// 时间:2011年9月1日
发表于 2019-11-14
GY521 mpu-6050调试经验与教训
STC12C60S2单片机双485通讯开发双485通讯控制程序
*********************************************************************/#include "STC12C5A60S2.h"  //库文件#define uchar unsigned char//宏定义无符号字符型#define uint unsigned int  //宏定义无符号整型/********************************************************************                            初始
发表于 2019-11-13
STC12C60S2单片机双485通讯开发双485通讯控制程序
STC12C5A60S2利用PCA时钟溢出做的PWM信号
输出 频率可调 -------------------------- -----------*//* --- STC12C5Axx                                            -------*//* --- 对于定时器选择的时候,应该选择16位
发表于 2019-11-12
STC12C5A60S2利用PCA时钟溢出做的PWM信号
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved