Library for TM1637 LEDcontroller
Dependents: mbed_TM1637 TM1637_test
See here for more information.
Diff: TM1637.h
- Revision:
- 1:f63d87466f55
- Parent:
- 0:dc8789a6e21f
diff -r dc8789a6e21f -r f63d87466f55 TM1637.h
--- a/TM1637.h Sat Jan 30 20:35:25 2016 +0000
+++ b/TM1637.h Fri Oct 06 16:43:56 2017 +0000
@@ -1,5 +1,8 @@
/* mbed TM1637 Library, for TM1637 LED controller
* Copyright (c) 2016, v01: WH, Initial version
+ * 2017, v02: WH, Added RobotDyn 6 Digit module,
+ * Added Eyewink 6 Digit + 6 Keys module,
+ * Constructor adapted to 2 pins: dio, clk
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -32,37 +35,43 @@
* #include "mbed.h"
* #include "TM1637.h"
*
+ * Serial pc(USBTX, USBRX);
+ *
* //DisplayData_t size is 6 bytes (6 grids @ 8 segments)
* TM1637::DisplayData_t all_str = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
*
* // KeyData_t size is 1 bytes
* TM1637::KeyData_t keydata;
*
- * // TM1637 declaration
- * TM1637 TM1637(p5,p6,p7);
+ * // TM1637 declaration, Select the desired type in TM1637_Config.h
+ * //TM1637_CATALEX CATALEX(p5,p6,p7); //LPC1768 DEPRECATED version
+ * TM1637_CATALEX CATALEX(p6, p7); //LPC1768
+ * //TM1637_CATALEX CATALEX(D9, D10); //F401
*
* int main() {
- * TM1637.cls();
- * TM1637.writeData(all_str);
+ * CATALEX.cls();
+ * CATALEX.writeData(all_str);
* wait(1);
- * TM1637.setBrightness(TM1637_BRT0);
+ * CATALEX.setBrightness(TM1637_BRT0);
* wait(1);
- * TM1637.setBrightness(TM1637_BRT3);
+ * CATALEX.setBrightness(TM1637_BRT3);
*
* while (1) {
- * TM1637.cls();
+ * CATALEX.cls();
* wait(0.5);
- * TM1637.writeData(all_str);
- * wait(0.5);
+ * CATALEX.writeData(all_str);
+ * wait(1.0);
+ * CATALEX.cls();
+ * CATALEX.printf(" HI ");
+ * wait(1.0);
*
* // Check and read keydata
- * if (TM1637.getKeys(&keydata)) {
+ * if (CATALEX.getKeys(&keydata)) {
* pc.printf("Keydata = 0x%02x\r\n", keydata);
*
* if (keydata == TM1637_SW9_BIT) { //sw9
- * TM1637.cls();
- * TM1637.writeData(0xFF, 1);
- * TM1637.writeData(0xFF, 2);
+ * CATALEX.cls();
+ * CATALEX.printf("--09");
* }
* } // Check keydata
* } // while
@@ -117,6 +126,8 @@
//Access to 16 Switches
+//S0 S1 S2 K1 K2 1 1 1
+//K1,K2 = 0 1
#define TM1637_SW1_BIT 0xEF
#define TM1637_SW2_BIT 0x6F
#define TM1637_SW3_BIT 0xAF
@@ -126,6 +137,7 @@
#define TM1637_SW7_BIT 0x8F
#define TM1637_SW8_BIT 0x0F
+//K1,K2 = 1 0
#define TM1637_SW9_BIT 0xF7
#define TM1637_SW10_BIT 0x77
#define TM1637_SW11_BIT 0xB7
@@ -139,7 +151,7 @@
/** A class for driving TM1637 LED controller
*
- * @brief Supports 6 Grids @ 8 Segments.
+ * @brief Supports 6 Grids @ 8 Segments and 16 Keys.
* Serial bus interface device.
*/
class TM1637 {
@@ -150,18 +162,32 @@
/** Datatypes for keymatrix data */
typedef char KeyData_t;
-
+
+#if(SPI==1)
/** Constructor for class for driving TM1637 LED controller
*
- * @brief Supports 6 Grids @ 8 segments.
+ * @brief Supports 6 Grids @ 8 segments and 16 Keys.
+ * Serial bus interface device.
+ * DEPRECATED version
+ *
+ * @param PinName mosi_nc Serial bus NC pin
+ * @param PinName miso_dio Serial bus DIO pin
+ * @param PinName sclk_clk Serial bus CLK pin
+ */
+ TM1637(PinName mosi_nc, PinName miso_dio, PinName sclk_clk);
+#endif
+
+ /** Constructor for class for driving TM1637 LED controller
+ *
+ * @brief Supports 6 Grids @ 8 segments and 16 Keys.
* Serial bus interface device.
*
- * @param PinName mosi Serial bus MOSI pin
- * @param PinName miso Serial bus MISO pin
- * @param PinName sclk Serial bus SCLK pin
+ * @param PinName dio Serial bus DIO pin
+ * @param PinName sck Serial bus CLK pin
*/
- TM1637(PinName mosi, PinName miso, PinName sclk);
-
+ TM1637(PinName dio, PinName clk);
+
+
/** Clear the screen and locate to 0
*/
void cls();
@@ -201,10 +227,13 @@
*/
void setDisplay(bool on);
- private:
- DigitalOut _mosi;
- DigitalIn _miso;
- DigitalOut _sclk;
+ private:
+#if(SPI==1)
+ DigitalIn _mosi_nc; //Dummy to avoid breaking deprecated constructor
+#endif
+ DigitalInOut _dio;
+ DigitalOut _clk;
+
char _display;
char _bright;
@@ -234,10 +263,9 @@
void _write(int data);
/** Read byte from TM1637
- * @param int senddata
* @return read byte
*/
- char _read(int data);
+ char _read();
/** Write command and parameter to TM1637
* @param int cmd Command byte
@@ -247,9 +275,8 @@
void _writeCmd(int cmd, int data);
};
-
#if (CATALEX_TEST == 1)
-// Derived class for TM1637 used in CATALEX display unit
+// Derived class for TM1637 used in CATALEX display unit with 4 Digits
//
#include "Font_7Seg.h"
@@ -261,7 +288,8 @@
/** Constructor for class for driving TM1637 controller as used in CATALEX
*
- * @brief Supports 4 Digits of 7 Segments + DP.
+ * @brief Supports 4 Digits of 7 Segments + DP (or Colon for Digit2 on some models).
+ * Also Supports up to 16 Keys. Serial bus interface device.
*
* @param PinName mosi Serial bus MOSI pin
* @param PinName miso Serial bus MISO pin
@@ -273,21 +301,41 @@
/** Enums for Icons */
// Grid encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
enum Icon {
+ DP1 = ( 1<<24) | S7_DP1, /**< Digit 1 */
+ DP2 = ( 2<<24) | S7_DP2, /**< Digit 2 */
+ DP3 = ( 3<<24) | S7_DP3, /**< Digit 3 */
+ DP4 = ( 4<<24) | S7_DP4, /**< Digit 4 */
+
COL2 = ( 2<<24) | S7_DP2, /**< Column 2 */
};
typedef char UDCData_t[CATALEX_NR_UDC];
-
+
+#if (SPI==1)
/** Constructor for class for driving TM1637 LED controller as used in CATALEX
- *
- * @brief Supports 4 Digits of 7 Segments + DP.
- *
- * @param PinName mosi Serial bus MOSI pin
- * @param PinName mis0 Serial bus MISO pin
- * @param PinName sclk Serial bus SCLK pin
+ *
+ * @brief Supports 4 Digits of 7 Segments + DP (or Colon for Digit2 on some models).
+ * Also Supports up to 16 Keys. Serial bus interface device.
+ * DEPRECATED version
+ *
+ * @param PinName mosi_nc Serial bus NC pin
+ * @param PinName miso_dio Serial bus DIO pin
+ * @param PinName sclk_clk Serial bus CLK pin
*/
- TM1637_CATALEX(PinName mosi, PinName miso, PinName sclk);
+ TM1637_CATALEX(PinName mosi_nc, PinName miso_dio, PinName sclk_clk);
+#endif
+ /** Constructor for class for driving TM1637 LED controller
+ *
+ * @brief Supports 4 Digits of 7 Segments + DP (or Colon for Digit2 on some models).
+ * Also Supports up to 16 Keys. Serial bus interface device.
+ *
+ * @param PinName dio Serial bus DIO pin
+ * @param PinName sck Serial bus CLK pin
+ */
+ TM1637_CATALEX(PinName dio, PinName clk);
+
+
#if DOXYGEN_ONLY
/** Write a character to the Display
*
@@ -355,7 +403,7 @@
/** Write Display datablock to TM1637
* @param DisplayData_t data Array of TM1637_DISPLAY_MEM (=4) bytes for displaydata
* @param length number bytes to write (valid range 0..(CATALEX_NR_GRIDS * TM1637_BYTES_PER_GRID) (=4), when starting at address 0)
- * @param int address display memory location to write bytes (default = 0)
+ * @param int address display memory location to write bytes (default = 0)
* @return none
*/
void writeData(DisplayData_t data, int length = (CATALEX_NR_GRIDS * TM1637_BYTES_PER_GRID), int address = 0) {
@@ -376,4 +424,270 @@
};
#endif
+#if (ROBOTDYN_TEST == 1)
+// Derived class for TM1637 used in ROBOTDYN 6 Digit display unit
+//
+
+#include "Font_7Seg.h"
+
+#define ROBOTDYN_NR_GRIDS 6
+#define ROBOTDYN_NR_DIGITS 6
+#define ROBOTDYN_NR_UDC 8
+
+
+/** Constructor for class for driving TM1637 controller as used in ROBOTDYN
+ *
+ * @brief Supports 6 Digits of 7 Segments + DP.
+ *
+ * @param PinName dio Serial bus DIO pin
+ * @param PinName clk Serial bus CLK pin
+ */
+class TM1637_ROBOTDYN : public TM1637, public Stream {
+ public:
+
+ /** Enums for Icons */
+ // Grid encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
+ // Note that Digits 1,3 and 4,6 are swapped!
+ enum Icon {
+ DP1 = ( 3<<24) | S7_DP1, /**< Digit 1 */
+ DP2 = ( 2<<24) | S7_DP2, /**< Digit 2 */
+ DP3 = ( 1<<24) | S7_DP3, /**< Digit 3 */
+ DP4 = ( 6<<24) | S7_DP4, /**< Digit 4 */
+ DP5 = ( 5<<24) | S7_DP5, /**< Digit 5 */
+ DP6 = ( 4<<24) | S7_DP6, /**< Digit 6 */
+ };
+
+ typedef char UDCData_t[ROBOTDYN_NR_UDC];
+
+ /** Constructor for class for driving TM1637 LED controller as used in ROBOTDYN
+ *
+ * @brief Supports 6 Digits of 7 Segments + DP. Also supports up to 16 Keys.
+ *
+ * @param PinName dio Serial bus DIO pin
+ * @param PinName clk Serial bus CLK pin
+ */
+ TM1637_ROBOTDYN(PinName dio, PinName clk);
+
+
+#if DOXYGEN_ONLY
+ /** Write a character to the Display
+ *
+ * @param c The character to write to the display
+ */
+ int putc(int c);
+
+ /** Write a formatted string to the Display
+ *
+ * @param format A printf-style format string, followed by the
+ * variables to use in formatting the string.
+ */
+ int printf(const char* format, ...);
+#endif
+
+ /** Locate cursor to a screen column
+ *
+ * @param column The horizontal position from the left, indexed from 0
+ */
+ void locate(int column);
+
+ /** Clear the screen and locate to 0
+ * @param bool clrAll Clear Icons also (default = false)
+ */
+ void cls(bool clrAll = false);
+
+ /** Set Icon
+ *
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
+ * @return none
+ */
+ void setIcon(Icon icon);
+
+ /** Clr Icon
+ *
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
+ * @return none
+ */
+ void clrIcon(Icon icon);
+
+ /** Set User Defined Characters (UDC)
+ *
+ * @param unsigned char udc_idx The Index of the UDC (0..7)
+ * @param int udc_data The bitpattern for the UDC (16 bits)
+ */
+ void setUDC(unsigned char udc_idx, int udc_data);
+
+
+ /** Number of screen columns
+ *
+ * @param none
+ * @return columns
+ */
+ int columns();
+
+ /** Write databyte to TM1637
+ * @param char data byte written at given address
+ * @param int address display memory location to write byte
+ * @return none
+ */
+ void writeData(char data, int address){
+ TM1637::writeData(data, address);
+ }
+
+ /** Write Display datablock to TM1637
+ * @param DisplayData_t data Array of TM1637_DISPLAY_MEM (=6) bytes for displaydata
+ * @param length number bytes to write (valid range 0..(ROBOTDYN_NR_GRIDS * TM1637_BYTES_PER_GRID) (=6), when starting at address 0)
+ * @param int address display memory location to write bytes (default = 0)
+ * @return none
+ */
+ void writeData(DisplayData_t data, int length = (ROBOTDYN_NR_GRIDS * TM1637_BYTES_PER_GRID), int address = 0) {
+ TM1637::writeData(data, length, address);
+ }
+
+protected:
+ // Stream implementation functions
+ virtual int _putc(int value);
+ virtual int _getc();
+
+private:
+ int _column;
+ int _columns;
+
+ DisplayData_t _displaybuffer;
+ UDCData_t _UDC_7S;
+};
+#endif
+
+
+#if (EYEWINK_TEST == 1)
+// Derived class for TM1637 used in EYEWINK 6 Digit + 6 Keys display unit
+//
+
+#include "Font_7Seg.h"
+
+#define EYEWINK_NR_GRIDS 6
+#define EYEWINK_NR_DIGITS 6
+#define EYEWINK_NR_UDC 8
+
+
+/** Constructor for class for driving TM1637 controller as used in EYEWINK
+ *
+ * @brief Supports 6 Digits of 7 Segments + DP and 6 Keys.
+ *
+ * @param PinName dio Serial bus DIO pin
+ * @param PinName clk Serial bus CLK pin
+ */
+class TM1637_EYEWINK : public TM1637, public Stream {
+ public:
+
+ /** Enums for Icons */
+ // Grid encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
+ enum Icon {
+ DP1 = ( 1<<24) | S7_DP1, /**< Digit 1 */
+ DP2 = ( 2<<24) | S7_DP2, /**< Digit 2 */
+ DP3 = ( 3<<24) | S7_DP3, /**< Digit 3 */
+ DP4 = ( 4<<24) | S7_DP4, /**< Digit 4 */
+ DP5 = ( 5<<24) | S7_DP5, /**< Digit 5 */
+ DP6 = ( 6<<24) | S7_DP6, /**< Digit 6 */
+ };
+
+ typedef char UDCData_t[EYEWINK_NR_UDC];
+
+ /** Constructor for class for driving TM1637 LED controller as used in EYEWINK
+ *
+ * @brief Supports 6 Digits of 7 Segments + DP.
+ *
+ * @param PinName dio Serial bus DIO pin
+ * @param PinName clk Serial bus CLK pin
+ */
+ TM1637_EYEWINK(PinName dio, PinName clk);
+
+
+#if DOXYGEN_ONLY
+ /** Write a character to the Display
+ *
+ * @param c The character to write to the display
+ */
+ int putc(int c);
+
+ /** Write a formatted string to the Display
+ *
+ * @param format A printf-style format string, followed by the
+ * variables to use in formatting the string.
+ */
+ int printf(const char* format, ...);
+#endif
+
+ /** Locate cursor to a screen column
+ *
+ * @param column The horizontal position from the left, indexed from 0
+ */
+ void locate(int column);
+
+ /** Clear the screen and locate to 0
+ * @param bool clrAll Clear Icons also (default = false)
+ */
+ void cls(bool clrAll = false);
+
+ /** Set Icon
+ *
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
+ * @return none
+ */
+ void setIcon(Icon icon);
+
+ /** Clr Icon
+ *
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
+ * @return none
+ */
+ void clrIcon(Icon icon);
+
+ /** Set User Defined Characters (UDC)
+ *
+ * @param unsigned char udc_idx The Index of the UDC (0..7)
+ * @param int udc_data The bitpattern for the UDC (16 bits)
+ */
+ void setUDC(unsigned char udc_idx, int udc_data);
+
+
+ /** Number of screen columns
+ *
+ * @param none
+ * @return columns
+ */
+ int columns();
+
+ /** Write databyte to TM1637
+ * @param char data byte written at given address
+ * @param int address display memory location to write byte
+ * @return none
+ */
+ void writeData(char data, int address){
+ TM1637::writeData(data, address);
+ }
+
+ /** Write Display datablock to TM1637
+ * @param DisplayData_t data Array of TM1637_DISPLAY_MEM (=6) bytes for displaydata
+ * @param length number bytes to write (valid range 0..(EYEWINK_NR_GRIDS * TM1637_BYTES_PER_GRID) (=6), when starting at address 0)
+ * @param int address display memory location to write bytes (default = 0)
+ * @return none
+ */
+ void writeData(DisplayData_t data, int length = (EYEWINK_NR_GRIDS * TM1637_BYTES_PER_GRID), int address = 0) {
+ TM1637::writeData(data, length, address);
+ }
+
+protected:
+ // Stream implementation functions
+ virtual int _putc(int value);
+ virtual int _getc();
+
+private:
+ int _column;
+ int _columns;
+
+ DisplayData_t _displaybuffer;
+ UDCData_t _UDC_7S;
+};
+#endif
+
#endif
\ No newline at end of file
TM1637 LED controller (48 LEDs max), Keyboard scan (16 keys max)