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

📄 jiaotongdengkongzhihewenduchuangan.c

📁 用C语言编的功能很齐全的交通灯程序
💻 C
字号:
#include <reg51.h>

/////////南北各方向控制位////////////////
sbit sn_right_red		=	P0^4;
sbit sn_right_green		=	P0^5;	
sbit sn_middle_red		=	P0^2;	
sbit sn_middle_green	=	P0^3;	
sbit sn_left_red		=	P0^0;	
sbit sn_left_green		=	P0^1;	
sbit sn_walk_red		=	P0^6;	
sbit sn_walk_green		=	P0^7;	

/////////东西各方向控制位////////////////
sbit ew_right_red		=	P2^4;	
sbit ew_right_green		=	P2^5;	
sbit ew_middle_red		=	P2^2;	
sbit ew_middle_green	=	P2^3;	
sbit ew_left_red		=	P2^0;	
sbit ew_left_green		=	P2^1;	
sbit ew_walk_red		=	P2^6;	
sbit ew_walk_green		=	P2^7;

/////////计数器40192预置位,使能/////////////
sbit jsq_j1				=	P1^0;
sbit jsq_j2				=	P1^1;
sbit jsq_j3				=	P1^2;
sbit jsq_en_1			=	P1^3;
sbit jsq_en_2			=	P1^4;
sbit jsq_down			=	P1^5;

//*******************************全局变量定义**************************************
unsigned char state_flag;
unsigned char flag_50ms;
unsigned char second;


//**************************************函数头*****************************
void jsq_zhiwei(unsigned char num);		//计数器置位
void state_1(void);						//状态1
void state_2(void);						//状态2
void state_3(void);						//状态3
void state_4(void);						//状态4
void state_5(void);						//紧急情况
void state_6(void);						//110.119
void init(void);
//**************delay***************
void delay(unsigned int c){
unsigned int i,j;
for(j=0;j<c;j++)
{for(i=0;i<100;i++);}
}
void delay15s(void)
  {
 unsigned int TempCycA = 185;
 unsigned int TempCycB;
 while(TempCycA--)
 {
   TempCycB=7269;
   while(TempCycB--);
 };
  }
//**********************************
//********************************定时器0**************************************
void dingshi_0 (void) interrupt 1
{
 int i = 500;
 TH0=(65536-50010)/256;//50ms
 TL0=(65536-50010)%256;
 flag_50ms++;
if (flag_50ms==20)
  {
   flag_50ms=0;
   second++;
   jsq_down=0;
   while(i--);
   jsq_down = !jsq_down;
   if (second==60)
    {
     second=0;
     state_flag++;

     if (state_flag==5)
      {
       state_flag=1;
	  }

    }
  }
} 
//*****************************************************************************


//********************************定时器1**************************************
void dingshi_1 (void) interrupt 3
{

}
//*****************************************************************************


//*******************************外部中断0*************************************
void zhongduan_0(void) interrupt 0
{
       
      unsigned int a,b;
	  a = P0;
	  b = P2;
	  ET0=0;
      TR0=0;
      state_6();
	  delay15s();
	  P0 = a;
	  P2 = b;
	  ET0=1;
      TR0=1;

}
//*****************************************************************************


//*******************************外部中断1*************************************
void zhongduan_1(void) interrupt 2
{	
  unsigned int a,b;
  ET0=0;
  TR0=0;
  EX1 = 0;
  a = P0;
  b = P2;
  delay(50);
  if(INT1==0){
  state_5(); 
  delay(1000);
  }
  while(INT1==1);
  delay(500);
  P0 = a;
  P2 = b;
  ET0=1;
  TR0=1;
  EX1 = 1;
}
//*****************************************************************************
//*********************************main**************************************** 
void main(void)
{
jsq_zhiwei(5);			//计数是60s
jsq_en_1=1;				//计数器1使能
jsq_en_2=1;				//计数器2使能
jsq_en_1=0;             //计数器1预置数
jsq_en_2=0;             //计数器2预置数
jsq_en_1=1; 			//计数器1使能
jsq_en_2=1; 			//计数器2使能
state_flag=1;			//起始是状态1;
flag_50ms=0;
second=0;
init();
jsq_zhiwei(6);		
while(1)
 {
	switch(state_flag)
	{
	case 1:	state_1();break;
	case 2:	state_2();break;
	case 3:	state_3();break;
	case 4:	state_4();break;
	default:break;
	}
 }
}
//*****************************************************************************	
//**********************************init*******************************************
void init(void)
{
TMOD=0x01;//定时器0方式1
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
EA=1;
PX0 = 1;
PX1=1;
ET0=1;
EX0=1;
EX1=1;
TR0=1;
}	
//*****************************************************************************	
//*****************************************************************************
void jsq_zhiwei(unsigned char num)
{
switch(num)
{
case 0:	jsq_j3=0;jsq_j2=0;jsq_j1=0;break;
case 1:	jsq_j3=0;jsq_j2=0;jsq_j1=1;break;
case 2:	jsq_j3=0;jsq_j2=1;jsq_j1=0;break;
case 3:	jsq_j3=0;jsq_j2=1;jsq_j1=1;break;
case 4:	jsq_j3=1;jsq_j2=0;jsq_j1=0;break;
case 5:	jsq_j3=1;jsq_j2=0;jsq_j1=1;break;
case 6:	jsq_j3=1;jsq_j2=1;jsq_j1=0;break;
case 7:	jsq_j3=1;jsq_j2=1;jsq_j1=1;break;
default:jsq_j3=1;jsq_j2=1;jsq_j1=0;break;//默认是6,即60s

}
}
//*********************************状态1********************************************
void state_1(void)
{
  unsigned int i;
  sn_right_red = 0;
  sn_right_green = 1;
	
  sn_middle_red = 1;	
  sn_middle_green = 0;	   //南北车辆直行

  sn_left_red = 0;	
  sn_left_green = 1;
	
  sn_walk_red = 1;	
  sn_walk_green = 0;       //南北行人直行

  ew_right_red = 0;	
  ew_right_green = 1;
	
  ew_middle_red = 0;	
  ew_middle_green = 1;
	
  ew_left_red =	0;	
  ew_left_green = 1;
	
  ew_walk_red = 0;	
  ew_walk_green = 1;

  while(second < 10);
  sn_right_red = 1;
  sn_right_green = 0;
  ew_right_red = 1;
  ew_right_green = 0;
  while(second<50);
  while(second >= 50)
  {
  sn_middle_red = 1;	
  sn_middle_green = ~sn_middle_green;
  sn_walk_red = 1;	
  sn_walk_green = ~sn_walk_green;
  for(i=0;i<10000;i++);
  }
  

}
//*****************************************************************************	
//************************************状态2*****************************************	
void state_2(void)
{
  unsigned int i;
  sn_right_red = 1;
  sn_right_green = 0;	  //各路右拐

  sn_middle_red = 0;	
  sn_middle_green = 1;	  //直行禁止

  sn_left_red = 1;	
  sn_left_green = 0;	  //南北左拐

  sn_walk_red = 0;	
  sn_walk_green = 1;

  ew_right_red = 1;	
  ew_right_green = 0;
	
  ew_middle_red = 0;	
  ew_middle_green = 1;	

  ew_left_red =	0;	
  ew_left_green = 1;
	
  ew_walk_red = 0;	
  ew_walk_green = 1;


   while(second >= 50)
  {
   sn_right_red = 1;
   sn_right_green = ~sn_right_green;
   ew_right_red = 1;	
   ew_right_green = ~ew_right_green;
   sn_left_red = 1;	
   sn_left_green = ~sn_left_green;
    for(i=0;i<10000;i++);
  }


}
//*****************************************************************************	
//************************************状态3*****************************************	
void state_3(void)
{
  unsigned int i;
  sn_right_red = 0;
  sn_right_green = 1;	

  sn_middle_red = 0;	
  sn_middle_green = 1;
	
  sn_left_red = 0;	
  sn_left_green = 1;	

  sn_walk_red = 0;	
  sn_walk_green = 1;

  ew_right_red = 0;	
  ew_right_green = 1;	

  ew_middle_red = 1;	
  ew_middle_green = 0;	   //东西车辆直行

  ew_left_red =	0;	
  ew_left_green = 1;
	
  ew_walk_red = 1;	
  ew_walk_green = 0;       //东西行人直行

   while(second < 10);     //各路右拐滞后10s开放
  sn_right_red = 1;
  sn_right_green = 0;
  ew_right_red = 1;
  ew_right_green = 0;
  while(second<50);
  while(second >= 50)
  {
  ew_middle_red = 1;	
  ew_middle_green = ~ew_middle_green;
  ew_walk_red = 1;	
  ew_walk_green = ~ew_walk_green;
  for(i=0;i<10000;i++);
  }
  


}
//*****************************************************************************	
//*************************************状态4****************************************	
void state_4(void)
{
  unsigned int i;
  sn_right_red = 1;
  sn_right_green = 0;	  //各路右拐

  sn_middle_red = 0;	
  sn_middle_green = 1;	

  sn_left_red = 0;	
  sn_left_green = 1;
	
  sn_walk_red = 0;	
  sn_walk_green = 1;

  ew_right_red = 1;	
  ew_right_green = 0;	

  ew_middle_red = 0;	
  ew_middle_green = 1;	

  ew_left_red =	1;	
  ew_left_green = 0;	 //东西向左拐

  ew_walk_red = 0;	
  ew_walk_green = 1;

     while(second >= 50)
  {
   sn_right_red = 1;
   sn_right_green = ~sn_right_green;
   ew_right_red = 1;	
   ew_right_green = ~ew_right_green;
   ew_left_red = 1;	
   ew_left_green = ~ew_left_green;
    for(i=0;i<10000;i++);
  }

}
//*****************************************************************************	
//*************************************状态5****************************************
void state_5(void)
{
  
  sn_right_red = 0;
  sn_right_green = 1;	

  sn_middle_red = 0;	
  sn_middle_green = 1;
	
  sn_left_red = 0;	
  sn_left_green = 1;	

  sn_walk_red = 1;	
  sn_walk_green = 0;

  ew_right_red = 0;	
  ew_right_green = 1;	

  ew_middle_red = 0;	
  ew_middle_green = 1;

  ew_left_red =	0;	
  ew_left_green = 1;
	
  ew_walk_red = 1;	
  ew_walk_green = 0;
}	
//*****************************************************************************	
//*************************************状态6****************************************
void state_6(void)
{
  EX1=1;
  sn_right_red = 0;
  sn_right_green = 1;	

  sn_middle_red = 0;	
  sn_middle_green = 1;
	
  sn_left_red = 0;	
  sn_left_green = 1;	

  sn_walk_red = 0;	
  sn_walk_green = 1;

  ew_right_red = 0;	
  ew_right_green = 1;	

  ew_middle_red = 0;	
  ew_middle_green = 1;

  ew_left_red =	0;	
  ew_left_green = 1;
	
  ew_walk_red = 0;	
  ew_walk_green = 1;
}

⌨️ 快捷键说明

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