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++;
TM1638 LED controller (80 LEDs max), Keyboard scan (24 keys max)