#include <avr/io.h>
#include <avr/interrupt.h>


volatile unsigned char LED_Data = 0x06;	
volatile unsigned short timer0Cnt = 0;	// 시간 카운트 변수
volatile unsigned char cnt=0;			// 0.5초 횟수 체크 변수
volatile unsigned char check=0;			// 버튼 push 여부 체크 변수
int greflg = 1;					//green flg
int redflg = 0;					//red flg
int yelflg = 0;					//yellow flg


SIGNAL(SIG_OVERFLOW0);			// 인터럽트 발생 시 선언되는 함수 선언

int main(){

	DDRE = 0xFF;		// LED와 연결
	DDRB = 0x00;		// 버튼과 연결

	TCCR0 = 0x07;		// 타이머 설정, 오버플로인터럽트 노말 모드
	TCNT0 = 0xFF-72;	// 0.01초에 한 번씩 오버플로인터럽트 발생	
	TIMSK |= 1<< TOIE0;	// 타이머 0번 인터럽트 활성
	TIFR |= 1 << TOV0;	// 타이머 0번 인터럽트 플래그 셋

	sei();				// 글로벌 인터럽트 허용

	while (1){
		PORTE = LED_Data	;		// LED_Data 값에 따라 LED 출력
		if ( PINB && check == 0)	// 버튼 push 체크
			check = 1;				// 버튼을 누를 경우 1로 설정
	}
	return 0;

}

SIGNAL(SIG_OVERFLOW0){					// 타이머 오버플로우

	cli();								// 글로버 인터럽트 비허용
	TCNT0 = 0xFF-72; timer0Cnt ++;		// 0.01초마다 1씩 증가

	if(timer0Cnt == 50) {				// 0.5초마다 if 문 안의 내용 실행
		if ( check > 0 )	{			// 버튼을 누른 경우
			check++;
			if ( check == 6 ) {
				LED_Data = 0x06;	// 초록으로 설정
				greflg = 0;
				redflg = 1;
				//yelflg = 0;
				check = 0;			// 버튼 push 여부 초기화
				cnt=0;				// 0.5초 회수 체크 초기화
			}
			timer0Cnt = 0;			// 타이머 초기화
		} else if ( check == 0 ) {	// 버튼을 누르지 않았을 때
			cnt++;					// 0.5초 횟수 체크 변수 증가
			//초록불, 빨간불에서 10초간 대기, 10초 후 노란불을 켜기위해 플래그 설정
			if ( (greflg == 1 || redflg == 1) && cnt == 10 ){
				LED_Data = 0x07; 
				cnt = 0;
				LED_Data=0x07;
				yelflg = 1;
			} else if ( yelflg == 1 ){
				if ( cnt == 8 && greflg == 1 ){
					LED_Data = 0x06;
					cnt = 0; 
					greflg = 0;
					redflg = 1;
					yelflg = 0;
				}else if(  cnt == 8 && redflg == 1 ){
					LED_Data = 0x03;
					cnt = 0; 
					greflg = 1;
					redflg = 0;
					yelflg = 0;
			//노란불 점멸
				}else if ( cnt%2 == 1 ) {
					LED_Data=0x07;
				}
				else LED_Data=0x05;
			}//end if
		}
		timer0Cnt = 0;	// 타이머 초기화
	}
	sei();		// 글로벌 인터럽트를 허용
}


'Part 3 > ¶ Programming' 카테고리의 다른 글

[무료]윈도우폰 개발서  (0) 2011.12.19
[iPhone]Table Views, Navigation, and Arrays  (0) 2011.11.15
ZeuS Source Code!!!!  (0) 2011.05.13
Design Principle  (0) 2011.03.24
[VB2010]scanf가  (0) 2010.10.02
AND