Kojo / FourDigitLED

Dependents:   IF-SmartClock

Revision:
1:c94aa39af4c7
Parent:
0:7a8925d2a8e7
Child:
2:c4e8b2fd8f7e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FourDigitLED.cpp	Fri Jun 26 08:01:58 2015 +0000
@@ -0,0 +1,62 @@
+#include <mbed.h>
+#include "FourDigitLED.h"
+
+static unsigned char SegPattern[] = {
+      0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f,
+      0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
+};
+
+FourDigitLED::FourDigitLED(PinName seg0, PinName seg1, PinName seg2, PinName seg3, 
+    PinName seg4, PinName seg5, PinName seg6, PinName dot, 
+    PinName digit0, PinName digit1, PinName digit2, PinName digit3
+)
+{
+    LEDs = new BusOut( seg0, seg1, seg2, seg3, seg4, seg5, seg6, dot, digit0, digit1, digit2, digit3) ;
+    scan_digit = 0 ;
+    /* test LEDs */
+    LEDs->write(0xfe00 | MASK_DOT | 0x0) ;
+    wait(1.0) ;
+    setNum(0, 8); setNum(1, 8); setNum(2, 8); setNum(3, 8); 
+    setDot(0, 1); setDot(1, 1); setDot(2, 1); setDot(3, 1); 
+    /* end test */
+    Scan_tick.attach(this, &FourDigitLED::Scan, 0.005);
+    wait(1.0) ;
+    val[0] = 0 ; val[1] = 0 ; val[2] = 0 ; val[3] = 0 ;
+}
+
+FourDigitLED::~FourDigitLED()
+{
+}
+
+void FourDigitLED::Scan (void)
+{
+    int d ;
+    d= ++scan_digit ;
+    d= d % DIGITS ;
+    LEDs->write(~(0x100 << d) & 0xff00 | (val[d] & 0xff) ) ;
+}
+
+unsigned int FourDigitLED::setPtn(int d, unsigned int ptn)
+{
+    val[d] = ptn & 0xff;
+    return ptn ;
+}
+
+int FourDigitLED::setNum(int d, int n)
+{
+    if((n <0) || (n >= 16))
+        val[d] = val[d] & 0xff80 ;
+    else
+        val[d] = (val[d] & 0xff80) | SegPattern[n] ;
+    return n ;
+}
+
+int FourDigitLED::setDot(int d, bool n)
+{
+    val[d] = (val[d] & 0xff7f) | ((n == false) ? 0x0 : 0x80) ;
+    return n ;
+}
+
+void FourDigitLED::dump(void) {
+        printf("val = %02x, %02x, %02x, %02x\n", val[3], val[2], val[1], val[0]) ;
+}