Zauważmy, że przycisk S1 podłączony jest to masy. Oznacza to, że reakcja diody musi mieć miejsce, gdy stan na pinie PB0 będzie 0. Kondensator C3 ma za zadanie tłumnie drgań styków przełącznika. Układ działa bardzo prosto - naciśnięcie przycisku zapala bądź gasi diodę LED. Wsad do procesora wygląda następująco:
#include <avr/io.h> #include <util/delay.h> #define LED PB1 #define CLICK PB0 int main(void) { int flag=0; //Ustawiamy pin PB1 jako wyjście DDRB|=(1<<LED); //gasimy diodę PORTB&=~(1<<LED); //Ustawiamy pin PB0 jako wejście DDRB|=(1<<CLICK); PORTB|=(1<<CLICK); //podciagamy wewnetrzne rezystory while(1) { if(!(PINB & (1<<CLICK))) { if(!(PINB & (1<<CLICK))){ if (!flag) {PORTB|=(1<<LED); flag=1;} else {PORTB^=(1<<LED);flag=0;}} } _delay_ms(100); } }
Drugi układ, który przetestowałem był prawie identyczny z tym, że przełącznik był podłączony do Vcc zamiast do masy. W sumie działa to tak samo ale różni się nieco wsad do procesora.
#include <avr/io.h> #include <util/delay.h> #define LED PB1 #define CLICK PB0 int main(void) { int flag=0; //Ustawiamy pin PB1 jako wyjście DDRB|=(1<<LED); //gasimy diodę PORTB&=~(1<<LED); //Ustawiamy pin PB0 jako wejście DDRB|=(1<<CLICK); while(1) { if((PINB & (1<<CLICK))) { if((PINB & (1<<CLICK))){ if (!flag) {PORTB|=(1<<LED); flag=1;} else {PORTB^=(1<<LED);flag=0;}} } _delay_ms(250); } }
Działanie układu na filmie:
Trzeci układ umożliwiał naprzemienne zapalanie i gaszenie diod LED.
#include <avr/io.h> #include <util/delay.h> #define LED1 PB1 #define LED2 PB2 #define CLICK PB0 int main(void) { //Ustawiamy pin PB1 jako wyjście DDRB|=(1<<LED1)|(1<<LED2); //gasimy diodę PORTB|=(1<<LED1); PORTB&=~(1<<LED2); //Ustawiamy pin PB0 jako wejście DDRB|=(1<<CLICK); while(1) //infinite loop { if((PINB & (1<<CLICK))) //If switch is pressed { if((PINB & (1<<CLICK))){ PORTB^=(1<<LED1); PORTB^=(1<<LED2);} _delay_ms(500); } }}
Brak komentarzy:
Prześlij komentarz