Daro68 napisał(a):
różnica między if i endif
Znowu odeślę ciebie do BB, bo tam wszystko jest. W twardej oprawie na str.141 masz podrozdział 3.6.6. Dyrektywy kompilacji warunkowej.
Jest to bardzo proste, zobacz...
W kodzie mam na przykład:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jest to dyrektywa preprocesora, wszędzie gdzie wystąpi teraz LED_SLOW_DOWN automatycznie zostanie podstawiona tam wartość 1. Mam nadzieję, że to dla ciebie jasne.
Dalej:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Chodzi o to, że pisząc ten kod, nie wiedziałem, czy chcesz aby diody się zapalały/gasiły z tą samą prędkością czy życzysz sobie, by stopniowo zapalały/gasily się wolniej. Dlatego masz opcję do wyboru gdy wpiszesz 1, czyli spowolnienie zapalania/gaszenia diod, a gdy 0 (może być w tym przypadku dowolna cyfra, byle nie była równa 1) to będą się zapalać/gasić bez spowolnienia, z tą samą prędkością.
W eclipsie działa to tak, że linia/linie kodu, które są niektywne, nie są brane pod uwage do kompilacji programu, są wyszarzone. Od razu widzisz, które linie kodu zostaną skompilowane, a które nie. Fajne?!
Daro68 napisał(a):
Wspomniałeś coś o kodzie na 16 stopni no i właśnie problem jak dodać np. port PC do portu PD żeby diody zapalały się kolejno
(podpowiedz mile wskazana)
Interesuje nas tak na prawdę funkcja void leds( uint8_t choice, uint8_t reset)
Powołałem tam zmienną statyczną i z każdym wywołaniem tej funkcji inkrementuję tą zmienną o 1, i++;
Mamy 8 diod, więc ta zmienna powinna przyjmować wartości od 0 do 7, prawda? Dlatego na końcu dałem if(i<8) i++; czyli inkrementuję tą zmienną tylko wtedy, gdy jest mniejsza od 8.
Teraz chcemy mieć 16 diod, więc ta zmienna musi przyjmować wartości od 0 do 15. Czyli damy warunek if(i<16) i++;
Dalej w kodzie mamy:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A tak na prawdę to jest to:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
OK, diody na porcie A zapalają się po kolei.
Dodajemy kolejne 8 diod, tym razem na porcie D.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
No dobra, tylko, że jak tak zrobimy to owszem diody będą się zapalały ale na dwóch portach jednocześnie (równolegle), a my chcemy, by zapały się po kolei, no to jak już się pewnie domyślasz musimy dać jakiegoś if'a, bo przecież diody mają się zapalać dopiero dla naszego i większego od 7, czyli:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A po co jest jeszcze i-8?
Inkrementujemy naszą zmienną i od 0 do 15, a nasze wyświetlanie z przesunięciem bitowym działa prawidłowo dla i w zakresie od 0 do 7, a nie od 8 do 15, dlatego odejmuję jeszcze 8.
Proste?
Identycznie trzeba zrobić dla zapalania diod od prawej do lewej i dwóch pozostałych do gaszenia, no może nie do końca tak samo, bardzo podobnie.