#include <avr/io.h>
#include <util/delay.h>
#define EW_ALLOW 0
#define EW_BLINK1 1
#define EW_BLINK2 2
#define SN_ALLOW 3
#define SN_BLINK1 4
#define SN_BLINK2 5
//东西方向
#define RED_EW_ON() PORTD &=~_BV(PD6)//红灯亮
#define GREEN_EW_ON() PORTD &=~_BV(PD4)//绿灯亮
#define YELLOW_EW_ON() PORTD &=~_BV(PD5)//黄灯亮
#define RED_EW_OFF() PORTD |=_BV(PD6)//红灯灭
#define GREEN_EW_OFF() PORTD |=_BV(PD4)//绿灯亮
#define YELLOW_EW_OFF() PORTD |=_BV(PD5)//黄灯亮
#define YELLOW_EW_BLINK1() PORTD ^=_BV(PD5)//东西方向黄灯闪烁
#define YELLOW_EW_BLINK2() PORTD ^=_BV(PD5)//东西方向黄灯闪烁
//南北方向
#define RED_SN_ON() PORTD &=~_BV(PD3)//红灯亮
#define GREEN_SN_ON() PORTD &=~_BV(PD1)//绿灯亮
#define YELLOW_SN_ON() PORTD &=~_BV(PD2)//黄灯亮
#define RED_SN_OFF() PORTD |=_BV(PD3)//红灯灭
#define GREEN_SN_OFF() PORTD |=_BV(PD1)//绿灯亮
#define YELLOW_SN_OFF() PORTD |=_BV(PD2)//黄灯亮
#define YELLOW_SN_BLINK1() PORTD ^=_BV(PD2)//南北方向黄灯闪烁
#define YELLOW_SN_BLINK2() PORTD ^=_BV(PD2)//南北方向黄灯闪烁
uint8_t mode=EW_ALLOW;//记录当前状态,初始状态东西通行,南北禁止
uint8_t blink_count=0;//记录黄灯闪烁初次
int main(void)
{
DDRD=0XFF;
PORTD=0XFF;
DDRB=0xff;
DDRA=0xff;
while(1)
{
switch(mode)
{
case EW_ALLOW://东西方向通行,南北方向禁止
{
RED_EW_OFF();GREEN_EW_ON();YELLOW_EW_OFF();//东西方向红灯灭,绿灯亮,