diff --git a/ES/Lab/Lab8/7SegUpDown-Switch.c b/ES/Lab/Lab8/7SegUpDown-Switch.c new file mode 100644 index 0000000..7a5a1e4 --- /dev/null +++ b/ES/Lab/Lab8/7SegUpDown-Switch.c @@ -0,0 +1,47 @@ +#include + +int main(void){ + unsigned long i, j, n; + unsigned int x; + unsigned long number = 0; + unsigned long count = 0; + unsigned char seven_seg[16] = { + 0x3F, 0x06, 0x5B, 0x4F, + 0x66, 0x6D, 0x7D, 0x07, + 0x7F, 0x6F, 0x77, 0x7C, + 0x39, 0x5E, 0x79, 0x71 + }; + + LPC_PINCON->PINSEL0 = 0; + LPC_GPIO0->FIODIR |= (0xFF << 4); + LPC_PINCON->PINSEL3 = 0; + LPC_GPIO1->FIODIR |= (0x0F << 23); + LPC_GPIO0->FIODIR &= ~(1 << 21); + + while (1) { + n = number; + x = LPC_GPIO0->FIOPIN & (1 << 21); + + for (i = 0; i < 4; i++) { + LPC_GPIO1->FIOCLR = (0x0F << 23); + LPC_GPIO1->FIOSET = (i << 23); + LPC_GPIO0->FIOCLR = (0xFF << 4); + LPC_GPIO0->FIOSET = ((unsigned long)seven_seg[n % 10] << 4); + n = n / 10; + for (j = 0; j < 1000; j++); + LPC_GPIO0->FIOCLR = (0xFF << 4); + } + + count++; + if (count == 1000) { + count = 0; + if (x) { + number = (number + 1) % 10000; + } else { + if (number == 0) number = 9999; + else number--; + } + } + } + +}