Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define F_CPU 1000000UL
- #include <avr/io.h>
- #include <avr/interrupt.h>
- volatile int milisekundy = 0;
- volatile int przelaczEkran = 0;
- volatile int tickDiody = 0;
- void wyswietlLiczbe(int liczba);
- volatile int sekundy = 0;
- int main()
- {
- DDRA = 0xFF;
- DDRB = 0x01;
- DDRA = 0xFF; // port A wyjscia
- TCCR0 = (1 << WGM01) | (1 << CS01); // tryb CTC i preskaler 8
- TIMSK |= (1 << OCIE0); // przerwanie od porownania
- OCR0 = 125; // 1MHz z presk. 8 -> 0.001s przy 125 na OCR0
- sei();
- while(1)
- {
- if (przelaczEkran == 1)
- {
- // przelaczenie_ekranu
- przelaczEkran = 0;
- }
- if (tickDiody == 1)
- {
- PORTB ^= (1 << PB0);
- tickDiody = 0;
- }
- if (sekundy > 9)
- {
- sekundy = 0;
- }
- wyswietlLiczbe(sekundy);
- }
- }
- ISR(TIMER0_COMP_vect)
- {
- milisekundy++;
- if (milisekundy % 25 == 0)
- {
- przelaczEkran = 1;
- }
- if (milisekundy == 500)
- {
- tickDiody = 1;
- }
- if (milisekundy == 1000)
- {
- sekundy++;
- tickDiody = 1;
- milisekundy = 0;
- }
- }
- void wyswietlLiczbe(int liczba)
- {
- switch (liczba)
- {
- case 1:
- PORTA = 0b00000110;
- break;
- case 2:
- PORTA = 0b01011011;
- break;
- case 3:
- PORTA = 0b01001111;
- break;
- case 4:
- PORTA = 0b01100110;
- break;
- case 5:
- PORTA = 0b01101101;
- break;
- case 6:
- PORTA = 0b01111101;
- break;
- case 7:
- PORTA = 0b00000111;
- break;
- case 8:
- PORTA = 0b01111111;
- break;
- case 9:
- PORTA = 0b01101111;
- break;
- default:
- PORTA = 0b00111111; // 0
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement