Kansai Electric Power usage meter (Denki-yohou) for GainSpan Wi-Fi http://mbed.org/users/okini3939/notebook/denki-yohou/
Dependencies: mbed GSwifi (old)
7seg.cpp@2:8646918ffff2, 2012-10-17 (annotated)
- Committer:
- okini3939
- Date:
- Wed Oct 17 13:43:52 2012 +0000
- Revision:
- 2:8646918ffff2
- Parent:
- 1:beff52210994
- Child:
- 3:4bf32f60a770
1st build
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:d8a2cab7091c | 1 | #include "mbed.h" |
okini3939 | 0:d8a2cab7091c | 2 | #include "7seg.h" |
okini3939 | 0:d8a2cab7091c | 3 | |
okini3939 | 2:8646918ffff2 | 4 | #define LED_NUM 6 |
okini3939 | 2:8646918ffff2 | 5 | #define DIGITS_NUM 37 |
okini3939 | 2:8646918ffff2 | 6 | |
okini3939 | 2:8646918ffff2 | 7 | const int digits[DIGITS_NUM] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 0-9 |
okini3939 | 2:8646918ffff2 | 8 | 0x77, 0x7c, 0x58, 0x5e, 0x79, 0x71, 0x3d, 0x74, 0x04, 0x1e, // a-j |
okini3939 | 2:8646918ffff2 | 9 | 0x76, 0x38, 0x54, 0x54, 0x5c, 0x73, 0x67, 0x50, 0x6d, 0x78, // k-t |
okini3939 | 2:8646918ffff2 | 10 | 0x1c, 0x1c, 0x1c, 0x76, 0x6e, 0x5b, 0x40}; // u-z,- |
okini3939 | 2:8646918ffff2 | 11 | |
okini3939 | 0:d8a2cab7091c | 12 | static DigitalOut led_k[8] = {p34, p36, p26, p24, p23, p35, p30, p25}; |
okini3939 | 2:8646918ffff2 | 13 | static DigitalOut led_a[LED_NUM] = {p16, p17, p18, p19, p15, p14}; |
okini3939 | 0:d8a2cab7091c | 14 | static Ticker tick; |
okini3939 | 0:d8a2cab7091c | 15 | |
okini3939 | 2:8646918ffff2 | 16 | static int ledbuf[LED_NUM]; |
okini3939 | 0:d8a2cab7091c | 17 | |
okini3939 | 0:d8a2cab7091c | 18 | void leddisp () { |
okini3939 | 0:d8a2cab7091c | 19 | static int n = 0; |
okini3939 | 0:d8a2cab7091c | 20 | int i, bit; |
okini3939 | 0:d8a2cab7091c | 21 | |
okini3939 | 1:beff52210994 | 22 | // led off |
okini3939 | 0:d8a2cab7091c | 23 | for (i = 0; i < 8; i ++) { |
okini3939 | 0:d8a2cab7091c | 24 | led_k[i] = 1; |
okini3939 | 0:d8a2cab7091c | 25 | } |
okini3939 | 1:beff52210994 | 26 | led_a[n] = 1; // common off |
okini3939 | 0:d8a2cab7091c | 27 | |
okini3939 | 0:d8a2cab7091c | 28 | n ++; |
okini3939 | 2:8646918ffff2 | 29 | if (n >= LED_NUM) n = 0; |
okini3939 | 0:d8a2cab7091c | 30 | |
okini3939 | 1:beff52210994 | 31 | // led on |
okini3939 | 2:8646918ffff2 | 32 | bit = 1; |
okini3939 | 2:8646918ffff2 | 33 | for (i = 0; i < 8; i ++) { |
okini3939 | 2:8646918ffff2 | 34 | led_k[i] = ledbuf[n] & bit ? 0 : 1; |
okini3939 | 2:8646918ffff2 | 35 | bit = bit << 1; |
okini3939 | 0:d8a2cab7091c | 36 | } |
okini3939 | 1:beff52210994 | 37 | led_a[n] = 0; // common on |
okini3939 | 0:d8a2cab7091c | 38 | } |
okini3939 | 0:d8a2cab7091c | 39 | |
okini3939 | 1:beff52210994 | 40 | void writeled (int num, int dot, int mask, int zero) { |
okini3939 | 1:beff52210994 | 41 | if (((num >= 1000) || (zero & 0x08)) && (mask & 0x08)) { |
okini3939 | 2:8646918ffff2 | 42 | ledbuf[0] = digits[num / 1000 % 10]; |
okini3939 | 0:d8a2cab7091c | 43 | } else { |
okini3939 | 2:8646918ffff2 | 44 | ledbuf[0] = 0; |
okini3939 | 0:d8a2cab7091c | 45 | } |
okini3939 | 1:beff52210994 | 46 | if (((num >= 100) || (zero & 0x04)) && (mask & 0x04)) { |
okini3939 | 2:8646918ffff2 | 47 | ledbuf[1] = digits[(num / 100) % 10]; |
okini3939 | 0:d8a2cab7091c | 48 | } else { |
okini3939 | 2:8646918ffff2 | 49 | ledbuf[1] = 0; |
okini3939 | 0:d8a2cab7091c | 50 | } |
okini3939 | 1:beff52210994 | 51 | if (((num >= 10) || (zero & 0x02)) && (mask & 0x02)) { |
okini3939 | 2:8646918ffff2 | 52 | ledbuf[2] = digits[(num / 10) % 10]; |
okini3939 | 0:d8a2cab7091c | 53 | } else { |
okini3939 | 2:8646918ffff2 | 54 | ledbuf[2] = 0; |
okini3939 | 0:d8a2cab7091c | 55 | } |
okini3939 | 1:beff52210994 | 56 | if (mask & 0x01) { |
okini3939 | 2:8646918ffff2 | 57 | ledbuf[3] = digits[num % 10]; |
okini3939 | 0:d8a2cab7091c | 58 | } else { |
okini3939 | 2:8646918ffff2 | 59 | ledbuf[3] = 0; |
okini3939 | 0:d8a2cab7091c | 60 | } |
okini3939 | 0:d8a2cab7091c | 61 | |
okini3939 | 0:d8a2cab7091c | 62 | if (dot >= 1 && dot <= 4) { |
okini3939 | 0:d8a2cab7091c | 63 | ledbuf[dot - 1] |= 0x80; |
okini3939 | 0:d8a2cab7091c | 64 | } |
okini3939 | 0:d8a2cab7091c | 65 | } |
okini3939 | 0:d8a2cab7091c | 66 | |
okini3939 | 2:8646918ffff2 | 67 | void writeled5 (int n, int d, int f) { |
okini3939 | 2:8646918ffff2 | 68 | if (f) { |
okini3939 | 2:8646918ffff2 | 69 | ledbuf[n] = digits[d]; |
okini3939 | 2:8646918ffff2 | 70 | } else { |
okini3939 | 2:8646918ffff2 | 71 | ledbuf[n] = d; |
okini3939 | 2:8646918ffff2 | 72 | } |
okini3939 | 2:8646918ffff2 | 73 | } |
okini3939 | 2:8646918ffff2 | 74 | |
okini3939 | 0:d8a2cab7091c | 75 | void initled () { |
okini3939 | 0:d8a2cab7091c | 76 | int i; |
okini3939 | 0:d8a2cab7091c | 77 | |
okini3939 | 2:8646918ffff2 | 78 | for (i = 0; i < LED_NUM; i ++) { |
okini3939 | 0:d8a2cab7091c | 79 | led_a[i] = 1; |
okini3939 | 2:8646918ffff2 | 80 | ledbuf[i] = 0; |
okini3939 | 0:d8a2cab7091c | 81 | } |
okini3939 | 0:d8a2cab7091c | 82 | for (i = 0; i < 8; i ++) { |
okini3939 | 0:d8a2cab7091c | 83 | led_k[i] = 1; |
okini3939 | 0:d8a2cab7091c | 84 | } |
okini3939 | 0:d8a2cab7091c | 85 | } |
okini3939 | 0:d8a2cab7091c | 86 | |
okini3939 | 0:d8a2cab7091c | 87 | void startled () { |
okini3939 | 0:d8a2cab7091c | 88 | tick.attach_us(&leddisp, 2500); // 400Hz |
okini3939 | 0:d8a2cab7091c | 89 | } |