Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.63 KB | None | 0 0
  1. /*****************************************************************************
  2.  *   ex1.c:  main C entry file for Philips LPC214x Family Microprocessors
  3.  *
  4.  *   Copyright(C) 2006, Philips Semiconductor
  5.  *   All rights reserved.
  6.  *
  7. ******************************************************************************/
  8.  
  9. #include "LPC214x.h"                        /* LPC21xx definitions */
  10. #include "type.h"
  11.  
  12. #define BUTTON0 (1<<4)
  13. #define BUTTON1 (1<<5)
  14. #define BUTTON2 (1<<6)
  15. #define BUTTON3 (1<<7)
  16.  
  17. #define LED0 (1<<22)
  18. #define LED1 (1<<23)
  19. #define LED2 (1<<24)
  20. #define LED3 (1<<25)
  21.  
  22. int licznik, start;
  23.  
  24. // zmienne do obslugi klawiatury 'Debouncing'
  25. unsigned int buttonState;
  26. unsigned int newButtonState, oldButtonState;
  27.  
  28. void delay(volatile unsigned int time)
  29. {
  30.     while(time--);
  31. }
  32.  
  33. /*****************************************************************************
  34. **   Main Function  main()
  35. ******************************************************************************/
  36. int main (void)
  37. {
  38. //ustawienie wybranych linii jako wyjściowe, pozostałe będą jako wejściowe
  39.     IODIR1|=LED0|LED1|LED2|LED3;
  40.     IOSET1=LED0|LED1|LED2|LED3;
  41.    
  42.     // Inicjalizacja zmiennych
  43.     buttonState = newButtonState = oldButtonState = 0;
  44.     buttonState = (BUTTON0 | BUTTON1 | BUTTON2 | BUTTON3);
  45.    
  46.     licznik=1000000;
  47.     start=0;
  48.    
  49.     while( 1 )
  50.     {
  51.     if ( start == 0 ){
  52.  
  53.         IOSET1=LED0|LED1|LED2|LED3;
  54.         delay(licznik);
  55.         IOSET1=LED1|LED2|LED3;
  56.         IOCLR1=LED0;
  57.         delay(licznik);
  58.         IOSET1=LED2|LED3;
  59.         IOCLR1=LED0|LED1;
  60.         delay(licznik);
  61.         IOSET1=LED3;
  62.         IOCLR1=LED0|LED1|LED2;
  63.         delay(licznik);
  64.         IOCLR1=LED0|LED1|LED2|LED3;
  65.         delay(licznik);
  66.         IOSET1=LED0;
  67.         IOCLR1=LED1|LED2|LED3;
  68.         delay(licznik);
  69.         IOSET1=LED0|LED1;
  70.         IOCLR1=LED2|LED3;
  71.         delay(licznik);
  72.         IOSET1=LED0|LED1|LED2;
  73.         IOCLR1=LED3;
  74.         delay(licznik);
  75.         IOSET1=LED0|LED1|LED2|LED3;
  76.         delay(licznik);
  77.    
  78.     }
  79.        
  80.         // Czytając IOPIN musimy zamaskowac tylko te piny które nas interesują
  81.         newButtonState = (~IOPIN0 & (BUTTON0 | BUTTON1 | BUTTON2 | BUTTON3));
  82.         // negacja IOPIN ('~'), pozwala miec w zmiennej wcisniety klawisz reprezentowany 1
  83.        
  84.         // jeśli stan klawiszy się zmienił od ostatniego razu
  85.         if (oldButtonState != newButtonState)
  86.         {
  87.           // po krótkim czasie (20ms)...
  88.           delay(20000);              
  89.           // ... ponownie sprawdzamy stan ("debouncing")
  90.           buttonState = (~IOPIN0 & (BUTTON0 | BUTTON1 | BUTTON2 | BUTTON3));  
  91.    
  92.           // sprawdzamy czy nowy stan jest stabilny
  93.           if(buttonState == newButtonState)
  94.           {
  95.             // jeśli stan się zmienił i klawisze zostały oczyszczone
  96.             // 'debounced' (przez ponowne sprawdzenie po ustalonym czasie
  97.             // można być pewnym że to rzeczywiste wciśniecie klawisza
  98.             // a nie zakłócenie lub 'szpilka'
  99.    
  100.             //teraz obsługa klawiatury
  101.             if(buttonState & BUTTON0 ) //jeśli SW0 nie jest wciśnięty
  102.             {
  103.                 licznik=licznik-(licznik/2); //przyspieszenie
  104.             }
  105.             if(buttonState & BUTTON1 ) //jeśli SW1 nie jest wciśnięty
  106.             {
  107.                 licznik=licznik*2; //zwolnienie
  108.             }
  109.             if(buttonState & BUTTON2 ) //jeśli SW2 nie jest wciśnięty
  110.             {
  111.                 start=1; //stop
  112.             }
  113.             if(buttonState & BUTTON3 ) //jeśli SW3 nie jest wciśnięty
  114.             {
  115.                 start=0; //start
  116.             }
  117.            
  118.             //wystaw stan licznika na diody
  119.             IOSET1=LED0|LED1|LED2|LED3;//wygas wszystkie diody
  120.             IOCLR1=(licznik<<22);//zapal te gdzie 1 w liczniku
  121.         }
  122.    
  123.           // przepisanie nowego stanu
  124.           oldButtonState = buttonState;
  125.         }
  126.        
  127.     }
  128.  
  129.     return 0;
  130.  
  131. }
  132.  
  133. /*****************************************************************************
  134. **                            End Of File
  135. *****************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement