📄 jiaotongdengkongzhihewenduchuangan.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 + -