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
00001 #include "mbed.h" 00002 #include "7seg.h" 00003 00004 static DigitalOut led_k[8] = {p34, p36, p26, p24, p23, p35, p30, p25}; 00005 static DigitalOut led_a[4] = {p16, p17, p18, p19}; 00006 static Ticker tick; 00007 00008 static int ledbuf[4] = {-1, -1, -1, -1}; 00009 const int digits[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; 00010 00011 void leddisp () { 00012 static int n = 0; 00013 int i, bit; 00014 00015 // led off 00016 for (i = 0; i < 8; i ++) { 00017 led_k[i] = 1; 00018 } 00019 led_a[n] = 1; // common off 00020 00021 n ++; 00022 if (n >= 4) n = 0; 00023 00024 // led on 00025 if (ledbuf[n] >= 0) { 00026 bit = 1; 00027 for (i = 0; i < 7; i ++) { 00028 led_k[i] = digits[ledbuf[n] & 0x7f] & bit ? 0 : 1; 00029 bit = bit << 1; 00030 } 00031 led_k[7] = ledbuf[n] & 0x80 ? 0 : 1; 00032 } 00033 led_a[n] = 0; // common on 00034 } 00035 00036 void writeled (int num, int dot, int mask, int zero) { 00037 if (((num >= 1000) || (zero & 0x08)) && (mask & 0x08)) { 00038 ledbuf[0] = num / 1000 % 10; 00039 } else { 00040 ledbuf[0] = -1; 00041 } 00042 if (((num >= 100) || (zero & 0x04)) && (mask & 0x04)) { 00043 ledbuf[1] = (num / 100) % 10; 00044 } else { 00045 ledbuf[1] = -1; 00046 } 00047 if (((num >= 10) || (zero & 0x02)) && (mask & 0x02)) { 00048 ledbuf[2] = (num / 10) % 10; 00049 } else { 00050 ledbuf[2] = -1; 00051 } 00052 if (mask & 0x01) { 00053 ledbuf[3] = num % 10; 00054 } else { 00055 ledbuf[3] = -1; 00056 } 00057 00058 if (dot >= 1 && dot <= 4) { 00059 ledbuf[dot - 1] |= 0x80; 00060 } 00061 } 00062 00063 void initled () { 00064 int i; 00065 00066 for (i = 0; i < 4; i ++) { 00067 led_a[i] = 1; 00068 } 00069 for (i = 0; i < 8; i ++) { 00070 led_k[i] = 1; 00071 } 00072 } 00073 00074 void startled () { 00075 tick.attach_us(&leddisp, 2500); // 400Hz 00076 }
Generated on Wed Jul 13 2022 01:34:33 by 1.7.2