Przyszedł czas na drugi kod programu zamieszczanego na łamach niniejszej strony. Jest to rozszerzenie programu pierwszego (dostępnego tutaj: http://kodx.pl/projekty-avr/atmega8-rezystor-dioda/ ).
Do projektu potrzebny nam będzie oprócz kompletnego układu wyjściowego , i dołożonej diody i opornika z pierwszego projektu przełącznik astabilny typu microswitch, i zworka z drutu.
Przełącznik podłączyłem między wyprowadzenie 28 mikroprocesora (PC5), a linię 15 na płytce stykowej. Następnie połączyłem linię 15 płytki stykowej za pomocą zworki do GND.
Podłączenie zdjęcia:
Kod źródłowy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
/* * _02___dioda___switch.c * * Created: 2015-02-05 10:03:01 * Author: kodx.pl */ #include <avr/io.h> #include <util/delay.h> #define LED (1<<PB1) #define LED_ON PORTB &= ~LED #define LED_OFF PORTB |= LED #define SW (1<<PC5) //definicja wyprowadzenia do którego podpięty jest microswitch #define SW_ON !(PINC & SW) //definiowanie przyciśniętego przycisku SW int czy_wcisniety(); //deklaracja funkcji obsługi klawisza int main(void) { DDRC &= ~SW; //ustawienie wyprowadzenia PC5 mikrokontrolera jako wejściowego PORTC |= SW; //podciągnięcie wyprowadzenia PC5 mikrokontolera do VCC DDRB |= LED; PORTB |= LED; //wyłączenie diody LED while(1) { if (czy_wcisniety()) { LED_ON; _delay_ms(50); LED_OFF; _delay_ms(50); } } } int czy_wcisniety() { if (SW_ON) //jeśli klawisz wciśnięty { _delay_ms(50); //odczekaj na ustabilizowanie się drgań styków if (SW_ON) //jeżeli dalej wciśnięty { // v return 1; //zakończ działanie funkcji i zwróć 1 } // v } // v return 0; //jeżeli dalej nie wciśnięty zakończ funkcję zwracając 0 } |
Opis działania programu:
W programie zdefiniowane zostało wyprowadzenie mikrokontrolera jako WEJŚCIE, które umożliwia interakcję z mikrokontrolerem. Jeżeli program w głównej pętli wykryje zwarcie linii PC5 do masy wówczas rozpoczyna wykonywanie funkcji czy_wcisniety która powoduje mruganie diodą LED, w przeciwnym razie dioda nie zapala się.
Aby ułatwić pisanie kodu zostało zdefiniowane makro SW_ON, które jest w wyniku działania wystawia (“1”) gdy spełniony zostanie warunek zwartego wyprowadzenia PC5 mikrokontrolera.