⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档 (2).txt

📁 51控制的十字路口交通灯 左右转 人行道
💻 TXT
字号:
/**********************************/
 /*         交通灯控制系统         */
 /*    设计:陈金玉 吴振铨         */
 /*     广东工业大学信息工程学院   */
 /*         04应用电子2班         */
 /*         2006年4月25日        */
 /**********************************/
// cross road traffic light control system              
// designed by chen jin yu   wu zhen quan      
// 2006.4.10  at guang dong university of technology
// information engineering college
#include"reg51.h"
unsigned char code table[]={  // seven segments LED code
        0xC0,/*0*/
        0xF9,/*1*/
        0xA4,/*2*/
        0xB0,/*3*/
        0x99,/*4*/
        0x92,/*5*/
        0x82,/*6*/
        0xF8,/*7*/
        0x80,/*8*/
        0x90,/*9*/};
sbit A_R=P1^0;//A road Red light
sbit A_G=P1^1;//A road Green light
sbit A_Y=P1^2;//A road Yellow light
sbit A_A=P1^3;//A road Arrow light
sbit C_R=P1^4;//C road Red light
sbit C_G=P1^5;//C road Green light
sbit C_Y=P1^6;//C road Yellow light
sbit C_A=P1^7;//C road Arrow light
sbit B_R=P1^0;//C road Red light
sbit B_G=P1^1;//B road Green light
sbit B_Y=P1^2;//B road Yellow light
sbit B_A=P1^3;//B road Arrow light
sbit D_R=P1^4;//D road Red light
sbit D_G=P1^5;//D road Green light
sbit D_Y=P1^6;//D road Yellow light
sbit D_A=P1^7;//D road Arrow light
sbit PB1=P2^7;//primary road led bit 1
sbit PB2=P2^6;//primary road led bit 2
sbit SB1=P2^5;//secondary road led bit 1
sbit SB2=P2^4;//secondary road led bit 2
sbit PSW_G=P2^3;//primary road sidewalk Green lighi
sbit PSW_R=P2^2;//primary road sidewalk Red lighi
sbit SSW_G=P2^1;//secondary road sidewalk Green lighi
sbit SSW_R=P2^0;//secondary road sidewalk Red lighi
sbit PR_G=P3^0;//primary road turn right Red light
sbit PR_R=P3^1;//primary road turn right Green light
sbit SR_G=P3^2;//secondary road turn right Red light
sbit SR_R=P3^3;//secondary road turn right Green light

sbit menu=P3^7;
sbit add=P3^5;
sbit dec=P3^6;
unsigned char CASE;// road situation
unsigned char PT;//primary road time
unsigned char ST;//secondary road time
unsigned char a,b,c,d,A1,B1,C1,D1;
unsigned int k;
unsigned char n,exit,CASE;
void display(unsigned char PT,unsigned char ST);//road  time display
void init(void);//initialise system
void delay(void);// led scan delay
time0()interrupt 1 using 1//T0 interrupt serve (delay 50ms)
{ 
  unsigned char i;
  i++;
  TH0=-50000/256;
  TL0=-50000%256;
     if(i>5)
      {
       i=0;
       PT--;
       ST--;
      }
}

void init(void)//initialise system
{ 
  
P0=0x00;//initialise I\O ports
P1=0xFF; 
P2=0xFF;
P3=0xFF;
CASE=1;//the initial road situation
TMOD=0x61;//initialise timer
TH0=-50000/256;
TL0=-50000%256;
EA=1;
ET0=1;
TR0=1;
}

void display(unsigned char PT,unsigned char ST)//road time display function
{
 unsigned char n;
 n=PT%10;
 PB1=0;
 P0=table[n];
 delay();
 delay();
 PB1=1;
 delay();
 n=PT/10;
 PB2=0;
 P0=table[n];
 delay();
 delay();
 PB2=1;
 delay();
 n=ST%10;
 SB1=0;
 P0=table[n];
 delay();
 delay();
 SB1=1;
 delay();
 n=ST/10;
 SB2=0;
 P0=table[n];
 delay();
 delay();
 SB2=1;
 delay();
 }

void delay(void)// led scan delay
{  
   for(k=0;k<300;k++)
        ;
}

void settime()
{
  EA=0;
  ET0=0;
  TR0=0;
 exit=1;
 CASE=3;
 while(exit)
 {
 
 switch(CASE)
 {
 case 1:
{
  CASE=2;
 while(menu!=0)
    {
     PT=A1;
     
     n=PT%10;
     PB1=0;
     P0=table[n];
     delay();
     delay();
     PB1=1;
     delay();
     n=PT/10;
     PB2=0;
     P0=table[n];
     delay();
     delay();
     PB2=1;
     delay();
	 if(add==0)
       {
	    for(k=0;k<20000;k++)
             ;
		if(add==0)
		A1++;
        //if(A1>99);
		 //A1=0;
		}
      if(dec==0)
        {
	     for(k=0;k<20000;k++)
            ;
		 if(dec==0)
		 A1--;
         //if(A1==0);
		  //A1=99;
		}
      }

}
  break;
 case 2:
{CASE=3;
   while(menu!=0)
    {
     PT=B1;
    
     n=PT%10;
     PB1=0;
     P0=table[n];
     delay();
     delay();
     PB1=1;
     delay();
     n=PT/10;
     PB2=0;
     P0=table[n];
     delay();
     delay();
     PB2=1;
     delay();
	 if(add==0)
       {
	    for(k=0;k<20000;k++)
             ;
		if(add==0)
		B1++;
       // if(B1==99);
		// B1=0;
		}
      if(dec==0)
        {
         for(k=0;k<20000;k++)
             ;
		 if(dec==0)
		 B1--;
        // if(B1==0);
		// B1=99;
		}
      }


}
break;
case 3:
{
 while(menu!=0)
    {
     PT=C1;
    
     n=PT%10;
     PB1=0;
     P0=table[n];
     delay();
     delay();
     PB1=1;
     delay();
     n=PT/10;
     PB2=0;
     P0=table[n];
     delay();
     delay();
     PB2=1;
     delay();
	 if(add==0)
       {
	    for(k=0;k<20000;k++)
             ;
		if(add==0)
		C1++;
        //if(C1==99);
		// C1=0;
		}
      if(dec==0)
        {
         for(k=0;k<20000;k++)
             ;
		 if(dec==0)
		 C1--;
       // if(C1==0);
		// C1=99;
		}
      }
}
CASE=4;
break;
case 4:
{
   while(menu!=0)
    {
     ST=D1;
    
     n=PT%10;
     PB1=0;
     P0=table[n];
     delay();
     delay();
     PB1=1;
     delay();
     n=PT/10;
     PB2=0;
     P0=table[n];
     delay();
     delay();
     PB2=1;
     delay();
	 if(add==0)
       {
	   for(k=0;k<20000;k++)
             ;
		if(add==0)
		D1++;
		//if(D1==99)
	//	D1=0;
		}
      if(dec==0)
        {
	    for(k=0;k<20000;k++)
             ;
		 if(dec==0)
		 D1--;
		 //if(D1==0);
		 //D1=99;
		}
      }
}
CASE=5;
break;
case 5 :
{

	  if(menu==0)
        {for(k=0;k<60000;k++)
             ;
			 if(menu==0)
              { for(k=0;k<20000;k++)
                 ;
                if(menu==0)
                 exit=0;
				}
			}
	  
  }
  CASE=1;
  break; 
  }
 }
  
}
void main(void)///////////////////////////////////////////////////////////////////
{  
  A1=13;
  B1=62;
  C1=10;
  D1=45;
  a=A1;//15
  b=A1+B1;//75
  c=C1;//10
  d=C1+D1;//15
  if(menu==0)
  for(k=0;k<10000;k++)
        ;
  if(menu==0)
  settime();   
  init();
  
  while(1)
  {
    switch(CASE)
     {
       case 1:
            PT=a;
            ST=b;

            C_R=0;//C go ahead forbit
            D_R=0;//D go ahead forbit
            A_A=0;//A road turn left allow
            A_R=0;
            B_A=0;//B road turn left allow
            B_R=0;
            while(!(PT==0&&ST==0))
            {
             if(PT<6&&ST<(B1+6)&&ST>PT)
                 { 
                   if(PT%2==1)
            	       {
                        A_A=1;//A road turn left flash
                        B_A=1;//B road turn left flash
        				}
                    else 
                        {
                    	A_A=0;
                        B_A=0;
        				}
        		  }
             if(PT==0&&ST==B1)
                {
                   PT=B1;
                   A_A=1;//A road turn left forbid
                   B_A=1;//B road turn left forbid
                   A_G=0;//A road go ahead allow
                   A_R=1;
                   B_G=0;//B road go ahead allow
                   B_R=1;
                   
                  }
             if(PT<6&&ST<6)
                        { 
                	     A_G=1;
                         B_G=1;
                         if(PT%2==1)
                           {
                            A_Y=1;//A road yellow light flash
                            B_Y=1;//B road yellow light flash
            			    }
                        else 
                           {
                         	A_Y=0;
                            B_Y=0;
            		     	}
            		   }
             display(PT,ST);
            }
            A_G=1;//A road go ahead forbit
            B_G=1;//B road go ahead forbit
            CASE=2;
            break;
    	 
       
       case 2:
            PT=d;
            ST=c;
            A_R=0;//A road go ahead forbit
            B_R=0;//B road go ahead forbit
            C_A=0;//C road turn left allow
            C_R=0;
            D_A=0;//D road turn left allow
            C_R=0;
            while(!(PT==0&&ST==0))
              { 
                  if(PT<(6+D1)&&ST<6&&PT>ST)
                 { 
                   if(PT%2==1)
            	       {
                        C_A=1;//C road turn left flash
                        C_A=1;//C road turn left flash
        				}
                    else 
                        {
                    	C_A=0;
                        C_A=0;
        				}
        		  }
                if(PT==D1&&ST==0)
                    {
                	  ST=D1;
                      C_A=1;//C road turn left forbid
                      D_A=1;//D road turn left forbid
                      C_G=0;//C road go ahead allow
                	  C_R=1;
                      D_G=0;//D road go ahead allow
                	  D_R=1;
                      
        			 }
                if(PT<6&&ST<6)
                        { 
                	     C_G=1;
                         D_G=1;
                         if(PT%2==1)
                           {
                            C_Y=1;//C road yellow light flash
                            D_Y=1;//D road yellow light flash
            			    }
                        else 
                           {
                         	C_Y=0;
                            D_Y=0;
            		     	}
            		   }
                display(PT,ST);
               }
            C_G=1;//C road go ahead forbit
            D_G=1;//C road go ahead forbit
            CASE=1;
            break;
           
       }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -