#include
#define uchar unsigned char
#define uint unsigned int
sbit red_east_west = P1 ^ 0;
sbit yellow_east_west = P1 ^ 1;
sbit green_east_west = P1 ^ 2;
sbit red_south_north = P1 ^ 3;
sbit yellow_south_north = P1 ^ 4;
sbit green_south_north = P1 ^ 5;
uchar flash_count = 0;
uchar operation_type = 1;
void delayms(uint xms);
void traffic_light();
void main()
{
while(1)
traffic_light();
}
void traffic_light()
{
switch(operation_type)
{
case 1: //green between east and west, red between south and north
red_east_west = 1; yellow_east_west = 1; green_east_west = 0;
red_south_north = 0; yellow_south_north = 1; green_south_north = 1;
delayms(2000);
operation_type = 2;
break;
case 2: //yellow flash between east and west, green close between east and west
delayms(300);
yellow_east_west = ~yellow_east_west; green_east_west = 1;
if (++flash_count != 10)
return;
flash_count = 0;
operation_type = 3;
break;
case 3: //red between east and west, green between south and north
red_east_west = 0; yellow_east_west = 1; green_east_west = 1;
red_south_north = 1; yellow_south_north = 1; green_south_north = 0;
delayms(2000);
operation_type = 4;
break;
case 4: //yellow flash between south and north
delayms(300);
yellow_south_north = ~yellow_south_north; green_south_north = 1;
if (++flash_count != 10)
return;
flash_count = 0;
operation_type = 1;
break;
}
}
void delayms(uint xms)
{
uint i, j;
for (i = xms; i > 0; i–)
for (j = 110; j > 0; j–)
;