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:52:01 2012 +0000
Revision:
3:4bf32f60a770
Parent:
2:8646918ffff2
fix

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 3:4bf32f60a770 5 static DigitalOut led_a[4] = {p16, p17, p18, p19};
okini3939 0:d8a2cab7091c 6 static Ticker tick;
okini3939 0:d8a2cab7091c 7
okini3939 3:4bf32f60a770 8 static int ledbuf[4] = {-1, -1, -1, -1};
okini3939 3:4bf32f60a770 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 1:beff52210994 15 // led off
okini3939 0:d8a2cab7091c 16 for (i = 0; i < 8; i ++) {
okini3939 0:d8a2cab7091c 17 led_k[i] = 1;
okini3939 0:d8a2cab7091c 18 }
okini3939 1:beff52210994 19 led_a[n] = 1; // common off
okini3939 0:d8a2cab7091c 20
okini3939 0:d8a2cab7091c 21 n ++;
okini3939 3:4bf32f60a770 22 if (n >= 4) n = 0;
okini3939 0:d8a2cab7091c 23
okini3939 1:beff52210994 24 // led on
okini3939 3:4bf32f60a770 25 if (ledbuf[n] >= 0) {
okini3939 3:4bf32f60a770 26 bit = 1;
okini3939 3:4bf32f60a770 27 for (i = 0; i < 7; i ++) {
okini3939 3:4bf32f60a770 28 led_k[i] = digits[ledbuf[n] & 0x7f] & bit ? 0 : 1;
okini3939 3:4bf32f60a770 29 bit = bit << 1;
okini3939 3:4bf32f60a770 30 }
okini3939 3:4bf32f60a770 31 led_k[7] = ledbuf[n] & 0x80 ? 0 : 1;
okini3939 0:d8a2cab7091c 32 }
okini3939 1:beff52210994 33 led_a[n] = 0; // common on
okini3939 0:d8a2cab7091c 34 }
okini3939 0:d8a2cab7091c 35
okini3939 1:beff52210994 36 void writeled (int num, int dot, int mask, int zero) {
okini3939 1:beff52210994 37 if (((num >= 1000) || (zero & 0x08)) && (mask & 0x08)) {
okini3939 3:4bf32f60a770 38 ledbuf[0] = num / 1000 % 10;
okini3939 0:d8a2cab7091c 39 } else {
okini3939 3:4bf32f60a770 40 ledbuf[0] = -1;
okini3939 0:d8a2cab7091c 41 }
okini3939 1:beff52210994 42 if (((num >= 100) || (zero & 0x04)) && (mask & 0x04)) {
okini3939 3:4bf32f60a770 43 ledbuf[1] = (num / 100) % 10;
okini3939 0:d8a2cab7091c 44 } else {
okini3939 3:4bf32f60a770 45 ledbuf[1] = -1;
okini3939 0:d8a2cab7091c 46 }
okini3939 1:beff52210994 47 if (((num >= 10) || (zero & 0x02)) && (mask & 0x02)) {
okini3939 3:4bf32f60a770 48 ledbuf[2] = (num / 10) % 10;
okini3939 0:d8a2cab7091c 49 } else {
okini3939 3:4bf32f60a770 50 ledbuf[2] = -1;
okini3939 0:d8a2cab7091c 51 }
okini3939 1:beff52210994 52 if (mask & 0x01) {
okini3939 3:4bf32f60a770 53 ledbuf[3] = num % 10;
okini3939 0:d8a2cab7091c 54 } else {
okini3939 3:4bf32f60a770 55 ledbuf[3] = -1;
okini3939 0:d8a2cab7091c 56 }
okini3939 0:d8a2cab7091c 57
okini3939 0:d8a2cab7091c 58 if (dot >= 1 && dot <= 4) {
okini3939 0:d8a2cab7091c 59 ledbuf[dot - 1] |= 0x80;
okini3939 0:d8a2cab7091c 60 }
okini3939 0:d8a2cab7091c 61 }
okini3939 0:d8a2cab7091c 62
okini3939 0:d8a2cab7091c 63 void initled () {
okini3939 0:d8a2cab7091c 64 int i;
okini3939 0:d8a2cab7091c 65
okini3939 3:4bf32f60a770 66 for (i = 0; i < 4; i ++) {
okini3939 0:d8a2cab7091c 67 led_a[i] = 1;
okini3939 0:d8a2cab7091c 68 }
okini3939 0:d8a2cab7091c 69 for (i = 0; i < 8; i ++) {
okini3939 0:d8a2cab7091c 70 led_k[i] = 1;
okini3939 0:d8a2cab7091c 71 }
okini3939 0:d8a2cab7091c 72 }
okini3939 0:d8a2cab7091c 73
okini3939 0:d8a2cab7091c 74 void startled () {
okini3939 0:d8a2cab7091c 75 tick.attach_us(&leddisp, 2500); // 400Hz
okini3939 0:d8a2cab7091c 76 }