TM1638 LED controller. Max 80 LEDs, Max 24 Key scan. Supports LED&KEY, QYF-TM1638 and JY-LKM1638 module.

Dependents:   mbed_TM1638 Otjimaniya

See here for more information.

Font_7Seg.h

Committer:
wim
Date:
2016-01-31
Revision:
4:b2bbdc58967e
Parent:
2:532ce15ea9ec

File content as of revision 4:b2bbdc58967e:

/* mbed LED Font Library, for TM1638 LED Controller
 * Copyright (c) 2015, v01: WH, Initial version, Test in LEDKEY8
 *               2016, v02: WH, Added ASCII alphabet, changed fonttable into short
 *               2016, v03: WH, Added QYF-TM1638 and LKM1638  
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
#ifndef MBED_FONT_7SEG_H
#define MBED_FONT_7SEG_H

// Select one of the testboards for TM1638 controller
#include "TM1638_Config.h"

#if ((LEDKEY8_TEST == 1) || (TM1638_TEST == 1))
// Segment bit positions for 7 Segment display using the LEDKEY8 mapping for TM1638
// Modify this table for different 'bit-to-segment' mappings. The ASCII character defines and the FONT_7S const table below 
// will be adapted automatically according to the bit-to-segment mapping. Obviously this will only work when the segment
// mapping is identical for every digit position. This will be the case unless the hardware designer really hates software developers.
//
//            A
//          -----
//         |     |     
//       F |     | B    
//         |  G  |     
//          -----
//         |     |     
//       E |     | C    
//         |     |     
//          -----   * DP
//            D  
//
#define S7_A    0x0001
#define S7_B    0x0002
#define S7_C    0x0004
#define S7_D    0x0008
#define S7_E    0x0010
#define S7_F    0x0020
#define S7_G    0x0040 
#define S7_DP   0x0080 

//Mask for blending out and setting 7 segments digits
#define MASK_7S_ALL = (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F | S7_G}

//Icons Grid 1
#define S7_DP1  0x0080
#define S7_LD1  0x0100
#define S7_ICON_GR1 (S7_LD1)
//#define S7_ICON_GR1 (S7_LD1 | S7_DP1)

//Icons Grid 2
#define S7_DP2  0x0080
#define S7_LD2  0x0100
#define S7_ICON_GR2 (S7_LD2)
//#define S7_ICON_GR2 (S7_LD2 | S7_DP2)

//Icons Grid 3
#define S7_DP3  0x0080
#define S7_LD3  0x0100
#define S7_ICON_GR3 (S7_LD3)
//#define S7_ICON_GR3 (S7_LD3 | S7_DP3)

//Icons Grid 4
#define S7_DP4  0x0080
#define S7_LD4  0x0100
#define S7_ICON_GR4 (S7_LD4)
//#define S7_ICON_GR4 (S7_LD4 | S7_DP4)

//Icons Grid 5
#define S7_DP5  0x0080
#define S7_LD5  0x0100
#define S7_ICON_GR5 (S7_LD5)
//#define S7_ICON_GR5 (S7_LD5 | S7_DP5)

//Icons Grid 6
#define S7_DP6  0x0080
#define S7_LD6  0x0100
#define S7_ICON_GR6 (S7_LD6)
//#define S7_ICON_GR6 (S7_LD6 | S7_DP6)

//Icons Grid 7
#define S7_DP7  0x0080
#define S7_LD7  0x0100
#define S7_ICON_GR7 (S7_LD7)
//#define S7_ICON_GR7 (S7_LD7 | S7_DP7)

//Icons Grid 8
#define S7_DP8  0x0080
#define S7_LD8  0x0100
#define S7_ICON_GR8 (S7_LD8)
//#define S7_ICON_GR8 (S7_LD8 | S7_DP8)


//Mask for blending out and restoring Icons
extern const char MASK_ICON_GRID[][2]; 
#endif

#if (QYF_TEST == 1)
// Segment bit positions for 7 Segment display using the QYF mapping for TM1638
// This display module uses a single byte of each grid to drive a specific segment of all digits.
// So the bits in byte 0 (Grid 1) drive all A-segments, the bits in byte 2 (Grid 2) drive all B-segments etc.
// Bit0 is for the segment in Digit 8, Bit1 is for the segment in Digit 7 etc.. This bit manipulation is handled in _putc().
//
// The ASCII character defines and the FONT_7S const table below will be adapted automatically according to the bit-to-segment mapping.
//
//            A
//          -----
//         |     |     
//       F |     | B    
//         |  G  |     
//          -----
//         |     |     
//       E |     | C    
//         |     |     
//          -----   * DP
//            D  
//
//Generic segment placeholders
#define S7_A    0x0001
#define S7_B    0x0002
#define S7_C    0x0004
#define S7_D    0x0008
#define S7_E    0x0010
#define S7_F    0x0020
#define S7_G    0x0040 
#define S7_DP   0x0080 

//Mask for blending out and setting 7 segments digits
//#define MASK_7S_ALL = (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F | S7_G}

//Segments and Icons Grid 1
#define S7_A1        0x0080
#define S7_B1        0x0080
#define S7_C1        0x0080
#define S7_D1        0x0080
#define S7_E1        0x0080
#define S7_F1        0x0080
#define S7_G1        0x0080
#define S7_DP1       0x0080
#define S7_ICON_GR1 (0x0000)

//Segments and Icons Grid 2
#define S7_A2        0x0040
#define S7_B2        0x0040
#define S7_C2        0x0040
#define S7_D2        0x0040
#define S7_E2        0x0040
#define S7_F2        0x0040
#define S7_G2        0x0040
#define S7_DP2       0x0040
#define S7_ICON_GR2 (0x0000)

//Segments and Icons Grid 3
#define S7_A3        0x0020
#define S7_B3        0x0020
#define S7_C3        0x0020
#define S7_D3        0x0020
#define S7_E3        0x0020
#define S7_F3        0x0020
#define S7_G3        0x0020
#define S7_DP3       0x0020
#define S7_ICON_GR3 (0x0000)

//Segments and Icons Grid 4
#define S7_A4        0x0010
#define S7_B4        0x0010
#define S7_C4        0x0010
#define S7_D4        0x0010
#define S7_E4        0x0010
#define S7_F4        0x0010
#define S7_G4        0x0010
#define S7_DP4       0x0010
#define S7_ICON_GR4 (0x0000)

//Segments and Icons Grid 5
#define S7_A5        0x0008
#define S7_B5        0x0008
#define S7_C5        0x0008
#define S7_D5        0x0008
#define S7_E5        0x0008
#define S7_F5        0x0008
#define S7_G5        0x0008
#define S7_DP5       0x0008
#define S7_ICON_GR5 (0x0000)

//Segments and Icons Grid 6
#define S7_A6        0x0004
#define S7_B6        0x0004
#define S7_C6        0x0004
#define S7_D6        0x0004
#define S7_E6        0x0004
#define S7_F6        0x0004
#define S7_G6        0x0004
#define S7_DP6       0x0004
#define S7_ICON_GR6 (0x0000)

//Segments and Icons Grid 7
#define S7_A7        0x0002
#define S7_B7        0x0002
#define S7_C7        0x0002
#define S7_D7        0x0002
#define S7_E7        0x0002
#define S7_F7        0x0002
#define S7_G7        0x0002
#define S7_DP7       0x0002
#define S7_ICON_GR7 (0x0000)

//Segments and Icons Grid 8
#define S7_A8        0x0001
#define S7_B8        0x0001
#define S7_C8        0x0001
#define S7_D8        0x0001
#define S7_E8        0x0001
#define S7_F8        0x0001
#define S7_G8        0x0001
#define S7_DP8       0x0001
#define S7_ICON_GR8 (0x0000)

//Mask for blending out and restoring Icons
extern const char MASK_ICON_GRID[][2]; 
#endif

#if (LKM1638_TEST == 1)
// Segment bit positions for 7 Segment display using the LKM1638 mapping for TM1638
// Modify this table for different 'bit-to-segment' mappings. The ASCII character defines and the FONT_7S const table below 
// will be adapted automatically according to the bit-to-segment mapping. Obviously this will only work when the segment
// mapping is identical for every digit position. This will be the case unless the hardware designer really hates software developers.
//
// The ASCII character defines and the FONT_7S const table below will be adapted automatically according to the bit-to-segment mapping.
//
//            A
//          -----
//         |     |     
//       F |     | B    
//         |  G  |     
//          -----
//         |     |     
//       E |     | C    
//         |     |     
//          -----   * DP
//            D  
//
//Generic segment placeholders
#define S7_A    0x0001
#define S7_B    0x0002
#define S7_C    0x0004
#define S7_D    0x0008
#define S7_E    0x0010
#define S7_F    0x0020
#define S7_G    0x0040 
#define S7_DP   0x0080 

//Mask for blending out and setting 7 segments digits
//#define MASK_7S_ALL = (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F | S7_G}

//Icons Grid 1
#define S7_DP1  0x0080
#define S7_GR1  0x0100
#define S7_RD1  0x0200
#define S7_YL1  0x0300
#define S7_ICON_GR1 (S7_RD1 | S7_GR1 | S7_YL1)
//#define S7_ICON_GR1 (S7_RD1 | S7_GR1 | S7_YL1 | S7_DP1)

//Icons Grid 2
#define S7_DP2  0x0080
#define S7_GR2  0x0100
#define S7_RD2  0x0200
#define S7_YL2  0x0300
#define S7_ICON_GR2 (S7_RD2 | S7_GR2 | S7_YL2)
//#define S7_ICON_GR2 (S7_RD2 | S7_GR2 | S7_YL2 | S7_DP2)

//Icons Grid 3
#define S7_DP3  0x0080
#define S7_GR3  0x0100
#define S7_RD3  0x0200
#define S7_YL3  0x0300
#define S7_ICON_GR3 (S7_RD3 | S7_GR3 | S7_YL3)
//#define S7_ICON_GR3 (S7_RD3 | S7_GR3 | S7_YL3 | S7_DP3)

//Icons Grid 4
#define S7_DP4  0x0080
#define S7_GR4  0x0100
#define S7_RD4  0x0200
#define S7_YL4  0x0300
#define S7_ICON_GR4 (S7_RD4 | S7_GR4 | S7_YL4)
//#define S7_ICON_GR4 (S7_RD4 | S7_GR4 | S7_YL4 | S7_DP4)

//Icons Grid 5
#define S7_DP5  0x0080
#define S7_GR5  0x0100
#define S7_RD5  0x0200
#define S7_YL5  0x0300
#define S7_ICON_GR5 (S7_RD5 | S7_GR5 | S7_YL5)
//#define S7_ICON_GR5 (S7_RD5 | S7_GR5 | S7_YL5 | S7_DP5)

//Icons Grid 6
#define S7_DP6  0x0080
#define S7_GR6  0x0100
#define S7_RD6  0x0200
#define S7_YL6  0x0300
#define S7_ICON_GR6 (S7_RD6 | S7_GR6 | S7_YL6)
//#define S7_ICON_GR6 (S7_RD6 | S7_GR6 | S7_YL6 | S7_DP6)

//Icons Grid 7
#define S7_DP7  0x0080
#define S7_GR7  0x0100
#define S7_RD7  0x0200
#define S7_YL7  0x0300
#define S7_ICON_GR7 (S7_RD7 | S7_GR7 | S7_YL7)
//#define S7_ICON_GR7 (S7_RD7 | S7_GR7 | S7_YL7 | S7_DP7)

//Icons Grid 8
#define S7_DP8  0x0080
#define S7_GR8  0x0100
#define S7_RD8  0x0200
#define S7_YL8  0x0300
#define S7_ICON_GR8 (S7_RD8 | S7_GR8 | S7_YL8)
//#define S7_ICON_GR8 (S7_RD8 | S7_GR8 | S7_YL8 | S7_DP8)

//Mask for blending out and restoring Icons
extern const char MASK_ICON_GRID[][2]; 
#endif

// ASCII Font definitions for segments in each character
//
//32 0x20  Symbols
#define C7_SPC  (0x0000)
#define C7_EXC  (S7_B | S7_C) //!
#define C7_QTE  (S7_B | S7_F) //"
#define C7_HSH  (S7_C | S7_D | S7_E | S7_G) //#
#define C7_DLR  (S7_A | S7_C | S7_D | S7_F | S7_G) //$
#define C7_PCT  (S7_C | S7_F) //%
#define C7_AMP  (S7_A | S7_C | S7_D | S7_E | S7_F | S7_G) //&
#define C7_ACC  (S7_B) //'
#define C7_LBR  (S7_A | S7_D | S7_E | S7_F) //(
#define C7_RBR  (S7_A | S7_B | S7_C | S7_D) //)
#define C7_MLT  (S7_B | S7_C | S7_E | S7_F | S7_G)  //*
#define C7_PLS  (S7_B | S7_C | S7_G) //+
#define C7_CMA  (S7_DP)
#define C7_MIN  (S7_G)
#define C7_DPT  (S7_DP)
#define C7_RS   (S7_B | S7_E  | S7_G)  // /

//48 0x30  Digits
#define C7_0    (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F)
#define C7_1    (S7_B | S7_C)
#define C7_2    (S7_A | S7_B | S7_D | S7_E | S7_G)
#define C7_3    (S7_A | S7_B | S7_C | S7_D | S7_G)
#define C7_4    (S7_B | S7_C | S7_F | S7_G)
#define C7_5    (S7_A | S7_C | S7_D | S7_F | S7_G)
#define C7_6    (S7_A | S7_C | S7_D | S7_E | S7_F | S7_G)
#define C7_7    (S7_A | S7_B | S7_C)
#define C7_8    (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F | S7_G)
#define C7_9    (S7_A | S7_B | S7_C | S7_D | S7_F | S7_G)

//58 0x3A
#define C7_COL  (S7_D | S7_G) // :
#define C7_SCL  (S7_D | S7_G) // ;
#define C7_LT   (S7_D | S7_E | S7_G)             // <
#define C7_EQ   (S7_D | S7_G)                    // =
#define C7_GT   (S7_C | S7_D | S7_G)             // >   
#define C7_QM   (S7_A | S7_B | S7_E | S7_G)      // ?
#define C7_AT   (S7_A | S7_B | S7_C | S7_D | S7_E  | S7_G)  // @

//65 0x41  Upper case alphabet
#define C7_A    (S7_A | S7_B | S7_C | S7_E | S7_F | S7_G )
#define C7_B    (S7_C | S7_D | S7_E | S7_F | S7_G)
#define C7_C    (S7_A | S7_D | S7_E | S7_F)
#define C7_D    (S7_B | S7_C | S7_D | S7_E | S7_G)
#define C7_E    (S7_A | S7_D | S7_E | S7_F | S7_G)
#define C7_F    (S7_A | S7_E | S7_F | S7_G)

#define C7_G    (S7_A | S7_C | S7_D | S7_E | S7_F)
#define C7_H    (S7_B | S7_C | S7_E | S7_F | S7_G)
#define C7_I    (S7_B | S7_C)
#define C7_J    (S7_B | S7_C | S7_D | S7_E)
#define C7_K    (S7_B | S7_C | S7_E | S7_F | S7_G)
#define C7_L    (S7_D | S7_E | S7_F)
#define C7_M    (S7_A | S7_C | S7_E)
#define C7_N    (S7_A | S7_B | S7_C | S7_E | S7_F)
#define C7_O    (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F)
#define C7_P    (S7_A | S7_B | S7_E | S7_F | S7_G)
#define C7_Q    (S7_A | S7_B | S7_C | S7_F | S7_G)
#define C7_R    (S7_E | S7_G )
#define C7_S    (S7_A | S7_C | S7_D | S7_F | S7_G)
#define C7_T    (S7_D | S7_E | S7_F | S7_G)
#define C7_U    (S7_B | S7_C | S7_D | S7_E | S7_F)
#define C7_V    (S7_B | S7_C | S7_D | S7_E | S7_F)
#define C7_W    (S7_B | S7_D | S7_F)
#define C7_X    (S7_B | S7_C | S7_E | S7_F | S7_G)
#define C7_Y    (S7_B | S7_C | S7_D | S7_F | S7_G)
#define C7_Z    (S7_A | S7_B | S7_D | S7_E | S7_G)

//91 0x5B
#define C7_SBL  (S7_A | S7_D | S7_E | S7_F) // [
#define C7_LS   (S7_C | S7_F | S7_G)        // left slash
#define C7_SBR  (S7_A | S7_B | S7_C | S7_D) // ]
#define C7_PWR  (S7_A | S7_B | S7_F)        // ^
#define C7_UDS  (S7_D)                      // _
#define C7_DSH  (S7_F)                      // `  

//97 0x61  Lower case alphabet
#define C7_a     C7_A
#define C7_b     C7_B
#define C7_c     C7_C
#define C7_d     C7_D
#define C7_e     C7_E
#define C7_f     C7_H

#define C7_g     C7_G
#define C7_h     C7_H
#define C7_i     C7_I
#define C7_j     C7_J
#define C7_k     C7_K
#define C7_l     C7_L
#define C7_m     C7_M
//#define C7_n     C7_N
#define C7_n    (S7_C | S7_E | S7_G)
//#define C7_o     C7_O
#define C7_o    (S7_C | S7_D | S7_E | S7_G)
#define C7_p     C7_P
#define C7_q     C7_Q
//#define C7_r     C7_R
#define C7_r    (S7_E | S7_G)
#define C7_s     C7_S
#define C7_t     C7_T
#define C7_u     C7_U
#define C7_v     C7_V
#define C7_w     C7_W
#define C7_x     C7_X
#define C7_y     C7_Y
#define C7_z     C7_Z

//123 0x7B
#define C7_CBL  (S7_A | S7_D | S7_E | S7_F)        // {
#define C7_OR   (S7_B | S7_C)                      // |
#define C7_CBR  (S7_A | S7_B | S7_C | S7_D)        // }
#define C7_TLD  (S7_B | S7_E | S7_G )              // ~
#define C7_DEL  (0x0000)


//User Defined Characters (some examples)
#define C7_DGR   (S7_A | S7_B | S7_F | S7_G)  //Degrees
                                                                         
// Font data selection for transmission to TM1638 memory
#define LO(x)  ( x & 0xFF)
#define HI(x)  ((x >> 8) & 0xFF)


// ASCII Font definition table
//
#define FONT_7S_START     0x20
#define FONT_7S_END       0x7F
//#define FONT_7S_NR_CHARS (FONT_7S_END - FONT_7S_START + 1)
extern const short FONT_7S[]; 

#endif