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:
Tue Jul 10 05:28:10 2012 +0000
Revision:
0:d8a2cab7091c
Child:
1:beff52210994

        

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 0:d8a2cab7091c 4 static DigitalOut led_k[8] = {p34, p36, p26, p24, p23, p35, p30, p25};
okini3939 0:d8a2cab7091c 5 static DigitalOut led_a[4] = {p16, p17, p18, p19};
okini3939 0:d8a2cab7091c 6 static Ticker tick;
okini3939 0:d8a2cab7091c 7
okini3939 0:d8a2cab7091c 8 static int ledbuf[4] = {-1, -1, -1, -1};
okini3939 0:d8a2cab7091c 9 const int digits[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
okini3939 0:d8a2cab7091c 10
okini3939 0:d8a2cab7091c 11 void leddisp () {
okini3939 0:d8a2cab7091c 12 static int n = 0;
okini3939 0:d8a2cab7091c 13 int i, bit;
okini3939 0:d8a2cab7091c 14
okini3939 0:d8a2cab7091c 15 for (i = 0; i < 8; i ++) {
okini3939 0:d8a2cab7091c 16 led_k[i] = 1;
okini3939 0:d8a2cab7091c 17 }
okini3939 0:d8a2cab7091c 18 led_a[n] = 1;
okini3939 0:d8a2cab7091c 19
okini3939 0:d8a2cab7091c 20 n ++;
okini3939 0:d8a2cab7091c 21 if (n >= 4) n = 0;
okini3939 0:d8a2cab7091c 22
okini3939 0:d8a2cab7091c 23 if (ledbuf[n] >= 0) {
okini3939 0:d8a2cab7091c 24 bit = 1;
okini3939 0:d8a2cab7091c 25 for (i = 0; i < 7; i ++) {
okini3939 0:d8a2cab7091c 26 led_k[i] = digits[ledbuf[n] & 0x7f] & bit ? 0 : 1;
okini3939 0:d8a2cab7091c 27 bit = bit << 1;
okini3939 0:d8a2cab7091c 28 }
okini3939 0:d8a2cab7091c 29 led_k[7] = ledbuf[n] & 0x80 ? 0 : 1;
okini3939 0:d8a2cab7091c 30 }
okini3939 0:d8a2cab7091c 31 led_a[n] = 0;
okini3939 0:d8a2cab7091c 32 }
okini3939 0:d8a2cab7091c 33
okini3939 0:d8a2cab7091c 34 void writeled (int num, int dot, int place) {
okini3939 0:d8a2cab7091c 35 if (num >= 1000 && place & 0x08) {
okini3939 0:d8a2cab7091c 36 ledbuf[0] = num / 1000;
okini3939 0:d8a2cab7091c 37 } else {
okini3939 0:d8a2cab7091c 38 ledbuf[0] = -1;
okini3939 0:d8a2cab7091c 39 }
okini3939 0:d8a2cab7091c 40 if (num >= 100 && place & 0x04) {
okini3939 0:d8a2cab7091c 41 ledbuf[1] = (num / 100) % 10;
okini3939 0:d8a2cab7091c 42 } else {
okini3939 0:d8a2cab7091c 43 ledbuf[1] = -1;
okini3939 0:d8a2cab7091c 44 }
okini3939 0:d8a2cab7091c 45 if (num >= 10 && place & 0x02) {
okini3939 0:d8a2cab7091c 46 ledbuf[2] = (num / 10) % 10;
okini3939 0:d8a2cab7091c 47 } else {
okini3939 0:d8a2cab7091c 48 ledbuf[2] = -1;
okini3939 0:d8a2cab7091c 49 }
okini3939 0:d8a2cab7091c 50 if (place & 0x01) {
okini3939 0:d8a2cab7091c 51 ledbuf[3] = num % 10;
okini3939 0:d8a2cab7091c 52 } else {
okini3939 0:d8a2cab7091c 53 ledbuf[3] = -1;
okini3939 0:d8a2cab7091c 54 }
okini3939 0:d8a2cab7091c 55
okini3939 0:d8a2cab7091c 56 if (dot >= 1 && dot <= 4) {
okini3939 0:d8a2cab7091c 57 ledbuf[dot - 1] |= 0x80;
okini3939 0:d8a2cab7091c 58 }
okini3939 0:d8a2cab7091c 59 }
okini3939 0:d8a2cab7091c 60
okini3939 0:d8a2cab7091c 61 void initled () {
okini3939 0:d8a2cab7091c 62 int i;
okini3939 0:d8a2cab7091c 63
okini3939 0:d8a2cab7091c 64 for (i = 0; i < 4; i ++) {
okini3939 0:d8a2cab7091c 65 led_a[i] = 1;
okini3939 0:d8a2cab7091c 66 }
okini3939 0:d8a2cab7091c 67 for (i = 0; i < 8; i ++) {
okini3939 0:d8a2cab7091c 68 led_k[i] = 1;
okini3939 0:d8a2cab7091c 69 }
okini3939 0:d8a2cab7091c 70 }
okini3939 0:d8a2cab7091c 71
okini3939 0:d8a2cab7091c 72 void startled () {
okini3939 0:d8a2cab7091c 73 tick.attach_us(&leddisp, 2500); // 400Hz
okini3939 0:d8a2cab7091c 74 }