目前道路上交通灯主要是用什么控制的?PLC,单片机,纯逻辑电路中那种用的广泛?

核心提示看项目情况吧,不过一般交通灯用单片机控制比较多,因为成本低,且控制也不复杂,通讯也不难实现。公路交通中主要用PLC控制较多的领域应该有:1隧道监控,基本上是一公里三个站,每个站用个小型PLC;2另外就是ETC车道(免停车自动收费车道),但这

看项目情况吧,不过一般交通灯用单片机控制比较多,因为成本低,且控制也不复杂,通讯也不难实现。

公路交通中主要用PLC控制较多的领域应该有:1隧道监控,基本上是一公里三个站,每个站用个小型PLC;2另外就是ETC车道(免停车自动收费车道),但这个在国内做的还不行,国外,比如欧洲能做到80KM/S的时速快速通过。

基于51单片机控制交通灯的电路图与C语言程序

我们看到,这是显示的要求是40进制,4进制,20进制。且轮换进行。

很容易想到的就是使用16进制计数器。

设计方法是:

第一个40进制选取两个16进制计数器,第一个计数器的进位输出接入第二个计数器的ENT端,然后再在第二个计数器的输出端接入3-8译码器,我们知道1对应的二进制是00001,40对应二进制是101000。于是在3-8译码器输入端接入前三位,将3-8译码器的第5个输出端接到第一个计数器的LOAD端,然后第一个计数器置数端输入是0001。然后我们就可以发现这两个计数器构成了由1~40的二进制计数器。

同理我们对黄灯用一个16进制计数器设计成1~4的二进制计数器。

同理对南北绿灯用两个16进制计数器设计成1~20的二进制计数器。

然后我们理下思路,要产生你提出的效果,我们接下来要将这些计数器形成循环显示。

具体就是:

1~40二进制计数器(即东西绿灯)当到达40时,进位信号触发后一个1~4二进制计数器(即黄灯),同时这个信号阻断1~40二进制计数器继续计数。

之后,当1~4二进制计数器达到4时,进位信号触发1~20二进制计数器(即南北绿灯),同时这个信号阻断1~4二进制计数器继续计数。

之后同理,1~20到达20后,触发后一个1~4,1~4到达4后,再触发1~40。

于是我们很清晰的看到了这样一个循环,当东西绿灯40秒到后自动停止转到黄灯,到达4秒后自动停止转到南北绿灯。20秒后自动停止转到黄灯。4秒后自动停止并转到东西绿灯然后一直这么循环,完成所要效果。

好,那我们接下来要做的就是怎么联系前后两个计数器。在此仅列举1~40如何转到1~4,之后的1~4转到1~20转到1~4再转到1~40都是一个道理,不再赘述。

如前所述,第一个1~40计数器最终是在3-8译码器的5号输出端返回到第一级的LOAD形成重新的置1从而达到1~40计数的要求的。那么我们如果将这个端口5输出的信号同时接入第一级的ENP端口,那么就行成了一旦达到40,1~40置位回到1,并且由于ENP端口出现0信号,使得整个1~40计数器达到40时重新置1并停止计数。

然后5输出的信号取非后可以用于触发后一级的ENT,触发后一级1~4计数器。然后一样的做法,当1~4达到4时,阻断自己继续计数并将信号触发再后一级的1~20计数器一次类推就达到了你要的结果。

至于显示可以用7段显示器,这个较为简单,列个表画一个卡诺圈就出来了。

希望能解决您的问题。

简易交通灯电路的设计(74LS161、74LS138、门电路)

思路:

    红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。

东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。

三、硬件电路设计

此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。

四、软件程序(C语言)

    以下是整个设计的软件程序,直接可以编译成。Hex代码。通过以上电路,下载到单片机,可直接运行。

////

//程序名:十字路口交通灯控制

//编写人:黄庭剑

//初写时间:2009年1月2日

//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换

//CPU说明:AT89C51型单片机; 24MHZ晶体振荡器

//完成时间:2009年1月6日

////

#include<stdioh>

#include<reg51h>

#include<intrinsh>

sfr p0   = 0x80;

sfr p1   = 0x90;

sfr p2   = 0xA0;

sfr p3   = 0xb0;      //这部分内容其实在“#include<reg51h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51h里面的内容。其实两者是一样的。

sbit  sw      = p0^0;

sbit   OE    =P0^6;

sbit   LE    =P0^7;  //74LS373锁存器控制端定义

char  display[]={ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99 }; //p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;

//函数声明 begin

void  delay1(int count);

void  delay_long(int  number1,int number2);

void    people_car_drive();

//函数声明end

////延时子程序

void  delay1(int  count)

 { int  i;

   for(i=count;i>0;i--)

       { ;} 

 }

void  delay_long(int  number1,int number2)

  {

   int a,b;

 for(a=number1;a>0;a--)

   {

    for(b=number2;b>0;b--)

     { _nop_();     }

   }

    

  }

////延时子程序

 void   people_car_drive()

 {

   int   p_1=2,i,j=9,p_2=6;    ////行人通行时,延时20秒

          p2=0x09;                     //南北红灯亮

       p3=0x24;                     //东西绿灯亮

    

  while(p_1-->0)

     { LE=1;

    OE=0;

    if(p_1==0){OE=1;}            //当十位数减到0时,只显示个位数

    p1=display[p_1];

    delay1(1000);

    LE=0;  

    j=9;

     for(i=10;i>0;i--)

   { 

     if(p_1==0&&j==3)break;     //减到3时退出循环,让其黄灯闪烁显示

     p1=display[j--];

     delay_long(16000,2);

  if(sw==1)return;   

   }

   

     } 

   

////

                  

     p2=0x12;                  //南北黄灯闪烁三秒,以提醒行人注意

     p3=0x12; 

  p1=display[3]; 

  delay_long(8000,1);

  p2=0x00;     

     p3=0x00;     

  delay_long(14000,1);

    

  p2=0x12;

  p3=0x12;

  p1=display[2];

  delay_long(8000,1);

  p2=0x00;     

     p3=0x00;

  delay_long(14000,1);

  

  p2=0x12;

  p3=0x12;

  p1=display[1];

  delay_long(8000,1);

  p2=0x00;     

     p3=0x00;

  delay_long(14000,1);

//以下是车辆通行时延时60秒//

 

   p2=0x24;                 //南北绿灯亮

   p3=0x09;                 //东西红灯亮

  

     while(p_2-->0)

     { LE=1;

    OE=0;

    if(p_2==0){OE=1;}       //当十位数减到0时,只显示个位数

    p1=display[p_2];

    delay1(1000);

    LE=0;

    j=9;

     for(i=10;i>0;i--)

   { 

  if(p_2==0&&j==3)break;  //减到2时退出循环

     p1=display[j--];

     delay_long(16000,2);

  if(sw==1)return;     

   }

     }

   

     p2=0x12;                //南北黄灯闪烁三秒,以提醒行人注意

     p3=0x12; 

  p1=display[3]; 

  delay_long(8000,1);

  p2=0x00;     

     p3=0x00;     

  delay_long(14000,1);

    

  p2=0x12;

  p3=0x12;

  p1=display[2];

  delay_long(8000,1);

  p2=0x00;     

     p3=0x00;

  delay_long(14000,1);

  

  p2=0x12;

  p3=0x12;

  p1=display[1];

  delay_long(8000,1);

  p2=0x00;     

     p3=0x00;

  delay_long(14000,1);    //南北黄灯闪烁三秒完毕

 }

 

 void  main()               //主函数入口处

{

       p0=0x01;

       p1=0x00;

       p2=0x00;

       p3=0x00;               //初始化各端口

 { while(1) 

  {

     if(sw==0)

    {  people_car_drive();}

else

  {

   p2=0x00;

   p3=0x00;                    //关闭所有交通灯

  }

  }

  

 }

}

详情访问:http://hibaiducom/hjiannew/

救命啊!!!求简易交通灯控制逻辑电路设计,跪求!!!

先用门电路构成一个 1/5Hz的CP时基振汤器。

CP输入到74ls161构成模5计数器,即输出(D,C,B,A)=0000,0001,0010,0011,0111後经门电路组合置数从0000再开始重数。

74161的三个输出ABC输入到74138对应输入端,而对应的顺序输出为Y0',Y1',Y2',Y3',Y4',Yo'Y1'并上接红LED,Y2'接黄LED,Y3'Y4'接绿LED。

你肯定是考试用的。不能帮你作弊。,给你个参考的~~

灯y0红、橙、黄、绿、青、蓝、紫y1~y7

ld m8000 y0(主题灯亮)

ld m8002

or m0

orp t6

ani t0

out m0(红灯亮)

out t0 k5

ldp t0

or m1

ani t1

out m1(橙灯亮)

out t1 k5

ldp t1

or m2

ani t2

out m2(黄灯亮)

out t2 k5

ldp t2

or m3

ani t3

out m3(绿灯亮)

out t3 k5

ldp t3

or m4

ani t4

out m4(青灯亮)

out t4 k5

ldp t4

or m5

ani t5

out m5(蓝灯亮)

out t5 k5

ldp t5

or m6

ani t6

out m6(紫灯亮)

out t6 k5

ld m0

out y1

ld m1

out y2

ld m2

out y3

ld m3

out y4

ld m4

out y5

ld m5

out y6

ld m6

out y7

end

 
友情链接
鄂ICP备19019357号-22