Når bryteren koblet til PD2 trykkes, skal telleren starte og stoppe

C Program: Når bryteren er koblet til PD2 trykkes , telleren starte og stoppe 


Solution:
  1. // Oppgave 1d) med endringer: Når bryteren koblet til PD2 trykkes, skal telleren starte og stoppe.
  2.  
  3. #include <avr/io.h>
  4. #include "LedOgBrytereIOKort.h"
  5. #include "BitManipulation.h"
  6. #define F_CPU 16000000L
  7. #include <util/delay.h>
  8.  
  9. #define PD2_ER_TRYKKET !(BIT_CHECK(PIND,2)) // PIND 2 ligger på 00000010.
  10. #define PD3_ER_TRYKKET !(BIT_CHECK(PIND,3)) // PIND 3 ligger på 00000100.
  11.  
  12. int main(void)
  13. {
  14.         int i=1;
  15.         init_LedBryterKort();
  16.        
  17.         skrivTilLeds(~0);                   //slukker lysene
  18.        
  19.         TCCR1B = (1<<CS12) | (1<<CS10);     //Enable counter1 set prescaler 1024
  20.         TCNT1=0;
  21.  
  22.                
  23.     while(1) // Koden får telleren til å starte/stoppe ved hvert trykk.
  24.     {
  25.                 if (PD2_ER_TRYKKET)
  26.                 {
  27.                         _delay_ms(150);                                         //Sett ein delay før koden utførast pga. følsomheten til knappen. Ett trykk kan registrerast som fleire trykk.
  28.                                                                                                 //Med delay på 150ms vil fleire trykk innanfor perioden ikkje registrerast.
  29.                         if(TCCR1B==0)                                           //Om klokkeregisteret er lik 0 så:
  30.                            TCCR1B = (1<<CS12) | (1<<CS10);  //setter klokka til syscly/1024
  31.                         else      
  32.                           TCCR1B=0;                                                     //stopper klokka
  33.                 }
  34.                 skrivTilLeds(~(TCNT1>>8));
  35.     }
  36. }


Learn More :