- #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 |