历史上的今天
返回首页

历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2019年09月29日 | 课程设计题七:交通灯控制器

2019-09-29 来源:eefocus

要求:


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

    } 

   } 

}

推荐阅读

史海拾趣

Cornerstone Sensors公司的发展小趣事

品质是Cornerstone Sensors的生命线。公司建立了严格的质量管理体系,从原材料采购、生产制造到产品测试等各个环节都进行严格把控。同时,公司还注重品牌建设,通过参加行业活动、发布技术文章、提供专业培训等方式提升品牌影响力。Cornerstone Sensors的产品逐渐成为行业内公认的高品质代表,赢得了广泛的口碑和市场份额。

潮州三环(Three-circle)公司的发展小趣事

进入新世纪,三环集团继续加大研发投入,力求在电子元件领域取得更多突破。2001年,公司投资生产多层片式陶瓷电容器(MLCC),这是一种广泛应用于电子设备的关键元件。三环集团凭借其强大的研发能力和技术实力,成功实现了MLCC的量产,并将其应用于手机、电子、通讯等多个领域。这一突破不仅提升了公司的市场竞争力,也进一步巩固了其在电子行业中的地位。

Component General Inc公司的发展小趣事

Component General Inc公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料的采购到产品的生产、检测、包装等每一个环节都进行严格把控。这种对品质的执着追求,使得公司的产品赢得了客户的广泛信任和好评。

GD Rectifiers Ltd公司的发展小趣事

面对数字化时代的到来,GD Rectifiers Ltd主动拥抱变革,积极推进数字化转型。公司投入巨资建设了先进的数字化生产管理系统和客户关系管理系统,实现了生产过程的智能化和透明化。通过数据分析和挖掘技术,公司能够更准确地把握市场需求和客户需求的变化趋势,为产品研发和市场营销提供有力支持。同时,公司还加强了与供应商和客户的数字化连接和协作,提高了供应链的协同效率和响应速度。数字化转型的成功实施为GD Rectifiers Ltd注入了新的活力,进一步提升了公司的市场竞争力和行业地位。

Emerging Display Technolgies公司的发展小趣事

面对全球对环保和可持续发展的关注,一家新兴显示技术公司致力于研发绿色环保的显示技术。他们通过优化生产工艺、采用环保材料等方式,成功降低了显示屏生产过程中的能耗和废弃物排放。同时,他们还研发出了可回收、可降解的显示屏材料,为电子行业的可持续发展做出了积极贡献。

Amperite Co公司的发展小趣事

面对全球对环保和可持续发展的关注,一家新兴显示技术公司致力于研发绿色环保的显示技术。他们通过优化生产工艺、采用环保材料等方式,成功降低了显示屏生产过程中的能耗和废弃物排放。同时,他们还研发出了可回收、可降解的显示屏材料,为电子行业的可持续发展做出了积极贡献。

问答坊 | AI 解惑

导电图形的形成

感光法就是利用紫外曝光机使预先已涂布在铜箔表面上的抗蚀剂层形成FPC线路图形。如果是单片FPC进行曝光时,则与刚性印制板所用设备相同,但是进行重合定位的夹具有所不同。柔性印制板FPC专用的图形掩膜定位夹具市场上有售。但不少FPC制造厂都是独自 ...…

查看全部问答>

工程师赚钱之路!!经常是老板赚大钱自己却只拿工资,有没有其他的方法欢迎讨论~

作为硬件工程师,最郁闷的事情不外于此,辛辛苦苦设计成的硬件电路板,却没有版权,活活看着自己给公司剥削也无可奈何,即使设计的产品销量再好,跟你也是毫无关系,最后还可能被公司一脚踢开。为了解决这个问题,我们经过多年的研究与实践,终于想 ...…

查看全部问答>

要暂时中断winCE的学习,转去看windows下USB驱动的开发,郁闷中……

公司一个项目要做windows下USB驱动的开发,老大叫我跟着一起看看相关的知识,并跟我说了一大通做USB设备驱动的前景。USB驱动比较复杂,要花时间去学习的,那我就要暂时中断winCE的学习了。但心里还是想朝winCE这个方向发展,况且也学了一些日子了, ...…

查看全部问答>

程序崩溃后,CEDB没有Unmount,导致下次mount失败

程序崩溃后CeUnmountDBVol没有调用,下次执行程序时CeMountDBVol(OPEN_ALLWAYS)失败,请问怎么解决…

查看全部问答>

有关pda下导入dll 文件的问题

用vc生成一个dll文件(Phone.dll),并把它拷贝到pda的根目录下(该目录下有一个用EVC生成的导入dll的EXE文件),希望在pda中导入dll,相关代码如下:           HINSTANCE ghPhoneDLL=NULL;      ...…

查看全部问答>

pci9054外接EEPROM必须得进行烧写吗?

我看了有的文章上说可用编程器进行烧写,但是可不可以通过驱动程序对EEPROM进行写入呢?…

查看全部问答>

modelsim如何固定仿真信号显示的顺序?

用modelsim进行仿真,为了便于观察,我希望仿真结果按一定的顺序显示。可是每次手动调整完信号顺序后,再重新仿真,顺序又乱了,有没有办法将这些信号的顺序固定下来,每仿真一次都按这个顺序显示结果?…

查看全部问答>

stm32菜鸟级问题:TIMx输入时钟设置方面的

在STM32F10X参考手册上的第21(实际36)页,有一个时钟树。上面"APB1 Prescaler /1,2,4,8,16"下面"TIM2,3,4 *1,2 Multiplier"是不是可倍频的意思呀?我没有找到这一项的设置呢?哪一个寄存器位是设置这一项?菜鸟 ...…

查看全部问答>

请叫有关BT的问题

我看到很多例程用BT做软时钟,如果在做软时钟的同时检测io的状态,如果符合一定条件就LPM3_EXIT,会不会有问题,请老师指导一下吧:)…

查看全部问答>

反相降压—升压拓扑可调节 LED 电流

LED 亮度控制要求有一个能够提供恒定、稳压电流的驱动器。要想达到这一目标,驱动器拓扑必须能够产生足够大的输出电压来正向偏置 LED。因此,如果输入和输出电压范围重叠时,我们又该做何选择呢?   德州仪器 (TI) 应用工程师John Betten, ...…

查看全部问答>