suu pen
/
110225a_dynamicOutputSample
Seven-Segmet Numeric LED Display : LTC-4627 Dynamic drive. mbed - LTC-4627 direct drive
main.cpp@0:a62a79548d00, 2011-03-01 (annotated)
- Committer:
- suupen
- Date:
- Tue Mar 01 11:42:37 2011 +0000
- Revision:
- 0:a62a79548d00
Seven-Segment Numeric LED Display Dynamic drive sample program
http://www.youtube.com/watch?v=9f5sl4-In4U
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
suupen | 0:a62a79548d00 | 1 | /********************************************************** |
suupen | 0:a62a79548d00 | 2 | * Attention : The comment on this file is written in Japanese. |
suupen | 0:a62a79548d00 | 3 | * |
suupen | 0:a62a79548d00 | 4 | * main.cpp |
suupen | 0:a62a79548d00 | 5 | * dynamic kudou no sample program |
suupen | 0:a62a79548d00 | 6 | * This is program to control LTC-4627(Seven-Segment Numeric LED Display) with mbed. |
suupen | 0:a62a79548d00 | 7 | * |
suupen | 0:a62a79548d00 | 8 | * LTC4627(4keta 7segment LED) o dynamic kudou suru. |
suupen | 0:a62a79548d00 | 9 | * http://www.excesssolutions.com/mas_assets/acrobat/ES5721.pdf |
suupen | 0:a62a79548d00 | 10 | * common shuturyoku wa 5 hon. |
suupen | 0:a62a79548d00 | 11 | * segment shuturyoku wa 8 hon. |
suupen | 0:a62a79548d00 | 12 | * 1hon no LED niwa 20[mA] nagasu no de teikou ha 165[ohm](165[ohm] = 3.3[V] / 20[mA])o tukau.165[ohm]ni chikai atai no 180[ohm]o tukau. |
suupen | 0:a62a79548d00 | 13 | * |
suupen | 0:a62a79548d00 | 14 | * |
suupen | 0:a62a79548d00 | 15 | * LTC4627 to mbed no setuzoku kankei |
suupen | 0:a62a79548d00 | 16 | * LTC4627 R(180[ohm]) mbed |
suupen | 0:a62a79548d00 | 17 | * PinNo PinKinou (*1) Pin name (*2) |
suupen | 0:a62a79548d00 | 18 | * 1 Common Anode Digit 1 - p20 |
suupen | 0:a62a79548d00 | 19 | * 2 Common Anode Digit 2 - p19 |
suupen | 0:a62a79548d00 | 20 | * 3 Cathode D R p18 |
suupen | 0:a62a79548d00 | 21 | * 4 Common Anode Digit L1,L2,L3 - p17 |
suupen | 0:a62a79548d00 | 22 | * 5 Cathode E R p16 |
suupen | 0:a62a79548d00 | 23 | * 6 Common Anode Digit 3 - p15 |
suupen | 0:a62a79548d00 | 24 | * 7 Cathode D.P R p14 |
suupen | 0:a62a79548d00 | 25 | * 8 Common Anode Digit 4 - p13 |
suupen | 0:a62a79548d00 | 26 | * 9 No Connection - - |
suupen | 0:a62a79548d00 | 27 | * 10 No Pin - - |
suupen | 0:a62a79548d00 | 28 | * 11 Cathode F R p25 |
suupen | 0:a62a79548d00 | 29 | * 12 No Pin - - |
suupen | 0:a62a79548d00 | 30 | * 13 Cathode C, L3 R p24 |
suupen | 0:a62a79548d00 | 31 | * 14 Cathode A, L1 R p23 |
suupen | 0:a62a79548d00 | 32 | * 15 Cathode G R p22 |
suupen | 0:a62a79548d00 | 33 | * 16 Cathode B, L2 R p21 |
suupen | 0:a62a79548d00 | 34 | * |
suupen | 0:a62a79548d00 | 35 | * *1 : "R" no tokoro wa LTC4627 to mbed no aidani teikou o chokuretu ni ireru. |
suupen | 0:a62a79548d00 | 36 | * "-" wa teikou ha setuzoku sinai. |
suupen | 0:a62a79548d00 | 37 | * *2 : subete "DigitalOut" |
suupen | 0:a62a79548d00 | 38 | * |
suupen | 0:a62a79548d00 | 39 | **********************************************************/ |
suupen | 0:a62a79548d00 | 40 | |
suupen | 0:a62a79548d00 | 41 | |
suupen | 0:a62a79548d00 | 42 | #include "mbed.h" |
suupen | 0:a62a79548d00 | 43 | |
suupen | 0:a62a79548d00 | 44 | void dynamic_output(void); |
suupen | 0:a62a79548d00 | 45 | |
suupen | 0:a62a79548d00 | 46 | // mbed pin no teigi |
suupen | 0:a62a79548d00 | 47 | // common shuturyoku no setttei |
suupen | 0:a62a79548d00 | 48 | DigitalOut com_1(p20); |
suupen | 0:a62a79548d00 | 49 | DigitalOut com_2(p19); |
suupen | 0:a62a79548d00 | 50 | DigitalOut com_3(p15); |
suupen | 0:a62a79548d00 | 51 | DigitalOut com_4(p13); |
suupen | 0:a62a79548d00 | 52 | DigitalOut com_L(p17); // colon |
suupen | 0:a62a79548d00 | 53 | |
suupen | 0:a62a79548d00 | 54 | // segment shuturyoku no settei |
suupen | 0:a62a79548d00 | 55 | DigitalOut seg_a(p23); |
suupen | 0:a62a79548d00 | 56 | DigitalOut seg_b(p21); |
suupen | 0:a62a79548d00 | 57 | DigitalOut seg_c(p24); |
suupen | 0:a62a79548d00 | 58 | DigitalOut seg_d(p18); |
suupen | 0:a62a79548d00 | 59 | DigitalOut seg_e(p16); |
suupen | 0:a62a79548d00 | 60 | DigitalOut seg_f(p25); |
suupen | 0:a62a79548d00 | 61 | DigitalOut seg_g(p22); |
suupen | 0:a62a79548d00 | 62 | DigitalOut seg_p(p14); // DP |
suupen | 0:a62a79548d00 | 63 | |
suupen | 0:a62a79548d00 | 64 | DigitalOut seg_col1(p23); |
suupen | 0:a62a79548d00 | 65 | DigitalOut seg_col2(p21); |
suupen | 0:a62a79548d00 | 66 | DigitalOut seg_col3(p24); |
suupen | 0:a62a79548d00 | 67 | |
suupen | 0:a62a79548d00 | 68 | // 7segment no shuturyoku pattern |
suupen | 0:a62a79548d00 | 69 | // seg: a b c d e f g p |
suupen | 0:a62a79548d00 | 70 | // bit: 7 6 5 4 3 2 1 0 |
suupen | 0:a62a79548d00 | 71 | // --------------------- |
suupen | 0:a62a79548d00 | 72 | #define D_0 (0xfc) // 0 1 1 1 1 1 1 0 0 |
suupen | 0:a62a79548d00 | 73 | #define D_1 (0x60) // 1 0 1 1 0 0 0 0 0 |
suupen | 0:a62a79548d00 | 74 | #define D_2 (0xda) // 2 1 1 0 1 1 0 1 0 |
suupen | 0:a62a79548d00 | 75 | #define D_3 (0xf2) // 3 1 1 1 1 0 0 1 0 |
suupen | 0:a62a79548d00 | 76 | #define D_4 (0x66) // 4 0 1 1 0 0 1 1 0 |
suupen | 0:a62a79548d00 | 77 | #define D_5 (0xb6) // 5 1 0 1 1 0 1 1 0 |
suupen | 0:a62a79548d00 | 78 | #define D_6 (0xbe) // 6 1 0 1 1 1 1 1 0 |
suupen | 0:a62a79548d00 | 79 | #define D_7 (0xe4) // 7 1 1 1 0 0 1 0 0 |
suupen | 0:a62a79548d00 | 80 | #define D_8 (0xfe) // 8 1 1 1 1 1 1 1 0 |
suupen | 0:a62a79548d00 | 81 | #define D_9 (0xf6) // 9 1 1 1 1 0 1 1 0 |
suupen | 0:a62a79548d00 | 82 | |
suupen | 0:a62a79548d00 | 83 | |
suupen | 0:a62a79548d00 | 84 | DigitalOut myled(LED1); // program dosa kakunin yo LED |
suupen | 0:a62a79548d00 | 85 | |
suupen | 0:a62a79548d00 | 86 | unsigned char D_7seg[4]; // 7segment heno shuturyoku data kakunou you hensu |
suupen | 0:a62a79548d00 | 87 | // [0]:1000 no kurai [1]:100 no kurai [2]:10 no kurai [3]:1 no kurai |
suupen | 0:a62a79548d00 | 88 | |
suupen | 0:a62a79548d00 | 89 | /************************************** |
suupen | 0:a62a79548d00 | 90 | * main |
suupen | 0:a62a79548d00 | 91 | **************************************/ |
suupen | 0:a62a79548d00 | 92 | int main() { |
suupen | 0:a62a79548d00 | 93 | |
suupen | 0:a62a79548d00 | 94 | |
suupen | 0:a62a79548d00 | 95 | int data = 0; // hyoji data (4keta no 7segment LED nanode 0 kara 9999 made hyoji dekiru) |
suupen | 0:a62a79548d00 | 96 | |
suupen | 0:a62a79548d00 | 97 | float count = -1; // 0 kara hyoji saseru tameni -1 o settei suru |
suupen | 0:a62a79548d00 | 98 | |
suupen | 0:a62a79548d00 | 99 | while(1) { |
suupen | 0:a62a79548d00 | 100 | |
suupen | 0:a62a79548d00 | 101 | // program dosa kakunin yo LED tenmetu |
suupen | 0:a62a79548d00 | 102 | myled = !myled; |
suupen | 0:a62a79548d00 | 103 | wait(0.001000); // while{} o 1kai shori suru jikan o chosei(kokode jikan tubusi) (Seven segment refresh rate 1ms) check.1 |
suupen | 0:a62a79548d00 | 104 | |
suupen | 0:a62a79548d00 | 105 | // hyoji data no kousin |
suupen | 0:a62a79548d00 | 106 | count = count + 1.000000; // while{} o 1kai shori surugoto no kasan su check.2 |
suupen | 0:a62a79548d00 | 107 | if(count > 9999){count = 0;} // saidaichi o 9999 ni seigen |
suupen | 0:a62a79548d00 | 108 | data = (int)count; |
suupen | 0:a62a79548d00 | 109 | |
suupen | 0:a62a79548d00 | 110 | // shuturyoku data no kousin |
suupen | 0:a62a79548d00 | 111 | D_7seg[0] = data / 1000; // 1000 no kurai no data |
suupen | 0:a62a79548d00 | 112 | D_7seg[1] = (data % 1000) / 100; // 100 no kurai no data |
suupen | 0:a62a79548d00 | 113 | D_7seg[2] = (data % 100) / 10; // 10 no kurai no data |
suupen | 0:a62a79548d00 | 114 | D_7seg[3] = (data % 10); // 1 no kurai no data |
suupen | 0:a62a79548d00 | 115 | |
suupen | 0:a62a79548d00 | 116 | // dynamic shuturyoku shori |
suupen | 0:a62a79548d00 | 117 | dynamic_output(); |
suupen | 0:a62a79548d00 | 118 | } |
suupen | 0:a62a79548d00 | 119 | } |
suupen | 0:a62a79548d00 | 120 | |
suupen | 0:a62a79548d00 | 121 | /************************************** |
suupen | 0:a62a79548d00 | 122 | * dynamic_comAllClear |
suupen | 0:a62a79548d00 | 123 | * |
suupen | 0:a62a79548d00 | 124 | * common pin o subete OFF suru |
suupen | 0:a62a79548d00 | 125 | **************************************/ |
suupen | 0:a62a79548d00 | 126 | void dynamic_comAllClear(void){ |
suupen | 0:a62a79548d00 | 127 | com_1 = 0; |
suupen | 0:a62a79548d00 | 128 | com_2 = 0; |
suupen | 0:a62a79548d00 | 129 | com_3 = 0; |
suupen | 0:a62a79548d00 | 130 | com_4 = 0; |
suupen | 0:a62a79548d00 | 131 | com_L = 0; |
suupen | 0:a62a79548d00 | 132 | } |
suupen | 0:a62a79548d00 | 133 | |
suupen | 0:a62a79548d00 | 134 | /************************************** |
suupen | 0:a62a79548d00 | 135 | * dynamic_segAllClear |
suupen | 0:a62a79548d00 | 136 | * |
suupen | 0:a62a79548d00 | 137 | * segment pin o subete OFF suru |
suupen | 0:a62a79548d00 | 138 | **************************************/ |
suupen | 0:a62a79548d00 | 139 | void dynamic_segAllClear(void){ |
suupen | 0:a62a79548d00 | 140 | seg_a = 1; |
suupen | 0:a62a79548d00 | 141 | seg_b = 1; |
suupen | 0:a62a79548d00 | 142 | seg_c = 1; |
suupen | 0:a62a79548d00 | 143 | seg_d = 1; |
suupen | 0:a62a79548d00 | 144 | seg_e = 1; |
suupen | 0:a62a79548d00 | 145 | seg_f = 1; |
suupen | 0:a62a79548d00 | 146 | seg_p = 1; |
suupen | 0:a62a79548d00 | 147 | } |
suupen | 0:a62a79548d00 | 148 | |
suupen | 0:a62a79548d00 | 149 | /************************************** |
suupen | 0:a62a79548d00 | 150 | * dynamic_segDataSet |
suupen | 0:a62a79548d00 | 151 | * |
suupen | 0:a62a79548d00 | 152 | * segment pin ni shuturyoku data o settei |
suupen | 0:a62a79548d00 | 153 | **************************************/ |
suupen | 0:a62a79548d00 | 154 | void dynamic_segDataSet(unsigned char data){ |
suupen | 0:a62a79548d00 | 155 | const unsigned char Z_segData[10] = {D_0, D_1, D_2, D_3, D_4, D_5, D_6, D_7, D_8, D_9,}; |
suupen | 0:a62a79548d00 | 156 | unsigned char work; |
suupen | 0:a62a79548d00 | 157 | |
suupen | 0:a62a79548d00 | 158 | work = Z_segData[data]; |
suupen | 0:a62a79548d00 | 159 | |
suupen | 0:a62a79548d00 | 160 | seg_a = (work & 0x80) ? 0 : 1; |
suupen | 0:a62a79548d00 | 161 | seg_b = (work & 0x40) ? 0 : 1; |
suupen | 0:a62a79548d00 | 162 | seg_c = (work & 0x20) ? 0 : 1; |
suupen | 0:a62a79548d00 | 163 | seg_d = (work & 0x10) ? 0 : 1; |
suupen | 0:a62a79548d00 | 164 | seg_e = (work & 0x08) ? 0 : 1; |
suupen | 0:a62a79548d00 | 165 | seg_f = (work & 0x04) ? 0 : 1; |
suupen | 0:a62a79548d00 | 166 | seg_g = (work & 0x02) ? 0 : 1; |
suupen | 0:a62a79548d00 | 167 | seg_p = (work & 0x01) ? 0 : 1; |
suupen | 0:a62a79548d00 | 168 | |
suupen | 0:a62a79548d00 | 169 | } |
suupen | 0:a62a79548d00 | 170 | |
suupen | 0:a62a79548d00 | 171 | /************************************** |
suupen | 0:a62a79548d00 | 172 | * dynamic_output |
suupen | 0:a62a79548d00 | 173 | * |
suupen | 0:a62a79548d00 | 174 | * dynamic dosa saseru. |
suupen | 0:a62a79548d00 | 175 | * kono kansu wo jiikou suru tabi ni common pin o kirikaeru |
suupen | 0:a62a79548d00 | 176 | **************************************/ |
suupen | 0:a62a79548d00 | 177 | void dynamic_output(void){ |
suupen | 0:a62a79548d00 | 178 | static unsigned char M_seg = 0; |
suupen | 0:a62a79548d00 | 179 | |
suupen | 0:a62a79548d00 | 180 | switch(M_seg){ |
suupen | 0:a62a79548d00 | 181 | case 0: // shoto |
suupen | 0:a62a79548d00 | 182 | dynamic_comAllClear(); |
suupen | 0:a62a79548d00 | 183 | dynamic_segAllClear(); |
suupen | 0:a62a79548d00 | 184 | |
suupen | 0:a62a79548d00 | 185 | M_seg = 1; |
suupen | 0:a62a79548d00 | 186 | |
suupen | 0:a62a79548d00 | 187 | break; |
suupen | 0:a62a79548d00 | 188 | case 1: // common1 shuturyoku |
suupen | 0:a62a79548d00 | 189 | dynamic_comAllClear(); |
suupen | 0:a62a79548d00 | 190 | dynamic_segDataSet(D_7seg[0]); |
suupen | 0:a62a79548d00 | 191 | com_1 = 1; |
suupen | 0:a62a79548d00 | 192 | |
suupen | 0:a62a79548d00 | 193 | M_seg = 2; |
suupen | 0:a62a79548d00 | 194 | break; |
suupen | 0:a62a79548d00 | 195 | case 2: // common2 shuturyoku |
suupen | 0:a62a79548d00 | 196 | dynamic_comAllClear(); |
suupen | 0:a62a79548d00 | 197 | dynamic_segDataSet(D_7seg[1]); |
suupen | 0:a62a79548d00 | 198 | com_2 = 1; |
suupen | 0:a62a79548d00 | 199 | |
suupen | 0:a62a79548d00 | 200 | M_seg = 3; |
suupen | 0:a62a79548d00 | 201 | break; |
suupen | 0:a62a79548d00 | 202 | case 3: // common3 shuturyoku |
suupen | 0:a62a79548d00 | 203 | dynamic_comAllClear(); |
suupen | 0:a62a79548d00 | 204 | dynamic_segDataSet(D_7seg[2]); |
suupen | 0:a62a79548d00 | 205 | com_3 = 1; |
suupen | 0:a62a79548d00 | 206 | |
suupen | 0:a62a79548d00 | 207 | M_seg = 4; |
suupen | 0:a62a79548d00 | 208 | break; |
suupen | 0:a62a79548d00 | 209 | case 4: // common4 shuturyoku |
suupen | 0:a62a79548d00 | 210 | dynamic_comAllClear(); |
suupen | 0:a62a79548d00 | 211 | dynamic_segDataSet(D_7seg[3]); |
suupen | 0:a62a79548d00 | 212 | com_4 = 1; |
suupen | 0:a62a79548d00 | 213 | |
suupen | 0:a62a79548d00 | 214 | M_seg = 1; |
suupen | 0:a62a79548d00 | 215 | break; |
suupen | 0:a62a79548d00 | 216 | default: // M_seg no atai ga ijo no tokino shori |
suupen | 0:a62a79548d00 | 217 | dynamic_comAllClear(); |
suupen | 0:a62a79548d00 | 218 | dynamic_segAllClear(); |
suupen | 0:a62a79548d00 | 219 | M_seg = 1; |
suupen | 0:a62a79548d00 | 220 | break; |
suupen | 0:a62a79548d00 | 221 | |
suupen | 0:a62a79548d00 | 222 | } |
suupen | 0:a62a79548d00 | 223 | |
suupen | 0:a62a79548d00 | 224 | } |