DeTronix napisał(a):
gotowiec hmm a kto by mi chciał to napisać ...
No ja właśnie sobie napisałem dla wprawy. Masz rację nię tędy droga, by wkleić ci tutaj pliki źródłowe, bo tak to się niczego nie nauczysz.
Postaram się w takim razie napisać ci jak ja podszedłem do realizacji tego proramu.
Na początku założyłem sobie, że każdy pin wyświetlacza niezależnie czy to kadoda czy anoda może być podłączony do dowolnego pinu uC.
Napisałem więc sobie makra np dla anody pierwszego wyświetlacza:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I w ten sam sposób dla kolejnych dwóch pozostałych anod.
Następnie w ten sam sposób dla ośmiu katod, dla przykładu katoda od segmentu A:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Następnie zdefiniowałem sobie takie makra dla cyfr od 0 do 9, od 0 do 9 z kropką i jeszcze jedno tzw NIC, czyli wszystkie segmenty wygaszone.
Dla przykładu cyfra "2":
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wygaszenie wszystkich segmentów wyświetlacza:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Oczywiście pamiętając o ustawieniu wszystkich pinów jako wyjścia, oraz ustawieniu timera 0 w tryb CTC, przyszedł czas na procedurę obsługi przerwania Compare Match:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W ten sposób zrealizowałem to multipleksowanie w przerwaniu.
Kompilujemy, wgrywamy... i naszym oczom powinny się kolejno pojawić cyfry 1,2 oraz 3 na wyświetlaczach LED.
Teraz tylko pozostało ci wymyślić sposób na wyświetlanie cyfr na kolejnych wyświetlaczach w zależności od zmiennych globalnych przechowujących cyfry do wyświetlania: uint8_t cy1; uint8_t cy2; uint8_t cy3;
Nie będzie to skomplikowane, prawda?
Podpowiem ci, że trzeba będzie zastąpić czymś CY1; CY2; oraz CY3; w tym przerwaniu. No właśnie czym?
Pozdrawiam.