Advertisement
milanmetal

[AVR/C] Debouncer preko enablea

Dec 22nd, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. int main(void)
  2. {
  3. DDRD = 0xff; //port D -> izlaz
  4. DDRC = 0x00; //port C -> ulaz
  5. DDRB = 0x0f; //PB3 - PB0 izlazi
  6.  
  7.     while (1)
  8.     {
  9.         /*
  10.          * PINC = 1111 1111 kada ne drzis nijedan taster, kada pritisnes recimo S3, on je na PC3
  11.          * tada PINC = 1111 0111 , obrnuta logika, dobija nulu kada je pritisnut.
  12.          *
  13.          * ~PINC od pritisnutog tastera postaje [[[0000 1000]]], 1 << 3 = 0000 0001 << 3 = [[[0000 1000]]]
  14.          * [[[]]] & [[[]]] == TRUE!!!
  15.          * */
  16.         if(!(~(PINC) & 1 << 3) && !(~(PINC) & 1 << 1)) enable = 1;              //  - hahahahaha ludilo
  17.         // ovo iznad zapravo pita da li su oba tastera otpustena...
  18.         // enable = 1 samo pod uslovom da su oba tastera pustena, i onda cim stisnes nesto
  19.         // on gasi enable i vise ne dozvoljava operacije ++ i -- brojaca dok ponovo ne pustis...
  20.  
  21.         if(enable == 1) {
  22.             // proveravam pritisak UP tastera.
  23.             if(~(PINC) & 1 << 3) {  // UP BTN, S3 --> PC3 s toga 1 << 3
  24.  
  25.                 enable = 0;                             // zabrani ponovni ulazak u ovaj scope
  26.                                                         // i samim tim sprijeci unedogled uvecavanje brojaca
  27.                                                         // dok se drzi taster.
  28.                 uvecajBrojac();
  29.             }
  30.  
  31.             // provera pritiska DOWN tastera
  32.             if(~(PINC) & 1 << 1) {  // DOWN BTN, S1 --> PC1 s toga 1 << 1
  33.  
  34.                 enable = 0;                             // zabrani ponovni ulazak u ovaj scope...
  35.                 umanjiBrojac();
  36.             }
  37.         }
  38.        
  39.         budziNaDisplej();   // ispis vrtis non-stop, neovisno od dozvoli koriscenja tastera.
  40.     }
  41.     return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement