TM1638 LED controller. Max 80 LEDs, Max 24 Key scan. Supports LED&KEY, QYF-TM1638 and JY-LKM1638 module.
Dependents: mbed_TM1638 Otjimaniya RL0201-V1
See here for more information.
Diff: TM1638.cpp
- Revision:
- 2:532ce15ea9ec
- Parent:
- 1:1f2453ed85d7
- Child:
- 3:25ddabfadc8c
diff -r 1f2453ed85d7 -r 532ce15ea9ec TM1638.cpp --- a/TM1638.cpp Sat Jan 09 14:30:43 2016 +0000 +++ b/TM1638.cpp Fri Jan 15 19:09:59 2016 +0000 @@ -1,5 +1,6 @@ /* mbed TM1638 Library, for TM1638 LED controller * Copyright (c) 2015, v01: WH, Initial version + * 2016, v02: WH, Added ASCII alphabet display selector, refactored display and keyboard defines * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -159,8 +160,9 @@ for (int idx=0; idx < TM1638_KEY_MEM; idx++) { data = _flip(_spi.write(0xFF)); // read keys and correct bitorder + data = data & TM1638_KEY_MSK; // Mask valid bits if (data != 0) { // Check for any pressed key - for (int bit=0; bit < TM1638_KEY_BITS; bit++) { + for (int bit=0; bit < 8; bit++) { if (data & (1 << bit)) {keypress++;} // Test all significant bits } } @@ -294,7 +296,7 @@ } } - writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2)); + writeData(_displaybuffer, (LEDKEY8_NR_GRIDS * TM1638_BYTES_PER_GRID)); _column = 0; } @@ -309,12 +311,12 @@ icn = icon & 0xFFFF; addr = (icon >> 24) & 0xFF; - addr = (addr - 1) << 1; + addr = (addr - 1) << 1; // * PT1638_BYTES_PER_GRID //Save char...and set bits for icon to write _displaybuffer[addr] = _displaybuffer[addr] | LO(icn); _displaybuffer[addr+1] = _displaybuffer[addr+1] | HI(icn); - writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2)); + writeData(_displaybuffer, (LEDKEY8_NR_GRIDS * TM1638_BYTES_PER_GRID)); } /** Clr Icon @@ -327,12 +329,12 @@ icn = icon & 0xFFFF; addr = (icon >> 24) & 0xFF; - addr = (addr - 1) << 1; + addr = (addr - 1) << 1; // * TM1638_BYTES_PER_GRID //Save char...and clr bits for icon to write _displaybuffer[addr] = _displaybuffer[addr] & ~LO(icn); _displaybuffer[addr+1] = _displaybuffer[addr+1] & ~HI(icn); - writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2)); + writeData(_displaybuffer, (LEDKEY8_NR_GRIDS * TM1638_BYTES_PER_GRID)); } @@ -376,27 +378,37 @@ if (_column > 0) { //Translate between _column and displaybuffer entries //Add DP to bitpattern of digit left of current column. - addr = (_column - 1) << 1; + addr = (_column - 1) << 1; // * PT1638_BYTES_PER_GRID //Save icons...and set bits for decimal point to write _displaybuffer[addr] = _displaybuffer[addr] | pattern; // _displaybuffer[addr+1] = _displaybuffer[addr+1] | pattern; - writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2)); + writeData(_displaybuffer, (LEDKEY8_NR_GRIDS * TM1638_BYTES_PER_GRID)); //No Cursor Update } - } - else if (value == '-') { - //No character to write - validChar = true; - pattern = C7_MIN; } else if ((value >= 0) && (value < LEDKEY8_NR_UDC)) { //Character to write validChar = true; pattern = _UDC_7S[value]; } + +#if (SHOW_ASCII == 1) + //display all ASCII characters + else if ((value >= FONT_7S_START) && (value <= FONT_7S_END)) { + //Character to write + validChar = true; + pattern = FONT_7S[value - FONT_7S_START]; + } // else +#else + //display only digits and hex characters + else if (value == '-') { + //Character to write + validChar = true; + pattern = C7_MIN; + } else if ((value >= (int)'0') && (value <= (int) '9')) { //Character to write validChar = true; @@ -412,18 +424,19 @@ validChar = true; pattern = FONT_7S[10 + value - (int) 'a']; } //else +#endif if (validChar) { //Character to write //Translate between _column and displaybuffer entries - addr = _column << 1; + addr = _column << 1; // * TM1638_BYTES_PER_GRID //Save icons...and set bits for character to write _displaybuffer[addr] = (_displaybuffer[addr] & MASK_ICON_GRID[_column][0]) | pattern; // _displaybuffer[addr+1] = (_displaybuffer[addr+1] & MASK_ICON_GRID[_column][0]) | pattern; - writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2)); + writeData(_displaybuffer, (LEDKEY8_NR_GRIDS * TM1638_BYTES_PER_GRID)); //Update Cursor _column++;