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:
parent
47b8b9e17c
commit
a81393029f
39
led.c
39
led.c
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user