|
绿灯先亮4秒
最后一秒为快闪(亮暗各0.1秒,闪烁5次)
然后黄灯亮2秒
最后红灯亮4秒
#include <reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
sbit horizontal_red=P1^0;
sbit horizontal_yellow=P1^1;
sbit horizontal_green=P1^2;
sbit vertical_red=P1^3;
sbit vertical_yellow=P1^4;
sbit vertical_green=P1^5;
uchar code display_code[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00};
//延时函数ms
void DelayMS(unsigned int a){
int i=0,j=a;
for(j=a;j>0;j--){
for(i=0;i<120;i++){
;
}
}
}
//垂直通行
void vertical_1(){
int i;
for(i=0;i<=12;i++){
horizontal_red=0; //i<=12时,水平方向红灯亮,垂直方向绿灯亮倒计时9秒
if(i<7){
vertical_green=0;
P2=display_code[9-i];
DelayMS(1000);
}else if(i<=9){
vertical_green=0;
P2=display_code[9-i];
DelayMS(200);
P2=display_code[10];
DelayMS(200);
}else{
vertical_green=1;
P2=0x00;
vertical_yellow=0; //垂直方向黄灯亮延迟3秒
DelayMS(1000);
}
vertical_yellow=1;
horizontal_red=1;
}
}
//水平通行,垂直不通行
void horizontal_1(){
int i;
for(i=0;i<=12;i++){
vertical_red=0; //i时<=12,垂直方向红灯亮,水平方向绿灯亮
if(i<9){ //前九秒,水平方向绿灯亮
horizontal_green=0;
}else{
horizontal_green=1;
horizontal_yellow=0;
}
if(i>3){ //i>3开始倒计时
P3=display_code[12-i];
DelayMS(1000);
} else{
DelayMS(1000);
}
P3=0x00;
}
horizontal_yellow=1;
vertical_red=1;
}
void main(){
P2=0x00;
P3=0x00;
while(1){
vertical_1();
horizontal_1();
}
}
|
|