done
Diff: TM1637.h
- Revision:
- 1:f63d87466f55
- Parent:
- 0:dc8789a6e21f
- Child:
- 2:4d982132b42d
--- 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