diff -r 04c625712e35 -r 3b837eaf1b6d src/hello.c --- a/src/hello.c Fri Apr 04 00:26:16 2014 +0300 +++ b/src/hello.c Fri Apr 04 01:04:41 2014 +0300 @@ -122,7 +122,10 @@ #define LED7_OE PORTB1 // common anode? -#define LED7_ANODE 1 +#define LED7_ANODE 0 + +#define LED7_OFFSET 0 +#define LED7_COUNT 2 static const uint8_t LED7SEG_FONT[] = { 0b00111111, // 0 @@ -156,21 +159,37 @@ /* * Update external IO. */ -void led7_update (void) +void led7_update_raw (uint8_t *led7, char count) { - static char i = 0; + int i; + + for (i = 0; i < count; i++) { + char raw = LED7SEG_FONT[led7[i]]; + + spi_tx[LED7_OFFSET + i] = LED7_ANODE ? ~raw : raw; + } +} + +void led7_update_hex (unsigned char c) +{ + uint8_t led7[2]; + + led7[0] = c >> 4; + led7[1] = c & 0xF; + + return led7_update_raw(led7, sizeof(led7)); +} + +void led7_update () +{ + static unsigned char i = 0; if (i) { // enable display cbi(&LED7_PORT, LED7_OE); } - - char led7 = LED7SEG_FONT[i % sizeof(LED7SEG_FONT)]; - if (LED7_ANODE) - led7 = ~led7; - - spi_tx[0] = led7; + led7_update_hex(led_state); i++; }