Advertisement
milanmetal

Sa vezbi / Kockica 1-6

Jan 13th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.42 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3.  
  4. const unsigned char cifre[] = {
  5.         0xdd, 0x46, 0x54, 0x9c, 0x34, 0x24
  6. }; //decimalne cifre 1..6
  7.  
  8. unsigned char kockica = 0, brojac = 0, ukljuceno = 1;
  9.  
  10. ISR(TIMER0_COMPA_vect)
  11. {
  12.     //prekid tajmera 0 usled dostizanja vrednosti registra OCR0A
  13.     if (!ukljuceno)
  14.     brojac = 0;
  15.    
  16.     if (++brojac == 40)
  17.     {
  18.         brojac = 0;
  19.         //promena stanja kockice desava se na svakih 40ms
  20.         if (++kockica == 7)
  21.         kockica = 1;
  22.        
  23.         PORTD = cifre[kockica - 1];
  24.     }
  25. }
  26.  
  27. ISR(PCINT1_vect)
  28. {
  29.     //prekid usled promene stanja pina PCINT10 ili pina PCINT8
  30.     switch ((~PINC) & 0x05)
  31.     {
  32.         case 0x01: //pritisnut levi taster
  33.             ukljuceno = 1;
  34.         break;
  35.         case 0x04: //pritisnut desni taster
  36.             ukljuceno = 0;
  37.         break;
  38.     }
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44.     //inicijalizacija portova:
  45.     DDRB = 0x01; //PB0 -> izlaz
  46.     DDRC = 0x00; //port C -> ulaz
  47.     DDRD = 0xff; //port D -> izlaz
  48.     PORTB = ~0x01; //ukljucenje displeja D4
  49.  
  50.     PCICR = (1 << PCIE1); //dozvola prekida usled promene stanja
  51.     PCMSK1 = 0x05; //pina PCINT10, ili pina PCINT8
  52.  
  53.     //inicijalizacija tajmera 0:
  54.     TCCR0A = 0x02; //tajmer 0: CTC mod
  55.     TCCR0B = 0x03; //tajmer 0: fclk = fosc/64
  56.     OCR0A = 249; //perioda tajmera 0: 250 Tclk (OCR0A + 1 = 250)
  57.     TIMSK0 = 0x02; //dozvola prekida tajmera 0
  58.     //usled dostizanja vrednosti registra OCR0A
  59.  
  60.     sei(); //I = 1 (dozvola prekida)
  61.  
  62.     while(1); //glavni program se vrti u praznoj petlji
  63.     //i ceka prekide
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement