Kansai Electric Power usage meter (Denki-yohou) for GainSpan Wi-Fi http://mbed.org/users/okini3939/notebook/denki-yohou/

Dependencies:   mbed GSwifi (old)

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?

UserRevisionLine numberNew 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 }