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

📄 0.c

📁 51控制的十字路口交通灯 左右转 人行道
💻 C
字号:
//附:源程序代码
/**********************************/
 /*         交通灯控制系统         */
 /*    设计:陈金玉 吴振铨         */
 /*     广东工业大学信息工程学院   */
 /*         04应用电子2班         */
 /*         2006年4月25日        */
 /**********************************/
#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
unsigned char CASE;// road situation
unsigned char PT;//primary road time
unsigned char ST;//secondary road time
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;
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
{  int k;
   for(k=0;k<300;k++)
        ;
}
void main(void)
{        
  init();
  while(1)
  {
    switch(CASE)
	 {
	   case 1:
	        PT=15;
            ST=75;
			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<66&&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==60)
		        {
			       PT=60;
	               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;
					     	}
					   }
		     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=55;
            ST=10;
			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<51&&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==45&&ST==0)
		            {
					  ST=45;
                      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;
					     	}
					   }
		        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 + -