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