A wiec przerabiam bibliotekę z BB do wyświetlacza LED chcę zrobić termometr na wyświetlaczu RED-GREEN

/atmega8
Pytanie nr.1
Moim zamysłem jest aby wyświetlacz świecił na czerwono gdy jest temperatura dodatnia i zielono gdy jest ujemna.
Oczywiście ćwiczę na ATB więc pomyślałem że po prostu 2wie pierwsze cyferki będą jako czerwony ,a 2wie drugie jako "zielony"
Zmieniłem nieco funkcję w obsłudze przerwania która jest załączana po przez warunek w IFIe (zmienną subzero2 sprawdzam czy temperatura jest ujemna) funkcja wygląda tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Niby wszytko fajnie ale tak sobie myślę czy nie można by to zrobić lepiej bo na wyświetlaczu nr.3 jest widoczna lekka poświata tak jakby cyfry 2 Bo ja to zrobiłem przypisując zgaszony wyświetlacz indeksem tablicy nr.16
Moim zdaniem lepiej by było po prostu wyłączyć te anody(zielonego wyświetlacza) a włączyć te czerwonego gdy jest temperatura dodatnia i odwrotnie gdy będzie temperatura ujemna włączyć anody zielonego ,a wyłączyć czerwonego -tylko nie mam pomysłu jak to zmienić w kodzie.
2.A drugie pytanie dotyczy bardziej kompilatora
a więc tworzę zmienną volatile aby móc ją obsługiwać w przerwaniu
Kod:
volatile uint8_t subzero2//zmienna oznaczająca temperaturę ujemną
i kompilator mi krzyczy że jej nie zadeklarowałem mimo że to zrobiłem w pliku main.c
(lub tylko w pliku d_led.c)
a jak dodam ją też w pliki d_led.c i w pliku main.c (czyli w 2 plikach jednocześnie) wtedy się kompiluje
jednym słowem muszę zadeklarować tą samą zmienną w 2 plikach źródłowych bo pliki z rozszerzeniem *.c to przecież są pliki źródłowe prawda ? więc co za różnica czy jest w main.c czy d_led.c ?
Dlaczego tak się dzieje ?