程序:
#include "reg51.h"
typedef unsigned char uchar;
typedef unsigned int uint;
void delay_ms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=118;j>0;j--);
}
#define RED_EW_ON() P0 &= ~0x01
#define YELLOW_EW_ON() P0 &= ~0x02
#define GREEN_EW_ON() P0 &= ~0x04
#define RED_EW_OFF() P0 |= 0x01
#define YELLOW_EW_OFF() P0 |= 0x02
#define GREEN_EW_OFF() P0 |= 0x04
#define RED_SN_ON() P0 &= ~0x08
#define YELLOW_SN_ON() P0 &= ~0x10
#define GREEN_SN_ON() P0 &= ~0x20
#define RED_SN_OFF() P0 |= 0x08
#define YELLOW_SN_OFF() P0 |= 0x10
#define GREEN_SN_OFF() P0 |= 0x20
#define YELLOW_EW_BLINK() P0 ^= 0x02
#define YELLOW_SN_BLINK() P0 ^= 0x10
uchar count = 0;
uchar type=1;
int main(void)
{
while(1)
{
switch (type)
{
case 1://东西方向绿灯与南北方向红灯亮
RED_EW_OFF(); YELLOW_EW_OFF(); GREEN_EW_ON();
RED_SN_ON(); YELLOW_SN_OFF(); GREEN_SN_OFF();
delay_ms(2000);
type = 2;
break;
case 2://东西方向黄灯开始闪烁,绿灯关闭
delay_ms(120);
YELLOW_EW_BLINK();
GREEN_EW_OFF();
if(++count!=10)
break;
count = 0;
type = 3;
break;
case 3://东西方向红灯与南北方向绿灯亮
RED_EW_ON(); YELLOW_EW_OFF(); GREEN_EW_OFF();
RED_SN_OFF(); YELLOW_SN_OFF(); GREEN_SN_ON();
delay_ms(2000);
type=4;
break;
case 4://南北方向红灯开始闪烁
delay_ms(120);
YELLOW_SN_BLINK();
GREEN_SN_OFF();
if(++count!= 10)
break;
count = 0;
type = 1;
break;
}
}
return 0;
}