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

📄 7.c

📁 51控制的十字路口交通灯 左右转 人行道
💻 C
字号:
/**********************************/
 /*         交通灯控制系统         */
 /*    设计:陈金玉 吴振铨         */
 /*     广东工业大学信息工程学院   */
 /*         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,g;
unsigned char n,exit;
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>20)
      {
       i=0;
       PT--;
       ST--;
      }
}

void init(void)//initialise system
{ 
  
P0=0x00;//initialise I\O ports
P1=0xFF; 
P2=0xFF;
P3=0xFF;
delay();
delay();
delay();
delay();
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;
 while(exit)
 {
 
 
for(k=0;k<40000;k++)
        ;
 while(menu!=0)
    {
	 A_A=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;
		}
      }
    A_A=1;
for(k=0;k<40000;k++)
        ;
   while(menu!=0)
    {
     PT=B1;
    A_G=0;
     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;
		}
      }
A_G=1;
for(k=0;k<40000;k++)
        ;
 while(menu!=0)
    {
     ST=C1;
    C_A=0;
    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();
	 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;
		}
      }
C_A=1;
for(k=0;k<40000;k++)
        ;
   while(menu!=0)
    {
     ST=D1;
    C_G=0;
    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();
	 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;
		}
      }
	  C_G=1;
	  if(menu==0)
        {for(k=0;k<10000;k++)
             ;
			 if(menu==0)
              { for(k=0;k<20000;k++)
                 ;
                if(menu==0)
                   {for(k=0;k<50000;k++)
                    ;
                     exit=0;
					 }
				}
			}
	         
 }
  
}
void main(void)///////////////////////////////////////////////////////////////////
{  
  A1=15;//主干转弯时间
  B1=60;//主干通行时间
  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();
  a=A1;//15
  b=A1+B1;//75
  c=C1;//10
  d=C1+D1;//15
  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;
            PR_G=0;//primary road turn right allow
            PR_R=1;
            SR_R=0;//secondary road turn right forbit
            SR_G=1;
            PSW_G=1;//primary road sidewalk forbit
            PSW_R=0;
            SSW_G=1;//secondary road sidewalk forbit
            SSW_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
                   PR_G=1;//primary road turn  right forbid
                   PR_R=0;
                   A_G=0;//A road go ahead allow
                   A_R=1;
                   B_G=0;//B road go ahead allow
                   B_R=1;
                   SSW_G=0;//secondary road sidewalk allow
                   SSW_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
                            SSW_G=1;//secondary road sidewalk Green light flash
            			    }
                        else 
                           {
                         	A_Y=0;
                            B_Y=0;
                            SSW_G=0;
            		     	}
            		   }


           			
         if(menu==0)
             {
			  for(g=0;g<300;g++)
                  ;
               if(menu==0)
                {
                 P0=0x00;
                 P1=0xFF; 
                 P2=0xFF;
                 P3=0xFF;
                 A_R=0;
                 B_R=0;
                 C_R=0;
                 D_R=0;
                 PSW_R=0;
                 SSW_R=0;
                 PR_R=0;
                 SR_R=0;
				 for(;;)
				   ;
				 }
			  }
		
             display(PT,ST);
            }
             A_G=1;//A road go ahead forbit
            B_G=1;//B road go ahead forbit
            SSW_G=1;//secondary road sidewalk forbit
            SSW_R=0;
            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;
            SR_R=1;//secondary road turn right allow
            SR_G=0;
            PSW_G=1;//primary road sidewalk forbit
            PSW_R=0;
            SSW_G=1;//secondary road sidewalk forbit
            SSW_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
                      SR_R=0;//secondary road turn right forbit
                      SR_G=1;
                      C_G=0;//C road go ahead allow
                	  C_R=1;
                      D_G=0;//D road go ahead allow
                	  D_R=1;
                      PSW_G=0;//primary road sidewalk allow
                      PSW_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
                            PSW_G=1;//primary road sidewalk Green light flash
            			    }
                        else 
                           {
                       	    C_Y=0;
                            D_Y=0;
                            PSW_G=0;
            		     	}
            		   }

   
         if(menu==0)
             {
			  for(g=0;g<300;g++)
                  ;
               if(menu==0)
                {
                 P0=0x00;
                 P1=0xFF; 
                 P2=0xFF;
                 P3=0xFF;
                 A_R=0;
                 B_R=0;
                 C_R=0;
                 D_R=0;
                 PSW_R=0;
                 SSW_R=0;
                 PR_R=0;
                 SR_R=0;
				 for(;;)
				   ;
				 }
			  }
		

                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 + -