📄 4.c
字号:
// 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;//B road Red light
sbit C_G=P1^5;//B road Green light
sbit C_Y=P1^6;//B road Yellow light
sbit C_A=P1^7;//B road Arrow light
sbit B_R=P3^0;//C road Red light
sbit B_G=P3^1;//C road Green light
sbit B_Y=P3^2;//C road Yellow light
sbit B_A=P3^3;//C road Arrow light
sbit D_R=P3^4;//D road Red light
sbit D_G=P3^5;//D road Green light
sbit D_Y=P3^6;//D road Yellow light
sbit D_A=P3^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
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;
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
A_G=0;//A road go ahead allow
A_R=1;
B_G=0;//B road go ahead allow
B_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
}
else
{
A_Y=0;
B_Y=0;
}
}
display(PT,ST);
}
A_G=1;//A road go ahead forbit
B_G=1;//B road go ahead forbit
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;
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
C_G=0;//C road go ahead allow
C_R=1;
D_G=0;//D road go ahead allow
D_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
}
else
{
C_Y=0;
D_Y=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 + -