- Dział: arts -
elektronika/wyswietlacz_segmentowy_4_asm
Cztery wyświetlacze segmentowe po 8 znaków w Asemblerze z attiny3113
cel
Kontynuacja pracy nad ekranem segmentowym zakonczona sukcesem
Ekran
Do dyspozycji mam AF-05643FS-B
rozbijanie liczby na czesci
Aby wyświeetlić liczbę z przedziału od 0 do 255. Potrzeba ją rozbic na 3 częsci. Na setki dziesiątki i jednosci, zmiesci się to na 3 ekranach.
Algorytm własny
0. wczytaj liczbe a, s=0,d=0,j=0
1. jezeli a >= 100 to: a = a-100, s = s+1, skocz do kroku 1
2. jezeli a >= 10 to: a = a-10, d = d+1, skocz do kroku 2
3. j=a
to samo w asemblerze dla mikrokontrolerów firmy ATMEL:
rozbij:
push liczba
clr setki
clr dzies
clr jedno
rozbij_setki_ret:
CPI liczba,100
BRSH rozbij_setki
rozbij_dziesiatki_ret:
CPI liczba,10
BRSH rozbij_dziesiatki
mov jedno,liczba
pop liczba
ret
;procedura pomocnicza
rozbij_setki:
subi liczba,100
inc setki
rjmp rozbij_setki_ret;
;procedura pomocnicza
rozbij_dziesiatki:
subi liczba,10
inc dzies
rjmp rozbij_dziesiatki_ret;
Co robi program
- 1. zwieksza liczbe
- 2. przez około 1s wyswietla ją na 3ekranach segmentowycj
- 3. skok do kroku 1
UWAGA: działanie programu opiera się na zasadzie: 255+1 = 1 Tym samym nie ma błędu
Jak wyswietlić obraz na 3 ekranach?
Można oczywiscie każdy ekran podłączyć osobno 8+8+8 pinów razem 24piny..nie da się tego łatwo zrobić zwłaszcz że attiny ma tylko 20 pin w tym 18 może działac jako port I/O!
Ale jest na to rada. Ja zrobiłem tak: podłączyłem tylko 8pin + 3na wybór ekranu. A oto sztuczka: Ustawiasz stan pinów, włączasz zasilanie ekranu 1 czekasz aż diody się 'nagrzeją' i zapalą Gasisz. Ustawiasz stan pinów, włączasz zasilanie ekranu 2 czekasz aż diody się 'nagrzeją' i zapalą Gasisz. Ustawiasz stan pinów, włączasz zasilanie ekranu 3 czekasz aż diody się 'nagrzeją' i zapalą i tak w kółko. poprostu mikrokontroler robi to na tyle szybko że diody nie zdąża jeszcze zgasnąć a już znów mają prąd.
Film - Układ w działaniu
Film przedstawia układu w działaniu.
Download
Pobierz pełen projekt na mojej stronie klik