From a81393029f49e4f7b4281fe2b3413ad00a5a1f64 Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 30 Apr 2008 22:54:01 +0000 Subject: [PATCH] implemented looping logic to display all three digits git-svn-id: svn://anubis/misc/parapin-led@54 bd8a9e45-a331-0410-811e-c64571078777 --- led.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/led.c b/led.c index 3da73b5..65c65fd 100644 --- a/led.c +++ b/led.c @@ -1,6 +1,7 @@ #include -#include +#include /* atoi() */ +#include /* usleep() */ #define LED_A LP_PIN02 #define LED_B LP_PIN03 @@ -19,6 +20,8 @@ #define LED_ALL (LED_A | LED_B | LED_C | LED_D | LED_E | LED_F | LED_G | LED_DP | LED_1 | LED_2 | LED_3) +#define DELAY 250 /* microsecond delay between displaying digits */ + int digit2pins[] = { LED_A | LED_B | LED_C | LED_D | LED_E | LED_F, LED_B | LED_C, @@ -39,6 +42,7 @@ int position2pins[] = { }; void turnOnDigit(int digitPosition, int value); +void shutDown(int p); int main(int argc, char * argv[]) { @@ -50,8 +54,34 @@ int main(int argc, char * argv[]) if (argc == 2) { + /* get the value to display from the command-line */ int value = atoi(argv[1]); - turnOnDigit(2, value % 10); + + /* register an interrupt signal handler to clear the pins */ + signal(SIGINT, shutDown); + + int digits[3]; + register int i; + for (i = 0; i < 3; i++) + { + digits[2-i] = value % 10; + value /= 10; + } + + /* loop displaying digits */ + i = 0; + for (;;) + { + turnOnDigit(i, digits[i]); + usleep(DELAY); + i++; + if (i == 3) + i = 0; + } + } + else + { + clear_pin(LED_ALL); } } @@ -65,3 +95,8 @@ void turnOnDigit(int digitPosition, int value) pinSet |= digit2pins[value]; set_pin(pinSet); } + +void shutDown(int p) +{ + clear_pin(LED_ALL); +}