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.

Revision:
1:1f2453ed85d7
Parent:
0:201dfacbe0e5
Child:
2:532ce15ea9ec
--- a/TM1638.cpp	Mon Dec 21 22:39:22 2015 +0000
+++ b/TM1638.cpp	Sat Jan 09 14:30:43 2016 +0000
@@ -301,13 +301,13 @@
 
 /** Set Icon
   *
-  * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 24 LSBs
+  * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
   * @return none
   */
 void TM1638_LEDKEY8::setIcon(Icon icon) {
   int addr, icn;
 
-   icn =        icon  & 0xFFFFFF;
+   icn =        icon  & 0xFFFF;
   addr = (icon >> 24) & 0xFF; 
   addr = (addr - 1) << 1;   
     
@@ -319,13 +319,13 @@
 
 /** Clr Icon
   *
-  * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 24 LSBs
+  * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
   * @return none
   */
 void TM1638_LEDKEY8::clrIcon(Icon icon) {
   int addr, icn;
 
-   icn =        icon  & 0xFFFFFF;
+   icn =        icon  & 0xFFFF;
   addr = (icon >> 24) & 0xFF; 
   addr = (addr - 1) << 1;   
     
@@ -353,7 +353,6 @@
 }
 
 
-#if(1)
 /** Write a single character (Stream implementation)
   */
 int TM1638_LEDKEY8::_putc(int value) {
@@ -368,6 +367,31 @@
       //Update Cursor      
       _column = 0;
     }
+    else if ((value == '.') || (value == ',')) {
+      //No character to write
+      validChar = false;
+      pattern = S7_DP; // placeholder for all DPs
+      
+      // Check to see that DP can be shown for current column
+      if (_column > 0) {
+        //Translate between _column and displaybuffer entries
+        //Add DP to bitpattern of digit left of current column.
+        addr = (_column - 1) << 1;
+      
+        //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));
+        
+        //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;
@@ -412,88 +436,6 @@
     return value;
 }
 
-#else
-
-/** Write a single character (Stream implementation)
-  */
-int TM1638_LEDKEY8::_putc(int value) {
-  int addr;
-    
-    if ((value == '\n') || (value == '\r')) {
-      //No character to write
-      
-      //Update Cursor      
-      _column = 0;
-    }
-    else if ((value >= 0) && (value < LEDKEY8_NR_UDC)) {
-      //Character to write
-      addr = (LEDKEY8_DIG1_IDX + ((LEDKEY8_NR_DIGITS - 1) - _column)) << 1; 
-      
-      //Save icons...and set bits for character to write
-//      _displaybuffer[addr]   = (_displaybuffer[addr]   & LO(S_ICON_MSK)) | _UDC_16S[value][0];      
-//      _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | _UDC_16S[value][1];      
-      writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2));
-               
-      //Update Cursor
-      _column++;
-      if (_column > (LEDKEY8_NR_DIGITS - 1)) {
-        _column = 0;
-      }          
-    }  
-    else if ((value >= (int)'0') && (value <= (int) '9')) {   
-      //Character to write
-      value = value - (int) '0';
-      addr = (LEDKEY8_DIG1_IDX + ((LEDKEY8_NR_DIGITS - 1) - _column)) << 1; 
-      
-      //Save icons...and set bits for character to write
-//      _displaybuffer[addr]   = (_displaybuffer[addr]   & LO(S_ICON_MSK)) | FONT_7S[value][0];      
-//      _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | FONT_7S[value][1];      
-      writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2));
-               
-      //Update Cursor
-      _column++;
-      if (_column > (LEDKEY8_NR_DIGITS - 1)) {
-        _column = 0;
-      }
-    }            
-    else if ((value >= (int) 'A') && (value <= (int) 'F')) {   
-      //Character to write
-      value = 10 + value - (int) 'A';
-      addr = (LEDKEY8_DIG1_IDX + ((LEDKEY8_NR_DIGITS - 1) - _column)) << 1; 
-      
-      //Save icons...and set bits for character to write
-//      _displaybuffer[addr]   = (_displaybuffer[addr]   & LO(S_ICON_MSK)) | FONT_7S[value][0];      
-//      _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | FONT_7S[value][1];      
-      writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2));
-               
-      //Update Cursor
-      _column++;
-      if (_column > (LEDKEY8_NR_DIGITS - 1)) {
-        _column = 0;
-      }
-    }  
-    else if ((value >= (int) 'a') && (value <= (int) 'f')) {   
-      //Character to write
-      value = 10 + value - (int) 'a';
-      addr = (LEDKEY8_DIG1_IDX + ((LEDKEY8_NR_DIGITS - 1) - _column)) << 1; 
-      
-      //Save icons...and set bits for character to write
-//      _displaybuffer[addr]   = (_displaybuffer[addr]   & LO(S_ICON_MSK)) | FONT_7S[value][0];      
-//      _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | FONT_7S[value][1];      
-      writeData(_displaybuffer, (LEDKEY8_NR_GRIDS*2));
-               
-      //Update Cursor
-      _column++;
-      if (_column > (LEDKEY8_NR_DIGITS - 1)) {
-        _column = 0;
-      }          
-
-    } //else
-
-    return value;
-}
-#endif
-
 
 // get a single character (Stream implementation)
 int TM1638_LEDKEY8::_getc() {