Advertisement
losmi93

Untitled

Jan 12th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. const unsigned char simboli[] = {
  4. 0x0c, 0xa4, 0x27, 0xc4
  5. }; //look-up tabela sa simbolima A,b,C,d
  6. unsigned char DISP_BAFER[4] = {
  7. 0xfe, 0xfe, 0xfe, 0xfe
  8. }; //bafer displeja
  9. unsigned char DISP_BROJ[11] = {
  10. 0b00000101, 0b11011101, 0b01000110, 0b01010100, 0b10011100,
  11. 0b00110100, 0b00100100, 0b01011101, 0b00000100, 0b00010100,
  12. }; //bafer brojeva
  13.  
  14.  
  15. unsigned long millis;
  16. unsigned char disp = 3;
  17. ISR(TIMER0_COMPA_vect)
  18. {
  19. //prekid tajmera 0 usled dostizanja vrednosti registra OCR0A
  20. if (++disp > 3)
  21. disp = 0;
  22. PORTB = ~(1 << (3-disp)); //ukljucenje tranzistora
  23. PORTD = DISP_BAFER[disp]; //ispis na trenutno aktivan displej
  24. millis++; //sistemsko vreme
  25. }
  26. int main()
  27. {
  28. unsigned long t0;
  29. unsigned char i;
  30. //inicijalizacija portova:
  31. DDRB = 0x0f; //PB3-PB0 -> izlazi
  32. DDRD = 0xff; //port D -> izlaz
  33. //inicijalizacija tajmera 0:
  34. TCCR0A = 0x02; //tajmer 0: CTC mod
  35. TCCR0B = 0x03; //tajmer 0: fclk = fosc/64
  36. OCR0A = 249; //perioda tajmera 0: 250 Tclk (OCR0A + 1 = 250)
  37. TIMSK0 = 0x02; //dozvola prekida tajmera 0
  38. //usled dostizanja vrednosti registra OCR0A
  39. sei(); //I = 1 (dozvola prekida)
  40.  
  41. while(1)
  42. {
  43. t0 = millis;
  44. while ((millis - t0) < 500); //pauza 500ms
  45. for (i = 0; i < 4; i++)
  46. DISP_BAFER[i] = DISP_BROJ[i];
  47. t0 = millis;
  48. /* while ((millis - t0) < 500); //pauza 500ms
  49. for (i = 0; i < 4; i++)
  50. DISP_BAFER[i] = 0xfe;*/
  51. }
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement