Test program for TM1638 LED controller. Supports LED&KEY, QYF-TM1638 and JY-LKM1638 module.

Dependencies:   TM1638 mbed

See here for more information.

Committer:
wim
Date:
Mon Dec 21 22:39:38 2015 +0000
Revision:
0:e7bc81df3e38
Child:
1:12dadbc0017d
First test of TM1638

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:e7bc81df3e38 1 /* mbed TM1638 Test program, for TM1628 LED controller
wim 0:e7bc81df3e38 2 * Copyright (c) 2015, v01: WH, Initial version
wim 0:e7bc81df3e38 3 *
wim 0:e7bc81df3e38 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 0:e7bc81df3e38 5 * of this software and associated documentation files (the "Software"), to deal
wim 0:e7bc81df3e38 6 * in the Software without restriction, including without limitation the rights
wim 0:e7bc81df3e38 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 0:e7bc81df3e38 8 * copies of the Software, and to permit persons to whom the Software is
wim 0:e7bc81df3e38 9 * furnished to do so, subject to the following conditions:
wim 0:e7bc81df3e38 10 *
wim 0:e7bc81df3e38 11 * The above copyright notice and this permission notice shall be included in
wim 0:e7bc81df3e38 12 * all copies or substantial portions of the Software.
wim 0:e7bc81df3e38 13 *
wim 0:e7bc81df3e38 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 0:e7bc81df3e38 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 0:e7bc81df3e38 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 0:e7bc81df3e38 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 0:e7bc81df3e38 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 0:e7bc81df3e38 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 0:e7bc81df3e38 20 * THE SOFTWARE.
wim 0:e7bc81df3e38 21 */
wim 0:e7bc81df3e38 22 #include "mbed.h"
wim 0:e7bc81df3e38 23 #include "TM1638.h"
wim 0:e7bc81df3e38 24
wim 0:e7bc81df3e38 25 #if (LEDKEY8_TEST == 1)
wim 0:e7bc81df3e38 26 // LEDKEY8 TM1638 Test
wim 0:e7bc81df3e38 27 #include "Font_7Seg.h"
wim 0:e7bc81df3e38 28
wim 0:e7bc81df3e38 29 Serial pc(USBTX, USBRX);
wim 0:e7bc81df3e38 30 DigitalOut myled(LED1);
wim 0:e7bc81df3e38 31
wim 0:e7bc81df3e38 32 // DisplayData_t size is 16 bytes (8 Grids @ 10 Segments)
wim 0:e7bc81df3e38 33 TM1638::DisplayData_t all_str = {0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03};
wim 0:e7bc81df3e38 34 TM1638::DisplayData_t cls_str = {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00};
wim 0:e7bc81df3e38 35 TM1638::DisplayData_t hello_str = {C7_H,0x00, C7_E,0x00, C7_L,0x00, C7_L,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00};
wim 0:e7bc81df3e38 36
wim 0:e7bc81df3e38 37 // KeyData_t size is 3 bytes
wim 0:e7bc81df3e38 38 TM1638::KeyData_t keydata;
wim 0:e7bc81df3e38 39
wim 0:e7bc81df3e38 40 // Switchdata is 1 byte
wim 0:e7bc81df3e38 41 char switchdata;
wim 0:e7bc81df3e38 42
wim 0:e7bc81df3e38 43 //TM1638_LEDKEY8 declaration
wim 0:e7bc81df3e38 44 TM1638_LEDKEY8 LEDKEY8(p5,p6,p7, p8);
wim 0:e7bc81df3e38 45
wim 0:e7bc81df3e38 46 char cmd, bits;
wim 0:e7bc81df3e38 47 int main() {
wim 0:e7bc81df3e38 48
wim 0:e7bc81df3e38 49 pc.printf("Hello World\r\n"); //
wim 0:e7bc81df3e38 50
wim 0:e7bc81df3e38 51 LEDKEY8.cls();
wim 0:e7bc81df3e38 52 LEDKEY8.writeData(all_str);
wim 0:e7bc81df3e38 53 wait(2);
wim 0:e7bc81df3e38 54 LEDKEY8.setBrightness(TM1638_BRT3);
wim 0:e7bc81df3e38 55 wait(1);
wim 0:e7bc81df3e38 56 LEDKEY8.setBrightness(TM1638_BRT0);
wim 0:e7bc81df3e38 57 wait(1);
wim 0:e7bc81df3e38 58 LEDKEY8.setBrightness(TM1638_BRT4);
wim 0:e7bc81df3e38 59
wim 0:e7bc81df3e38 60 wait(1);
wim 0:e7bc81df3e38 61 LEDKEY8.cls(true);
wim 0:e7bc81df3e38 62 LEDKEY8.writeData(hello_str);
wim 0:e7bc81df3e38 63
wim 0:e7bc81df3e38 64 while (1) {
wim 0:e7bc81df3e38 65
wim 0:e7bc81df3e38 66 // Check and read keydata
wim 0:e7bc81df3e38 67 if (LEDKEY8.getKeys(&keydata)) {
wim 0:e7bc81df3e38 68 pc.printf("Keydata 0..3 = 0x%02x 0x%02x 0x%02x 0x%02x\r\n", keydata[0], keydata[1], keydata[2], keydata[3]);
wim 0:e7bc81df3e38 69
wim 0:e7bc81df3e38 70 if (keydata[0] == 0x01) { //sw1
wim 0:e7bc81df3e38 71 LEDKEY8.cls();
wim 0:e7bc81df3e38 72 LEDKEY8.writeData(all_str);
wim 0:e7bc81df3e38 73 }
wim 0:e7bc81df3e38 74
wim 0:e7bc81df3e38 75 if (keydata[1] == 0x01) { //sw2
wim 0:e7bc81df3e38 76 LEDKEY8.cls();
wim 0:e7bc81df3e38 77 // LEDKEY8.writeData(hello_str);
wim 0:e7bc81df3e38 78 #if(1)
wim 0:e7bc81df3e38 79 //test to show all segs
wim 0:e7bc81df3e38 80 pc.printf("Show all segs\r\n");
wim 0:e7bc81df3e38 81 wait(1);
wim 0:e7bc81df3e38 82 LEDKEY8.cls();
wim 0:e7bc81df3e38 83
wim 0:e7bc81df3e38 84 for (int i=0; i<TM1638_DISPLAY_MEM; i++) {
wim 0:e7bc81df3e38 85 for (int bit=0; bit<8; bit++) {
wim 0:e7bc81df3e38 86 LEDKEY8.cls();
wim 0:e7bc81df3e38 87
wim 0:e7bc81df3e38 88 bits = 0x01 << bit;
wim 0:e7bc81df3e38 89 LEDKEY8.writeData(i, bits);
wim 0:e7bc81df3e38 90
wim 0:e7bc81df3e38 91 pc.printf("Idx = %d, Bits = 0x%02x\r\n", i, bits);
wim 0:e7bc81df3e38 92 // wait(0.5);
wim 0:e7bc81df3e38 93 cmd = pc.getc(); // wait for key
wim 0:e7bc81df3e38 94 }
wim 0:e7bc81df3e38 95 }
wim 0:e7bc81df3e38 96 pc.printf("Show all segs done\r\n");
wim 0:e7bc81df3e38 97 #endif
wim 0:e7bc81df3e38 98
wim 0:e7bc81df3e38 99 }
wim 0:e7bc81df3e38 100
wim 0:e7bc81df3e38 101
wim 0:e7bc81df3e38 102 if (keydata[2] == 0x01) { //sw3
wim 0:e7bc81df3e38 103 // LEDKEY8.cls();
wim 0:e7bc81df3e38 104 // LEDKEY8.writeData(mbed_str);
wim 0:e7bc81df3e38 105
wim 0:e7bc81df3e38 106 #if(0)
wim 0:e7bc81df3e38 107 //test to show all chars
wim 0:e7bc81df3e38 108 pc.printf("Show all chars\r\n");
wim 0:e7bc81df3e38 109 wait(1);
wim 0:e7bc81df3e38 110 LEDKEY8.cls();
wim 0:e7bc81df3e38 111
wim 0:e7bc81df3e38 112 for (int i=0; i<26; i++) {
wim 0:e7bc81df3e38 113 LEDKEY8.writeData(0, FONT_16S[i][0]);
wim 0:e7bc81df3e38 114 LEDKEY8.writeData(1, FONT_16S[i][1]);
wim 0:e7bc81df3e38 115 wait(1);
wim 0:e7bc81df3e38 116 }
wim 0:e7bc81df3e38 117 pc.printf("Show all chars done\r\n");
wim 0:e7bc81df3e38 118 #endif
wim 0:e7bc81df3e38 119
wim 0:e7bc81df3e38 120
wim 0:e7bc81df3e38 121 #if(0)
wim 0:e7bc81df3e38 122 //test to show all digits (base is 10)
wim 0:e7bc81df3e38 123 pc.printf("Show all digits\r\n");
wim 0:e7bc81df3e38 124 wait(1);
wim 0:e7bc81df3e38 125 LEDKEY8.cls();
wim 0:e7bc81df3e38 126
wim 0:e7bc81df3e38 127 int val = 1;
wim 0:e7bc81df3e38 128 for (int i=0; i<LEDKEY8_NR_DIGITS; i++) {
wim 0:e7bc81df3e38 129
wim 0:e7bc81df3e38 130 for (int cnt=0; cnt<10; cnt++) {
wim 0:e7bc81df3e38 131 LEDKEY8.locate(0);
wim 0:e7bc81df3e38 132 LEDKEY8.printf("%07d", (val * cnt));
wim 0:e7bc81df3e38 133
wim 0:e7bc81df3e38 134 // wait(0.5);
wim 0:e7bc81df3e38 135 cmd = pc.getc(); // wait for key
wim 0:e7bc81df3e38 136 }
wim 0:e7bc81df3e38 137 val = val * 10;
wim 0:e7bc81df3e38 138 }
wim 0:e7bc81df3e38 139 pc.printf("Show all digits done\r\n");
wim 0:e7bc81df3e38 140 #endif
wim 0:e7bc81df3e38 141
wim 0:e7bc81df3e38 142 #if(1)
wim 0:e7bc81df3e38 143 //test to show all digits (base is 0x10)
wim 0:e7bc81df3e38 144 pc.printf("Show all hex digits\r\n");
wim 0:e7bc81df3e38 145 wait(1);
wim 0:e7bc81df3e38 146 LEDKEY8.cls();
wim 0:e7bc81df3e38 147
wim 0:e7bc81df3e38 148 LEDKEY8.printf("%08x", 0x012345AB);
wim 0:e7bc81df3e38 149 cmd = pc.getc(); // wait for key
wim 0:e7bc81df3e38 150
wim 0:e7bc81df3e38 151 int val = 1;
wim 0:e7bc81df3e38 152 for (int i=0; i<LEDKEY8_NR_DIGITS; i++) {
wim 0:e7bc81df3e38 153
wim 0:e7bc81df3e38 154 for (int cnt=0; cnt<0x10; cnt++) {
wim 0:e7bc81df3e38 155 LEDKEY8.locate(0);
wim 0:e7bc81df3e38 156 LEDKEY8.printf("%08x", (val * cnt));
wim 0:e7bc81df3e38 157
wim 0:e7bc81df3e38 158 // wait(0.5);
wim 0:e7bc81df3e38 159 cmd = pc.getc(); // wait for key
wim 0:e7bc81df3e38 160 }
wim 0:e7bc81df3e38 161 val = val * 0x10;
wim 0:e7bc81df3e38 162 }
wim 0:e7bc81df3e38 163 pc.printf("Show all hex digits done\r\n");
wim 0:e7bc81df3e38 164 #endif
wim 0:e7bc81df3e38 165 }
wim 0:e7bc81df3e38 166
wim 0:e7bc81df3e38 167 if (keydata[3] == 0x01) { //sw4
wim 0:e7bc81df3e38 168 // LEDKEY8.cls();
wim 0:e7bc81df3e38 169 // LEDKEY8.writeData(mbed_str);
wim 0:e7bc81df3e38 170 #if(1)
wim 0:e7bc81df3e38 171 //test to show all icons
wim 0:e7bc81df3e38 172 pc.printf("Show all icons\r\n");
wim 0:e7bc81df3e38 173 wait(1);
wim 0:e7bc81df3e38 174 LEDKEY8.cls(true); // Also clear all Icons
wim 0:e7bc81df3e38 175 wait(1);
wim 0:e7bc81df3e38 176
wim 0:e7bc81df3e38 177 float delay=0.1;
wim 0:e7bc81df3e38 178 // Icons on
wim 0:e7bc81df3e38 179 LEDKEY8.setIcon(TM1638_LEDKEY8::LD1); wait(delay);
wim 0:e7bc81df3e38 180 LEDKEY8.setIcon(TM1638_LEDKEY8::LD2); wait(delay);
wim 0:e7bc81df3e38 181 LEDKEY8.setIcon(TM1638_LEDKEY8::LD3); wait(delay);
wim 0:e7bc81df3e38 182 LEDKEY8.setIcon(TM1638_LEDKEY8::LD4); wait(delay);
wim 0:e7bc81df3e38 183 LEDKEY8.setIcon(TM1638_LEDKEY8::LD5); wait(delay);
wim 0:e7bc81df3e38 184 LEDKEY8.setIcon(TM1638_LEDKEY8::LD6); wait(delay);
wim 0:e7bc81df3e38 185 LEDKEY8.setIcon(TM1638_LEDKEY8::LD7); wait(delay);
wim 0:e7bc81df3e38 186 LEDKEY8.setIcon(TM1638_LEDKEY8::LD8); wait(delay);
wim 0:e7bc81df3e38 187
wim 0:e7bc81df3e38 188 wait(delay);
wim 0:e7bc81df3e38 189
wim 0:e7bc81df3e38 190 // Icons off
wim 0:e7bc81df3e38 191 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD1); wait(delay);
wim 0:e7bc81df3e38 192 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD2); wait(delay);
wim 0:e7bc81df3e38 193 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD3); wait(delay);
wim 0:e7bc81df3e38 194 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD4); wait(delay);
wim 0:e7bc81df3e38 195 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD5); wait(delay);
wim 0:e7bc81df3e38 196 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD6); wait(delay);
wim 0:e7bc81df3e38 197 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD7); wait(delay);
wim 0:e7bc81df3e38 198 LEDKEY8.clrIcon(TM1638_LEDKEY8::LD8); wait(delay);
wim 0:e7bc81df3e38 199
wim 0:e7bc81df3e38 200 // wait(1);
wim 0:e7bc81df3e38 201 // LEDKEY8.cls(); // clear all, preserve Icons
wim 0:e7bc81df3e38 202 pc.printf("Show all icons done\r\n");
wim 0:e7bc81df3e38 203 #endif
wim 0:e7bc81df3e38 204 }
wim 0:e7bc81df3e38 205
wim 0:e7bc81df3e38 206 if (keydata[0] == 0x10) { //sw5
wim 0:e7bc81df3e38 207 }
wim 0:e7bc81df3e38 208
wim 0:e7bc81df3e38 209 if (keydata[1] == 0x10) { //sw6
wim 0:e7bc81df3e38 210 }
wim 0:e7bc81df3e38 211
wim 0:e7bc81df3e38 212 if (keydata[2] == 0x10) { //sw7
wim 0:e7bc81df3e38 213 }
wim 0:e7bc81df3e38 214
wim 0:e7bc81df3e38 215 if (keydata[3] == 0x10) { //sw8
wim 0:e7bc81df3e38 216 }
wim 0:e7bc81df3e38 217
wim 0:e7bc81df3e38 218 } //if Key
wim 0:e7bc81df3e38 219
wim 0:e7bc81df3e38 220 myled = !myled;
wim 0:e7bc81df3e38 221 wait(0.3);
wim 0:e7bc81df3e38 222 } //while
wim 0:e7bc81df3e38 223 }
wim 0:e7bc81df3e38 224 #endif
wim 0:e7bc81df3e38 225
wim 0:e7bc81df3e38 226
wim 0:e7bc81df3e38 227
wim 0:e7bc81df3e38 228 #if (TM1638_TEST == 1)
wim 0:e7bc81df3e38 229 // Direct TM1638 Test
wim 0:e7bc81df3e38 230
wim 0:e7bc81df3e38 231 Serial pc(USBTX, USBRX);
wim 0:e7bc81df3e38 232 DigitalOut myled(LED1);
wim 0:e7bc81df3e38 233
wim 0:e7bc81df3e38 234 // DisplayData_t size is 16 bytes (8 Grids @ 10 Segments)
wim 0:e7bc81df3e38 235 TM1638::DisplayData_t all_str = {0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03};
wim 0:e7bc81df3e38 236 TM1638::DisplayData_t cls_str = {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00};
wim 0:e7bc81df3e38 237
wim 0:e7bc81df3e38 238 // KeyData_t size is 4 bytes
wim 0:e7bc81df3e38 239 TM1638::KeyData_t keydata;
wim 0:e7bc81df3e38 240
wim 0:e7bc81df3e38 241 TM1638 TM1638(p5,p6,p7, p8);
wim 0:e7bc81df3e38 242
wim 0:e7bc81df3e38 243 char cmd, bits;
wim 0:e7bc81df3e38 244 int main() {
wim 0:e7bc81df3e38 245
wim 0:e7bc81df3e38 246 pc.printf("Hello World\r\n"); //
wim 0:e7bc81df3e38 247
wim 0:e7bc81df3e38 248 TM1638.cls();
wim 0:e7bc81df3e38 249 TM1638.writeData(all_str);
wim 0:e7bc81df3e38 250 wait(2);
wim 0:e7bc81df3e38 251 TM1638.setBrightness(TM1638_BRT3);
wim 0:e7bc81df3e38 252 wait(1);
wim 0:e7bc81df3e38 253 TM1638.setBrightness(TM1638_BRT0);
wim 0:e7bc81df3e38 254 wait(1);
wim 0:e7bc81df3e38 255 TM1638.setBrightness(TM1638_BRT4);
wim 0:e7bc81df3e38 256
wim 0:e7bc81df3e38 257 while (1) {
wim 0:e7bc81df3e38 258
wim 0:e7bc81df3e38 259 // Check and read keydata
wim 0:e7bc81df3e38 260 if (TM1638.getKeys(&keydata)) {
wim 0:e7bc81df3e38 261 pc.printf("Keydata 0..3 = 0x%02x 0x%02x 0x%02x 0x%02x\r\n", keydata[0], keydata[1], keydata[2], keydata[3]);
wim 0:e7bc81df3e38 262
wim 0:e7bc81df3e38 263 if (keydata[0] == 0x01) { //sw1
wim 0:e7bc81df3e38 264 TM1638.cls();
wim 0:e7bc81df3e38 265 TM1638.writeData(all_str);
wim 0:e7bc81df3e38 266 }
wim 0:e7bc81df3e38 267
wim 0:e7bc81df3e38 268 if (keydata[1] == 0x01) { //sw2
wim 0:e7bc81df3e38 269 TM1638.cls();
wim 0:e7bc81df3e38 270 TM1638.writeData(cls_str);
wim 0:e7bc81df3e38 271 }
wim 0:e7bc81df3e38 272
wim 0:e7bc81df3e38 273
wim 0:e7bc81df3e38 274 if (keydata[2] == 0x01) { //sw3
wim 0:e7bc81df3e38 275 #if(1)
wim 0:e7bc81df3e38 276 //test to show all segs
wim 0:e7bc81df3e38 277 pc.printf("Show all segs\r\n");
wim 0:e7bc81df3e38 278 wait(1);
wim 0:e7bc81df3e38 279 TM1638.cls();
wim 0:e7bc81df3e38 280
wim 0:e7bc81df3e38 281 for (int i=0; i<TM1638_DISPLAY_MEM; i++) {
wim 0:e7bc81df3e38 282 for (int bit=0; bit<8; bit++) {
wim 0:e7bc81df3e38 283 TM1638.cls();
wim 0:e7bc81df3e38 284
wim 0:e7bc81df3e38 285 bits = 0x01 << bit;
wim 0:e7bc81df3e38 286 TM1638.writeData(i, bits);
wim 0:e7bc81df3e38 287
wim 0:e7bc81df3e38 288 pc.printf("Idx = %d, Bits = 0x%02x\r\n", i, bits);
wim 0:e7bc81df3e38 289 // wait(0.5);
wim 0:e7bc81df3e38 290 cmd = pc.getc(); // wait for key
wim 0:e7bc81df3e38 291 }
wim 0:e7bc81df3e38 292 }
wim 0:e7bc81df3e38 293 pc.printf("Show all segs done\r\n");
wim 0:e7bc81df3e38 294 #endif
wim 0:e7bc81df3e38 295 }
wim 0:e7bc81df3e38 296
wim 0:e7bc81df3e38 297 if (keydata[3] == 0x01) { //sw4
wim 0:e7bc81df3e38 298 TM1638.cls();
wim 0:e7bc81df3e38 299 // TM1638.writeData(hello_str);
wim 0:e7bc81df3e38 300 }
wim 0:e7bc81df3e38 301
wim 0:e7bc81df3e38 302
wim 0:e7bc81df3e38 303 } //if Key
wim 0:e7bc81df3e38 304
wim 0:e7bc81df3e38 305 myled = !myled;
wim 0:e7bc81df3e38 306 wait(0.3);
wim 0:e7bc81df3e38 307 } //while
wim 0:e7bc81df3e38 308 }
wim 0:e7bc81df3e38 309 #endif