본문 바로가기

프로테우스

500msec 간격이로 LED 이동 #include unsigned char led = 0xfe; unsigned int cnt; interrupt [TIM2_COMP] void timerint(void) { if(cnt++ >= 49999)// 50000*10 = 500 msec { cnt = 0; if(led!=0x7f) led = (led 더보기
타이머 LED 점멸 2번째 #include unsigned char led = 0xfe; void delay_i_ms(unsigned int i) { do { while(!(TIFR & 0x04)); // TOV1 가 세트되었는지 확인 TIFR |= 0x04; /* 인터럽트 발생없이 타이머 사용했으므로 자동적으로 클리어되지 않으므로 강제로 클리어 */ TCNT1H = (65536-16000)/256; TCNT1L = (65536-16000) % 256; /* 재정의 , 1msec 초를 얻기 위한 시간정수*/ i--; } while(i); } void main(void) { DDRC = 0xff; // 포트C를 출력으로 TCCR1B |= 1; // 분주비를 1로 설정 TCNT1H = (65536-16000)/256; TCNT1L =.. 더보기
타이머를 이용한 LED #include unsigned char led = 0xfe; unsigned int cnt; interrupt [17] void timerint0(void) { if(cnt++ >= 9999){ // 10000*1 = 10000 usec cnt = 0; if(led!=0x7f) led = (led 더보기
인터럽트 LED 카운터 #include #include unsigned char led; interrupt [2] void exint0(void) { PORTC = ~(++led); delay_ms(5); } void main(void) { DDRC = 0xff; DDRD = 0x00; SREG.7 = 1; EIMSK = 0b00000001; EICRA = 3; PORTC = ~led; for(;;); } 더보기
스위치 2개로 LED 제어(인터럽트) #include #include unsigned char led = 0xfe; interrupt [2] void exint0(void) { if(led!=0x7f) led = (led > 1 ) | 0x80; else led = 0x7f; PORTC = led; delay_ms(40); } void main(void) { DDRC = 0xff; PORTC = led; DDRD = 0x00; SREG.7 = 1; EIMSK |= 0b00000011; EICRA = 3; while(1); } 더보기
인터럽트 - 상승엣지 #include #include unsigned char led = 0xfe; interrupt [EXT_INT0] void exint0(void) { if(led!=0x7f) led = (led 더보기
FND - 99까지 달려라 하니~~ #include #include char seg_pat[10]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x03, 0x58, 0x00, 0x18}; void seg2(int); void main(void) { int num=0; DDRD = 0xFF; DDRF = 0xFF; while(1) { seg2(num); num++; if(num > 99 ) num = 0; } } void seg2(int num) { int i, n10, n1; n10 = num / 10; n1 = num % 10; for(i=0; i 더보기
FND - 0 ~ 9 까지 #include #include char seg_pat[10]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x03, 0x58, 0x00, 0x18}; void main (void ) { int i; DDRD = 0xFF; while(1) { for(i=0; i 더보기
FND - 깜박이기.... #include #include void main ( void ) { DDRD = 0xFF; while(1) { PORTD=0xff; delay_ms(500); PORTD=0x00; delay_ms(500); } } 더보기
스위치 2개로 LED 제어 #include void main ( void ) { unsigned char in_data; // 입력 받은 값을 저장할 변수 DDRD = 0xFF; // 출력 포트로 설정 DDRB = 0x00; // 입력 포트로 설정 while (1) // 무한루프, 키 입력을 대기 { in_data = PINB & 0X03; // 포트의 입력값을 in_data 변수에 저장 switch ( in_data ) // in_data 값의 상태에 따라, { case 0x01 : PORTD = 0xf0; break; case 0x02 : PORTD = 0x0f; break; } } } 더보기