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:
2:532ce15ea9ec
Parent:
1:1f2453ed85d7
Child:
3:25ddabfadc8c
--- 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++;