implemented looping logic to display all three digits

git-svn-id: svn://anubis/misc/parapin-led@54 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
josh 2008-04-30 22:54:01 +00:00
parent 47b8b9e17c
commit a81393029f

39
led.c
View File

@ -1,6 +1,7 @@
#include <parapin.h>
#include <stdlib.h>
#include <stdlib.h> /* atoi() */
#include <unistd.h> /* 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);
}