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 <parapin.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h> /* atoi() */
|
||||||
|
#include <unistd.h> /* usleep() */
|
||||||
|
|
||||||
#define LED_A LP_PIN02
|
#define LED_A LP_PIN02
|
||||||
#define LED_B LP_PIN03
|
#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 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[] = {
|
int digit2pins[] = {
|
||||||
LED_A | LED_B | LED_C | LED_D | LED_E | LED_F,
|
LED_A | LED_B | LED_C | LED_D | LED_E | LED_F,
|
||||||
LED_B | LED_C,
|
LED_B | LED_C,
|
||||||
@ -39,6 +42,7 @@ int position2pins[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void turnOnDigit(int digitPosition, int value);
|
void turnOnDigit(int digitPosition, int value);
|
||||||
|
void shutDown(int p);
|
||||||
|
|
||||||
int main(int argc, char * argv[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
@ -50,8 +54,34 @@ int main(int argc, char * argv[])
|
|||||||
|
|
||||||
if (argc == 2)
|
if (argc == 2)
|
||||||
{
|
{
|
||||||
|
/* get the value to display from the command-line */
|
||||||
int value = atoi(argv[1]);
|
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];
|
pinSet |= digit2pins[value];
|
||||||
set_pin(pinSet);
|
set_pin(pinSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void shutDown(int p)
|
||||||
|
{
|
||||||
|
clear_pin(LED_ALL);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user