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:
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.