Kolega przesyłam Ci trochę zmodyfikowany Twój kod (nietestowany więc zachodzi możliwość, że nie będzie działał), ogólnie robisz parę błędów, ale doczytasz Bluebooka to wszystko ogarniesz

Tu kody:
PLIK MAIN.C
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
PLIK LEDS.Hjęzyk c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
PLIK LEDS.C
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
z Niebieskim pozdRowieniem,
Doman89------------------------ [ Dodano po: 11 minutach ]Generalnie to dziwi mnie, że nie masz nigdzie zainkludowanego pliku leds a Ci funkcja działa, dlatego u mnie zmieniłem nazwę pliku define.h na leds.h.
Funkcja leds_init bardziej by mi się kojarzyła z inicjalizacją, niż z funkcją zmieniania trybu, ale zostawiłem tak jak miałeś.
Zmienne int keylock = 1, czy uint16_t key1_lock, key2_lock, na 99% wystarczyłyby uint8_t. Musisz doczytać o zmiennych, bo przy mikrokontrolerach musisz nauczyć się oszczędzać pamięć bo jest jej strasznie mało w porównaniu do PC - to istna przepaść

A teraz czemu nie możesz wyjść z pętli? Tak na oko to mi się rzuca, że przypisujesz zmiennej key_lock wartość 1 (w pliku leds.c). Teraz wpadasz w pętlę nieskończoną while(1) i tu masz warunek jej przerwania: if (!key_lock && KEY1_DOWN), czyli jeżeli key_lock będzie posiadał wartość 0. Ale nie ma możliwości aby taką uzyskał

Bo nigdzie nie ma takiej możliwości w tym while'u.
Tak więc polecam doczytać
