Kansai Electric Power usage meter (Denki-yohou) for GainSpan Wi-Fi http://mbed.org/users/okini3939/notebook/denki-yohou/
Dependencies: mbed GSwifi (old)
Diff: 7seg.cpp
- Revision:
- 3:4bf32f60a770
- Parent:
- 2:8646918ffff2
--- a/7seg.cpp Wed Oct 17 13:43:52 2012 +0000 +++ b/7seg.cpp Wed Oct 17 13:52:01 2012 +0000 @@ -1,19 +1,12 @@ #include "mbed.h" #include "7seg.h" -#define LED_NUM 6 -#define DIGITS_NUM 37 - -const int digits[DIGITS_NUM] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 0-9 - 0x77, 0x7c, 0x58, 0x5e, 0x79, 0x71, 0x3d, 0x74, 0x04, 0x1e, // a-j - 0x76, 0x38, 0x54, 0x54, 0x5c, 0x73, 0x67, 0x50, 0x6d, 0x78, // k-t - 0x1c, 0x1c, 0x1c, 0x76, 0x6e, 0x5b, 0x40}; // u-z,- - static DigitalOut led_k[8] = {p34, p36, p26, p24, p23, p35, p30, p25}; -static DigitalOut led_a[LED_NUM] = {p16, p17, p18, p19, p15, p14}; +static DigitalOut led_a[4] = {p16, p17, p18, p19}; static Ticker tick; -static int ledbuf[LED_NUM]; +static int ledbuf[4] = {-1, -1, -1, -1}; +const int digits[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; void leddisp () { static int n = 0; @@ -26,37 +19,40 @@ led_a[n] = 1; // common off n ++; - if (n >= LED_NUM) n = 0; + if (n >= 4) n = 0; // led on - bit = 1; - for (i = 0; i < 8; i ++) { - led_k[i] = ledbuf[n] & bit ? 0 : 1; - bit = bit << 1; + if (ledbuf[n] >= 0) { + bit = 1; + for (i = 0; i < 7; i ++) { + led_k[i] = digits[ledbuf[n] & 0x7f] & bit ? 0 : 1; + bit = bit << 1; + } + led_k[7] = ledbuf[n] & 0x80 ? 0 : 1; } led_a[n] = 0; // common on } void writeled (int num, int dot, int mask, int zero) { if (((num >= 1000) || (zero & 0x08)) && (mask & 0x08)) { - ledbuf[0] = digits[num / 1000 % 10]; + ledbuf[0] = num / 1000 % 10; } else { - ledbuf[0] = 0; + ledbuf[0] = -1; } if (((num >= 100) || (zero & 0x04)) && (mask & 0x04)) { - ledbuf[1] = digits[(num / 100) % 10]; + ledbuf[1] = (num / 100) % 10; } else { - ledbuf[1] = 0; + ledbuf[1] = -1; } if (((num >= 10) || (zero & 0x02)) && (mask & 0x02)) { - ledbuf[2] = digits[(num / 10) % 10]; + ledbuf[2] = (num / 10) % 10; } else { - ledbuf[2] = 0; + ledbuf[2] = -1; } if (mask & 0x01) { - ledbuf[3] = digits[num % 10]; + ledbuf[3] = num % 10; } else { - ledbuf[3] = 0; + ledbuf[3] = -1; } if (dot >= 1 && dot <= 4) { @@ -64,20 +60,11 @@ } } -void writeled5 (int n, int d, int f) { - if (f) { - ledbuf[n] = digits[d]; - } else { - ledbuf[n] = d; - } -} - void initled () { int i; - for (i = 0; i < LED_NUM; i ++) { + for (i = 0; i < 4; i ++) { led_a[i] = 1; - ledbuf[i] = 0; } for (i = 0; i < 8; i ++) { led_k[i] = 1;