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

发布者:平稳心绪最新更新时间: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  状态倒计时 引用地址:课程设计题七:交通灯控制器

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

推荐阅读最新更新时间:2024-11-01 14:52

课程设计题十三:乒乓球比赛
要求: (1) 乒乓游戏机甲、乙双方各有两只开关,分别为发球开关和击球开关。 (2) 乒乓球的移动用16或12只LED发光二极管模拟运行,移动的速度可以调节。 (3) 球过网到一定的位置方可,接提球前击球或出界击球均判为失分。 (4) 比赛用21分为一局,任何一方先记满21分就获胜,比赛一局就结束。当记分牌清零后,又可开始新的一局比赛。 一、Protues仿真图: 二、程序源码: 因为注释非常的全,这里就不再进行讲解了。 /******************************************************************************* ============
[单片机]
课程设计题十三:乒乓球比赛
课程设计题二:7人多数表决器
要求: 1、7人多数表决逻辑:多数通过。 2、在主持人控制下,10秒内表决有效。 3、采用数码管显示表决10秒倒计时。 4、表决结束后用发光二极管及数码管显示表决结果,数码管显示结果:通过、不通过,同意人数。 5、设主持人控制键、复位键。 控制键:启动表决 复位键:系统复位 6、表决开始、结束采用声音提示。 一、Protues仿真图: 二、程序源码: 因为注释非常的全,这里就不再进行讲解了。 /******************************************************************************* ======
[单片机]
课程设计题二:7人多数表决器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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