hello: expand to two led7seg displays
authorTero Marttila <terom@paivola.fi>
Fri, 04 Apr 2014 01:04:41 +0300
changeset 56 3b837eaf1b6d
parent 55 04c625712e35
child 57 ee412c5be8b1
hello: expand to two led7seg displays
src/hello.c
src/spi.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++;
 }
--- a/src/spi.c	Fri Apr 04 00:26:16 2014 +0300
+++ b/src/spi.c	Fri Apr 04 01:04:41 2014 +0300
@@ -7,7 +7,7 @@
 #define SPI_SS      PORTB2
 
 /* State */
-#define SPI_COUNT   1
+#define SPI_COUNT   2
 
 static char spi_rx[SPI_COUNT], spi_tx[SPI_COUNT];