Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- const unsigned char simboli[] = {
- 0x0c, 0xa4, 0x27, 0xc4
- }; //look-up tabela sa simbolima A,b,C,d
- unsigned char DISP_BAFER[4] = {
- 0xfe, 0xfe, 0xfe, 0xfe
- }; //bafer displeja
- unsigned char DISP_BROJ[11] = {
- 0b00000101, 0b11011101, 0b01000110, 0b01010100, 0b10011100,
- 0b00110100, 0b00100100, 0b01011101, 0b00000100, 0b00010100,
- }; //bafer brojeva
- unsigned long millis;
- unsigned char disp = 3;
- ISR(TIMER0_COMPA_vect)
- {
- //prekid tajmera 0 usled dostizanja vrednosti registra OCR0A
- if (++disp > 3)
- disp = 0;
- PORTB = ~(1 << (3-disp)); //ukljucenje tranzistora
- PORTD = DISP_BAFER[disp]; //ispis na trenutno aktivan displej
- millis++; //sistemsko vreme
- }
- int main()
- {
- unsigned long t0;
- unsigned char i;
- //inicijalizacija portova:
- DDRB = 0x0f; //PB3-PB0 -> izlazi
- DDRD = 0xff; //port D -> izlaz
- //inicijalizacija tajmera 0:
- TCCR0A = 0x02; //tajmer 0: CTC mod
- TCCR0B = 0x03; //tajmer 0: fclk = fosc/64
- OCR0A = 249; //perioda tajmera 0: 250 Tclk (OCR0A + 1 = 250)
- TIMSK0 = 0x02; //dozvola prekida tajmera 0
- //usled dostizanja vrednosti registra OCR0A
- sei(); //I = 1 (dozvola prekida)
- while(1)
- {
- t0 = millis;
- while ((millis - t0) < 500); //pauza 500ms
- for (i = 0; i < 4; i++)
- DISP_BAFER[i] = DISP_BROJ[i];
- t0 = millis;
- /* while ((millis - t0) < 500); //pauza 500ms
- for (i = 0; i < 4; i++)
- DISP_BAFER[i] = 0xfe;*/
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement