Library for Princeton PT6961 LED driver. Supports 6 digits @ 12 segments or 7 digits @ 11 segments. Also supports keyboard scanning of upto 30 keys. SPI interface.

Dependents:   mbed_PT6961

This LED driver is found in frontpanel controllers of consumer electronics such as DVD players. The added features such as the matrix keyboard scanning are useful in these applications.

Additional information is available on the component page here

Font_7Seg.h

Committer:
wim
Date:
2016-01-14
Revision:
2:c6883ede8d8b
Parent:
1:eb4758bba68a

File content as of revision 2:c6883ede8d8b:

/* mbed VFD Font Library, for Princeton PT6961 LED controller as used in V56S
 * Copyright (c) 2015, v01: WH, Initial version, Test V56S
 *
 * 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 Princeton PT6961 LED controller
#include "PT6961_Config.h"

#if (HR734_TEST == 1) 
// Segment bit positions for 7 Segment display using the HR734 mapping for PT6961
// 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.
// In this specific case grids 2,3 and 4 have two 7 segment digits, grid 5 hase one. Unfortunetely the patterns for the second digits
// of grid 3 and 4 are shifted by one bit position.
//
#define S7_A    0x0100
#define S7_B    0x0080
#define S7_C    0x0040
#define S7_D    0x0020 
#define S7_E    0x0010
#define S7_F    0x0008
#define S7_G    0x0004

//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 Grid1
#define S7_H1   0x0002
//Segments Grid2
#define S7_J2   0x0002
//Segments Grid3
#define S7_J3   0x0002
//Segments Grid4
#define S7_K1   0x0002
//Segments Grid5
#define S7_J5   0x0002
//Segments Grid6
#define S7_M5   0x0008
#define S7_P4   0x0010
#define S7_M3   0x0020
#define S7_M2   0x0040
#define S7_M1   0x0080
#define S7_L1   0x0100

//Icons Grid 1
#define S7_RA   0x0001
#define S7_ICON_GR1 (S7_RA)

//Icons Grid 2
#define S7_M    0x0001
#define S7_ICON_GR2 (S7_M)

//Icons Grid 3
#define S7_ARW  0x0001
#define S7_ICON_GR3 (S7_ARW)

//Icons Grid 4
#define S7_HDDVD_HD    0x0001
#define S7_ICON_GR4 (S7_HDDVD_HD)

//Icons Grid 5
#define S7_HDDVD_D     0x0001
#define S7_ICON_GR5 (S7_HDDVD_D)

//Icons Grid 6
#define S7_HDDVD_VD    0x0001
#define S7_DP2         0x0002
#define S7_DP1         0x0004
#define S7_ICON_GR6 (S7_HDDVD_VD)

//Icons Grid 7
#define S7_R    0x0002
#define S7_W    0x0004
#define S7_SO   0x0008
#define S7_P    0x0010
#define S7_CLK  0x0020
#define S7_BRK  0x0040
#define S7_DP4  0x0080
#define S7_DP3  0x0100
#define S7_ICON_GR7 (S7_R | S7_W | S7_SO | S7_P | S7_CLK | S7_BRK)


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

#if (V56S_TEST == 1) 
// Segment bit positions for 7 Segment display using the Mustek V56S mapping for PT6961
// 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.
// In this specific case grids 2,3 and 4 have two 7 segment digits, grid 5 hase one. Unfortunetely the patterns for the second digits
// of grid 3 and 4 are shifted by one bit position.
//
#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

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

//Icons Grid 1
#define S7_RED  0x0080
#define S7_GRN  0x0100
#define S7_YEL  0x0180
#define S7_ICON_GR1 (S7_RED | S7_GRN)

#define S7_ICON_GR2 (0x0000)
#define S7_ICON_GR3 (0x0000)
#define S7_ICON_GR4 (0x0000)
#define S7_ICON_GR5 (0x0000)

//Icons Grid 6
#define S7_DVD  0x0001
#define S7_COL1 0x0002
#define S7_DP3  0x0004
#define S7_PSE  0x0008
#define S7_MP3  0x0010
#define S7_PLY  0x0020
#define S7_CD   0x0040
#define S7_COL3 0x0080
#define S7_ICON_GR6 (S7_DVD | S7_COL1 | S7_DP3 | S7_PSE | S7_MP3 | S7_PLY | S7_CD | S7_COL3)

//Icons Grid 7
#define S7_ARW  0x0001
#define S7_ANT  0x0002
#define S7_DTS  0x0004
#define S7_MHZ  0x0008
#define S7_DDD  0x0010
#define S7_KHZ  0x0020
#define S7_RDS  0x0080
#define S7_ICON_GR7 (S7_ARW | S7_ANT | S7_DTS | S7_MHZ | S7_DDD| S7_KHZ | S7_RDS )


//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_CMA  (S7_DP)
//#define C7_DPT  (S7_DP)
#define C7_MIN  (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)
//64 0x40  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_B | S7_C | S7_F | S7_G)
#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)
#define C7_L    (S7_D | S7_E | S7_F)
#define C7_M    (S7_C | S7_E | S7_G)
#define C7_N    (S7_C | S7_E | S7_G)
#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_Y    (S7_B | S7_C | S7_D | S7_F | S7_G)
#define C7_Z    (S7_A | S7_B | S7_D | S7_E | S7_G)

//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_l     C7_L
#define C7_m     C7_M
#define C7_n     C7_N
#define C7_o     C7_O
#define C7_p     C7_P
#define C7_q     C7_Q
#define C7_r     C7_R
#define C7_s     C7_S
#define C7_t     C7_T
#define C7_u     C7_U
#define C7_y     C7_Y
#define C7_z     C7_Z


//User Defined Characters (some examples)
                                                                          
// Font data selection for transmission to PT6961 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