풀다운으로 연결하면 켜졌다가 버튼 누르면 꺼짐
풀업으로 연결하면 꺼져있다가 버튼 누르면 켜짐
#define F_CPU 16000000UL #include <avr/io.h> #define LED1 PORTD6 #define LED2 PORTD7 #define BUTTON PORTB0 uint8_t key_lock =0; int main(void) { DDRD = (1 << LED1) | (1 << LED2) ; DDRB &= ~(1 << BUTTON); while (1) { if (!(PINB & (1 <<BUTTON))) { PORTD |= (1 <<LED1) | (1<< LED2); } else{ PORTD &= ~((1 << LED1) | (1 << LED2)); } } }
DDRB &= ~(1 << BUTTON);
DDRB = DDRB & ~(1 << BUTTON);

1. 디바운스 처리 .. 하긴 했는데 좀 잘 안되는 코드
2. 버튼 1회 누르면 LED ON 상태 유지, 다시 누르면 off 상태 유지 처리
#define F_CPU 16000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define LED1 PORTD6 #define LED2 PORTD7 #define BUTTON PORTB0 #define PRESSED 1 #define RELEASED 0 #define DEBOUNCE_MS 150 int main() { DDRD = (1 << LED1 | 1 << LED2 ); // 1 : 출력핀 세팅 DDRB = ~(1 << BUTTON); // 0 : 입력핀 세팅 , 0x00 으로 세팅해도 됨 int before = RELEASED; while (1) { if (PINB & (1 << BUTTON) && before == RELEASED) { _delay_ms(DEBOUNCE_MS); PORTD |= (1 << LED1) | (1 << LED2); before = PRESSED; } else if (PINB & ( 1 << BUTTON) && before == PRESSED ) { _delay_ms(DEBOUNCE_MS); PORTD &= ~((1 << LED1) | (1 << LED2)); before=RELEASED; } } }
'임베디드 > Atmega328p' 카테고리의 다른 글
interrupt 하나 사용 ,LED 하나 (0) | 2020.11.05 |
---|---|
atmega 328p port ddrx (0) | 2020.11.04 |
arduino uno atmega pin map (0) | 2020.11.03 |
201103_LedBlink.c / DDRx (0) | 2020.11.03 |
atmega328p datasheet (0) | 2020.11.03 |