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