Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*****************************************************************************
- * ex1.c: main C entry file for Philips LPC214x Family Microprocessors
- *
- * Copyright(C) 2006, Philips Semiconductor
- * All rights reserved.
- *
- ******************************************************************************/
- #include "LPC214x.h" /* LPC21xx definitions */
- #include "type.h"
- #define BUTTON0 (1<<4)
- #define BUTTON1 (1<<5)
- #define BUTTON2 (1<<6)
- #define BUTTON3 (1<<7)
- #define LED0 (1<<22)
- #define LED1 (1<<23)
- #define LED2 (1<<24)
- #define LED3 (1<<25)
- int licznik, start;
- // zmienne do obslugi klawiatury 'Debouncing'
- unsigned int buttonState;
- unsigned int newButtonState, oldButtonState;
- void delay(volatile unsigned int time)
- {
- while(time--);
- }
- /*****************************************************************************
- ** Main Function main()
- ******************************************************************************/
- int main (void)
- {
- //ustawienie wybranych linii jako wyjściowe, pozostałe będą jako wejściowe
- IODIR1|=LED0|LED1|LED2|LED3;
- IOSET1=LED0|LED1|LED2|LED3;
- // Inicjalizacja zmiennych
- buttonState = newButtonState = oldButtonState = 0;
- buttonState = (BUTTON0 | BUTTON1 | BUTTON2 | BUTTON3);
- licznik=1000000;
- start=0;
- while( 1 )
- {
- if ( start == 0 ){
- IOSET1=LED0|LED1|LED2|LED3;
- delay(licznik);
- IOSET1=LED1|LED2|LED3;
- IOCLR1=LED0;
- delay(licznik);
- IOSET1=LED2|LED3;
- IOCLR1=LED0|LED1;
- delay(licznik);
- IOSET1=LED3;
- IOCLR1=LED0|LED1|LED2;
- delay(licznik);
- IOCLR1=LED0|LED1|LED2|LED3;
- delay(licznik);
- IOSET1=LED0;
- IOCLR1=LED1|LED2|LED3;
- delay(licznik);
- IOSET1=LED0|LED1;
- IOCLR1=LED2|LED3;
- delay(licznik);
- IOSET1=LED0|LED1|LED2;
- IOCLR1=LED3;
- delay(licznik);
- IOSET1=LED0|LED1|LED2|LED3;
- delay(licznik);
- }
- // Czytając IOPIN musimy zamaskowac tylko te piny które nas interesują
- newButtonState = (~IOPIN0 & (BUTTON0 | BUTTON1 | BUTTON2 | BUTTON3));
- // negacja IOPIN ('~'), pozwala miec w zmiennej wcisniety klawisz reprezentowany 1
- // jeśli stan klawiszy się zmienił od ostatniego razu
- if (oldButtonState != newButtonState)
- {
- // po krótkim czasie (20ms)...
- delay(20000);
- // ... ponownie sprawdzamy stan ("debouncing")
- buttonState = (~IOPIN0 & (BUTTON0 | BUTTON1 | BUTTON2 | BUTTON3));
- // sprawdzamy czy nowy stan jest stabilny
- if(buttonState == newButtonState)
- {
- // jeśli stan się zmienił i klawisze zostały oczyszczone
- // 'debounced' (przez ponowne sprawdzenie po ustalonym czasie
- // można być pewnym że to rzeczywiste wciśniecie klawisza
- // a nie zakłócenie lub 'szpilka'
- //teraz obsługa klawiatury
- if(buttonState & BUTTON0 ) //jeśli SW0 nie jest wciśnięty
- {
- licznik=licznik-(licznik/2); //przyspieszenie
- }
- if(buttonState & BUTTON1 ) //jeśli SW1 nie jest wciśnięty
- {
- licznik=licznik*2; //zwolnienie
- }
- if(buttonState & BUTTON2 ) //jeśli SW2 nie jest wciśnięty
- {
- start=1; //stop
- }
- if(buttonState & BUTTON3 ) //jeśli SW3 nie jest wciśnięty
- {
- start=0; //start
- }
- //wystaw stan licznika na diody
- IOSET1=LED0|LED1|LED2|LED3;//wygas wszystkie diody
- IOCLR1=(licznik<<22);//zapal te gdzie 1 w liczniku
- }
- // przepisanie nowego stanu
- oldButtonState = buttonState;
- }
- }
- return 0;
- }
- /*****************************************************************************
- ** End Of File
- *****************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement