From e9a92f16b292ea4967ec5dd9fd36b4b49311a8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Wed, 20 Jan 2016 10:53:08 +0100 Subject: [PATCH] add matrix selector --- main.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index 4b3e788..0eb9d82 100644 --- a/main.c +++ b/main.c @@ -214,7 +214,6 @@ static const uint8_t ascii_7segments[] = { /* put digit into memory */ static void vfd_digit(uint8_t nb, char c) { - (void)c; // there are only 10 digits if (nb>9) { return; @@ -246,6 +245,24 @@ static void vfd_digit(uint8_t nb, char c) vfd_data[2] = 0; } +static void vfd_matrix(uint8_t nb, char c) +{ + (void)c; + // there are only 12 matrix + if (nb>11) { + return; + } else if (nb<4) { + vfd_data[0] = 0; + vfd_data[1] = 1<<(3-nb); // select digit + } else { + vfd_data[0] = 1<<(35-nb); // select digit + vfd_data[1] = 0; + } + + vfd_data[1] |= 0xff000000; + vfd_data[2] = 0xffffffff; +} + int main(void) { SCB_VTOR = (uint32_t) 0x08002000; // relocate vector table because of the bootloader @@ -267,6 +284,7 @@ int main(void) bool vfd_transmit = false; uint8_t digit = 0; uint8_t c = 0; + vfd_digit(0,0); /* blink the LED with every transmitted character */ while (1) { while (usart_received) { // echo every received character @@ -280,10 +298,11 @@ int main(void) vfd_transmit = true; } while (vfd_transmit) { + vfd_transmit = false; c = digit+'0'; - vfd_digit(digit,c); + vfd_matrix(digit,c); vfd_shift(); - digit = (digit+1)%10; + digit = (digit+1)%12; // let the fluorescence glow up a bit for (uint32_t i = 0; i < 0x2000; i++) { __asm__("nop");