Pokusacu ja da objasnim algoritam kako bi to trebao da izvedes osvezavanje led displeja.
Tajmer podesis da pravi interrupt na 1ms. Prekid na 1s je mnogo sporo za osvezavanje displeja.
E sad u interrup rutini napises sledece:
Interrupt Ovf0(), Save 1
Pr = Pr + 1 ; neka promenljiva koja se uvecava svakim ulaskom u interrup rutini
IF Pr > 2 Then Pr = 0 ; ako je promenljiva veca od 2 vrati promenljivu na 0
Reset PORTB.0 ' turn off all segments
Reset PORTB.1
Reset PORTB.2
IF Pr = 0 Then
PORTD = segment_number((number mod 1000) / 100)
Set PORTB.0 ; Ukljuci prvu cifru
Endif
IF Pr = 1 Then
PORTD = segment_number((number mod 100) / 10)
Set PORTB.1 ; Ukljuci drugu cifru
Endif
IF Pr = 2 Then
PORTD = segment_number((number mod 10))
Set PORTB.2 ; Ukljuci trecu cifru
Endif
End Interrupt
Ovako bi trebalo da izgleda interap rutina u kojoj osvezavas displej.
Ne programiram AVR mikrokontrolere proveri da li ce tvoj kompajler da prihvati ovaj kod.
Tajmer podesis da pravi interrupt na 1ms. Prekid na 1s je mnogo sporo za osvezavanje displeja.
E sad u interrup rutini napises sledece:
Interrupt Ovf0(), Save 1
Pr = Pr + 1 ; neka promenljiva koja se uvecava svakim ulaskom u interrup rutini
IF Pr > 2 Then Pr = 0 ; ako je promenljiva veca od 2 vrati promenljivu na 0
Reset PORTB.0 ' turn off all segments
Reset PORTB.1
Reset PORTB.2
IF Pr = 0 Then
PORTD = segment_number((number mod 1000) / 100)
Set PORTB.0 ; Ukljuci prvu cifru
Endif
IF Pr = 1 Then
PORTD = segment_number((number mod 100) / 10)
Set PORTB.1 ; Ukljuci drugu cifru
Endif
IF Pr = 2 Then
PORTD = segment_number((number mod 10))
Set PORTB.2 ; Ukljuci trecu cifru
Endif
End Interrupt
Ovako bi trebalo da izgleda interap rutina u kojoj osvezavas displej.
Ne programiram AVR mikrokontrolere proveri da li ce tvoj kompajler da prihvati ovaj kod.