Library for the Princeton PT6312 Vacuum Fluorescent Display (VFD) driver.

Dependents:   mbed_PT6312

This library is documented here.

Committer:
wim
Date:
Thu Aug 27 21:22:30 2015 +0000
Revision:
2:f010b7022803
Parent:
1:c5e247159aa6
Child:
3:156c23d9652a
Test2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 2:f010b7022803 1 /* mbed VFD Font Library, for Princeton PT6312 VFD controller as used in Philips DVP630
wim 1:c5e247159aa6 2 * Copyright (c) 2015, v01: WH, Initial version
wim 1:c5e247159aa6 3 *
wim 1:c5e247159aa6 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 1:c5e247159aa6 5 * of this software and associated documentation files (the "Software"), to deal
wim 1:c5e247159aa6 6 * in the Software without restriction, including without limitation the rights
wim 1:c5e247159aa6 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 1:c5e247159aa6 8 * copies of the Software, and to permit persons to whom the Software is
wim 1:c5e247159aa6 9 * furnished to do so, subject to the following conditions:
wim 1:c5e247159aa6 10 *
wim 1:c5e247159aa6 11 * The above copyright notice and this permission notice shall be included in
wim 1:c5e247159aa6 12 * all copies or substantial portions of the Software.
wim 1:c5e247159aa6 13 *
wim 1:c5e247159aa6 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 1:c5e247159aa6 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 1:c5e247159aa6 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 1:c5e247159aa6 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 1:c5e247159aa6 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 1:c5e247159aa6 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 1:c5e247159aa6 20 * THE SOFTWARE.
wim 1:c5e247159aa6 21 */
wim 1:c5e247159aa6 22
wim 2:f010b7022803 23 // Segment bit positions for 14 or 16 Segment display following the Philips DVP630 and DVD737 mapping for PT6312
wim 2:f010b7022803 24 // Modify this table for different hardware. The Font definition table below will be adapted automatically for the segments.
wim 2:f010b7022803 25 #define S_A1 0x0001 // Assuming 2 part A segment
wim 1:c5e247159aa6 26 #define S_A2 0x0001
wim 2:f010b7022803 27 #define S_J 0x0002 // Assuming linked J and P segments
wim 1:c5e247159aa6 28 #define S_P 0x0002
wim 1:c5e247159aa6 29 #define S_H 0x0004
wim 1:c5e247159aa6 30 #define S_K 0x0008
wim 1:c5e247159aa6 31 #define S_B 0x0010
wim 1:c5e247159aa6 32 #define S_F 0x0020
wim 2:f010b7022803 33 #define S_G2 0x0040 // Assuming 2 part G segment (ie linked G and M segment)
wim 1:c5e247159aa6 34 #define S_G1 0x0080
wim 1:c5e247159aa6 35 #define S_C 0x0100
wim 1:c5e247159aa6 36 #define S_E 0x0200
wim 1:c5e247159aa6 37 #define S_R 0x0400
wim 1:c5e247159aa6 38 #define S_N 0x0800
wim 2:f010b7022803 39 #define S_D1 0x1000 // Assuming 2 part D segment
wim 1:c5e247159aa6 40 #define S_D2 0x1000
wim 1:c5e247159aa6 41 #define S_COL 0x2000
wim 1:c5e247159aa6 42 #define S_S 0x4000
wim 2:f010b7022803 43 //#define S_DP 0x8000 // Assuming single DP segment
wim 2:f010b7022803 44
wim 2:f010b7022803 45 //Mask for blending out and restoring Icons
wim 2:f010b7022803 46 #define S_ICON_MSK (S_COL)
wim 2:f010b7022803 47
wim 1:c5e247159aa6 48
wim 2:f010b7022803 49 // ASCII Font definitions for segments in each character
wim 2:f010b7022803 50 //
wim 2:f010b7022803 51 //32 0x20
wim 2:f010b7022803 52 #define C_SPC (0x0000)
wim 2:f010b7022803 53 #define C_EXC (S_B | S_C) //!
wim 2:f010b7022803 54 #define C_QTE (S_B | S_F) //"
wim 2:f010b7022803 55 #define C_HSH (S_B | S_C | S_D1 | S_D2 | S_G1 | S_G2 | S_J | S_P) //#
wim 2:f010b7022803 56 #define C_DLR (S_A1 | S_A2 | S_C | S_D1 | S_D2 | S_F | S_G1 | S_G2 | S_J | S_P | S_S) //$
wim 2:f010b7022803 57 #define C_PCT (S_C | S_F | S_K | S_R | S_S) //%
wim 2:f010b7022803 58 //#define C_AMP (S_A1 | S_C | S_D1 | S_D2 | S_E | S_G1 | S_J | S_H | S_N) // Not correct when J and P are linked
wim 2:f010b7022803 59 #define C_AMP (S_C | S_D1 | S_D2 | S_E | S_F | S_G1 | S_H | S_N | S_S) //&
wim 2:f010b7022803 60 #define C_ACC (S_B) //'
wim 2:f010b7022803 61 #define C_LBR (S_K | S_N) //(
wim 2:f010b7022803 62 #define C_RBR (S_H | S_R) //)
wim 2:f010b7022803 63 #define C_MLT (S_G1 | S_G2 | S_J | S_P | S_K | S_N | S_H | S_R | S_S) //*
wim 2:f010b7022803 64 #define C_PLS (S_G1 | S_G2 | S_J | S_P | S_S) //+
wim 2:f010b7022803 65 #define C_CMA (S_C) //,
wim 2:f010b7022803 66 #define C_MIN (S_G1 | S_G2 | S_S) //-
wim 2:f010b7022803 67 #define C_DOT (S_C) //.
wim 2:f010b7022803 68 #define C_RS (S_K | S_R | S_S) // /
wim 2:f010b7022803 69 //48 0x30
wim 2:f010b7022803 70 #define C_0 (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_E | S_F)
wim 2:f010b7022803 71 #define C_1 (S_B | S_C)
wim 2:f010b7022803 72 #define C_2 (S_A1 | S_A2 | S_B | S_D1 | S_D2 | S_E | S_G1 | S_G2 | S_S)
wim 2:f010b7022803 73 #define C_3 (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_G2 | S_S)
wim 2:f010b7022803 74 #define C_4 (S_B | S_C | S_F | S_G1 | S_G2 | S_S)
wim 2:f010b7022803 75 #define C_5 (S_A1 | S_A2 | S_C | S_D1 | S_D2 | S_F | S_G1 | S_G2 | S_S)
wim 2:f010b7022803 76 #define C_6 (S_A1 | S_A2 | S_C | S_D1 | S_D2 | S_E | S_F | S_G1 | S_G2 | S_S)
wim 2:f010b7022803 77 #define C_7 (S_A1 | S_A2 | S_B | S_C)
wim 2:f010b7022803 78 #define C_8 (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_E | S_F | S_G1 | S_G2 | S_S)
wim 2:f010b7022803 79 #define C_9 (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_F | S_G1 | S_G2 | S_S)
wim 2:f010b7022803 80 //58 0x3A
wim 2:f010b7022803 81 #define C_COL (S_D1 | S_D2 | S_G1 | S_G2 | S_S) // :
wim 2:f010b7022803 82 #define C_SCL (S_D1 | S_D2 | S_G1 | S_G2 | S_S) // ;
wim 2:f010b7022803 83 #define C_LT (S_K | S_N | S_S) // <
wim 2:f010b7022803 84 #define C_EQ (S_D1 | S_D2 | S_G1 | S_G2 | S_S) // =
wim 2:f010b7022803 85 #define C_GT (S_H | S_R | S_S) // >
wim 2:f010b7022803 86 //#define C_QM (S_A1 | S_A2 | S_B | S_G2 | S_P) // Not correct when J and P are linked
wim 2:f010b7022803 87 #define C_QM (S_A1 | S_A2 | S_B | S_G2 | S_R | S_S) // ?
wim 2:f010b7022803 88 //64 0x40
wim 2:f010b7022803 89 //#define C_AT (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_E | S_G1 | S_P | S_S) // Not correct when J and P are linked
wim 2:f010b7022803 90 #define C_AT (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_E | S_G1 | S_S) // @
wim 1:c5e247159aa6 91 #define C_A (S_A1 | S_A2 | S_B | S_C | S_E | S_F | S_G1 | S_G2 | S_S)
wim 1:c5e247159aa6 92 #define C_B (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_J | S_P | S_G2 | S_S)
wim 1:c5e247159aa6 93 #define C_C (S_A1 | S_A2 | S_D1 | S_D2 | S_E | S_F)
wim 1:c5e247159aa6 94 #define C_D (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_J | S_P | S_S)
wim 1:c5e247159aa6 95 #define C_E (S_A1 | S_A2 | S_D1 | S_D2 | S_E | S_F | S_G1 | S_S)
wim 1:c5e247159aa6 96 #define C_F (S_A1 | S_A2 | S_E | S_F | S_G1 | S_S)
wim 1:c5e247159aa6 97 #define C_G (S_A1 | S_A2 | S_C | S_D1 | S_D2 | S_E | S_F | S_G2 | S_S)
wim 1:c5e247159aa6 98 #define C_H (S_B | S_C | S_E | S_F | S_G1 | S_G2 | S_S)
wim 1:c5e247159aa6 99 #define C_I (S_A1 | S_A2 | S_D1 | S_D2 | S_J | S_P | S_S)
wim 1:c5e247159aa6 100 #define C_J (S_B | S_C | S_D1 | S_D2 | S_E)
wim 1:c5e247159aa6 101 #define C_K (S_E | S_F | S_G1 | S_K | S_N | S_S)
wim 1:c5e247159aa6 102 #define C_L (S_D1 | S_D2 | S_E | S_F)
wim 1:c5e247159aa6 103 #define C_M (S_B | S_C | S_E | S_F | S_H | S_K | S_S)
wim 1:c5e247159aa6 104 #define C_N (S_B | S_C | S_E | S_F | S_H | S_N | S_S)
wim 1:c5e247159aa6 105 #define C_O (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_E | S_F)
wim 1:c5e247159aa6 106 #define C_P (S_A1 | S_A2 | S_B | S_E | S_F | S_G1 | S_G2 | S_S)
wim 1:c5e247159aa6 107 #define C_Q (S_A1 | S_A2 | S_B | S_C | S_D1 | S_D2 | S_E | S_F | S_N)
wim 1:c5e247159aa6 108 #define C_R (S_A1 | S_A2 | S_B | S_E | S_F | S_G1 | S_G2 | S_N | S_S)
wim 1:c5e247159aa6 109 #define C_S (S_A1 | S_A2 | S_C | S_D1 | S_D2 | S_F | S_G1 | S_G2 | S_S)
wim 1:c5e247159aa6 110 #define C_T (S_A1 | S_A2 | S_J | S_P | S_S)
wim 1:c5e247159aa6 111 #define C_U (S_B | S_C | S_D1 | S_D2 | S_E | S_F)
wim 1:c5e247159aa6 112 #define C_V (S_E | S_F | S_R | S_K | S_S)
wim 1:c5e247159aa6 113 #define C_W (S_B | S_C | S_E | S_F | S_N | S_R | S_S)
wim 1:c5e247159aa6 114 #define C_X (S_H | S_K | S_N | S_R | S_S)
wim 1:c5e247159aa6 115 //#define C_Y (S_H | S_K | S_P | S_S) // Not correct when J and P are linked
wim 1:c5e247159aa6 116 #define C_Y (S_B | S_C | S_D1 | S_D2 | S_F | S_G1 | S_G2 | S_S)
wim 2:f010b7022803 117 #define C_Z (S_A1 | S_A2 | S_D1 | S_D2 | S_K | S_R | S_S)
wim 2:f010b7022803 118 //91 0x5B
wim 2:f010b7022803 119 #define C_SBL (S_A1 | S_D1 | S_E | S_F) // [
wim 2:f010b7022803 120 #define C_LS (S_H | S_N | S_S) //
wim 2:f010b7022803 121 #define C_SBR (S_A2 | S_B | S_C | S_D2) // ]
wim 2:f010b7022803 122 #define C_PWR (S_N | S_R | S_S) // ^
wim 2:f010b7022803 123 #define C_UDS (S_D1 | S_D2)
wim 2:f010b7022803 124 #define C_DSH (S_H) // `
wim 2:f010b7022803 125 //97 0x61
wim 2:f010b7022803 126 // a...z
wim 2:f010b7022803 127 //122
wim 2:f010b7022803 128
wim 2:f010b7022803 129 //123 0x7B
wim 2:f010b7022803 130 #define C_CBL (S_G1 | S_J | S_P | S_S) // {
wim 2:f010b7022803 131 #define C_OR (S_J | S_P | S_S) // |
wim 2:f010b7022803 132 #define C_CBR (S_G2 | S_J | S_P | S_S) // }
wim 2:f010b7022803 133 #define C_TLD (S_B | S_E | S_G1 | S_G2 | S_S) // ~
wim 2:f010b7022803 134 #define C_DEL (0x0000)
wim 2:f010b7022803 135
wim 2:f010b7022803 136 // Font data selection for transmission to PT6512 memory
wim 2:f010b7022803 137 #define LO(x) ( x & 0xFF)
wim 2:f010b7022803 138 #define HI(x) ((x >> 8) & 0xFF)
wim 2:f010b7022803 139
wim 1:c5e247159aa6 140
wim 2:f010b7022803 141 // ASCII Font definition table for transmission to PT6312
wim 2:f010b7022803 142 //
wim 2:f010b7022803 143 #define FONT_16S_START 0x20
wim 2:f010b7022803 144 #define FONT_16S_END 0x7F
wim 2:f010b7022803 145 //#define FONT_16S_NR_CHARS (FONT_16S_END - FONT_16S_START + 1)
wim 2:f010b7022803 146
wim 2:f010b7022803 147 const char FONT_16S[][2] = {
wim 2:f010b7022803 148 {LO(C_SPC), HI(C_SPC)}, //32 0x20, Space
wim 2:f010b7022803 149 {LO(C_EXC), HI(C_EXC)},
wim 2:f010b7022803 150 {LO(C_QTE), HI(C_QTE)},
wim 2:f010b7022803 151 {LO(C_HSH), HI(C_HSH)},
wim 2:f010b7022803 152 {LO(C_DLR), HI(C_DLR)},
wim 2:f010b7022803 153 {LO(C_PCT), HI(C_PCT)},
wim 2:f010b7022803 154 {LO(C_AMP), HI(C_AMP)},
wim 2:f010b7022803 155 {LO(C_ACC), HI(C_ACC)},
wim 2:f010b7022803 156 {LO(C_LBR), HI(C_LBR)},
wim 2:f010b7022803 157 {LO(C_RBR), HI(C_RBR)},
wim 2:f010b7022803 158 {LO(C_MLT), HI(C_MLT)},
wim 2:f010b7022803 159 {LO(C_PLS), HI(C_PLS)},
wim 2:f010b7022803 160 {LO(C_CMA), HI(C_CMA)},
wim 2:f010b7022803 161 {LO(C_MIN), HI(C_MIN)},
wim 2:f010b7022803 162 {LO(C_DOT), HI(C_DOT)},
wim 2:f010b7022803 163 {LO(C_RS), HI(C_RS)},
wim 2:f010b7022803 164 {LO(C_0), HI(C_0)}, //48 0x30
wim 2:f010b7022803 165 {LO(C_1), HI(C_1)},
wim 2:f010b7022803 166 {LO(C_2), HI(C_2)},
wim 2:f010b7022803 167 {LO(C_3), HI(C_3)},
wim 2:f010b7022803 168 {LO(C_4), HI(C_4)},
wim 2:f010b7022803 169 {LO(C_5), HI(C_5)},
wim 2:f010b7022803 170 {LO(C_6), HI(C_6)},
wim 2:f010b7022803 171 {LO(C_7), HI(C_7)},
wim 2:f010b7022803 172 {LO(C_8), HI(C_8)},
wim 2:f010b7022803 173 {LO(C_9), HI(C_9)},
wim 2:f010b7022803 174 {LO(C_COL), HI(C_COL)}, //58 0x3A
wim 2:f010b7022803 175 {LO(C_SCL), HI(C_SCL)},
wim 2:f010b7022803 176 {LO(C_LT), HI(C_LT)},
wim 2:f010b7022803 177 {LO(C_EQ), HI(C_EQ)},
wim 2:f010b7022803 178 {LO(C_GT), HI(C_GT)},
wim 2:f010b7022803 179 {LO(C_QM), HI(C_QM)},
wim 2:f010b7022803 180 {LO(C_AT), HI(C_AT)}, //64 0x40
wim 2:f010b7022803 181 {LO(C_A), HI(C_A)}, //65 0x41, A
wim 1:c5e247159aa6 182 {LO(C_B), HI(C_B)},
wim 1:c5e247159aa6 183 {LO(C_C), HI(C_C)},
wim 1:c5e247159aa6 184 {LO(C_D), HI(C_D)},
wim 1:c5e247159aa6 185 {LO(C_E), HI(C_E)},
wim 1:c5e247159aa6 186 {LO(C_F), HI(C_F)},
wim 1:c5e247159aa6 187 {LO(C_G), HI(C_G)},
wim 1:c5e247159aa6 188 {LO(C_H), HI(C_H)},
wim 1:c5e247159aa6 189 {LO(C_I), HI(C_I)},
wim 1:c5e247159aa6 190 {LO(C_J), HI(C_J)},
wim 1:c5e247159aa6 191 {LO(C_K), HI(C_K)},
wim 1:c5e247159aa6 192 {LO(C_L), HI(C_L)},
wim 1:c5e247159aa6 193 {LO(C_M), HI(C_M)},
wim 1:c5e247159aa6 194 {LO(C_N), HI(C_N)},
wim 1:c5e247159aa6 195 {LO(C_O), HI(C_O)},
wim 1:c5e247159aa6 196 {LO(C_P), HI(C_P)},
wim 1:c5e247159aa6 197 {LO(C_Q), HI(C_Q)},
wim 1:c5e247159aa6 198 {LO(C_R), HI(C_R)},
wim 1:c5e247159aa6 199 {LO(C_S), HI(C_S)},
wim 1:c5e247159aa6 200 {LO(C_T), HI(C_T)},
wim 1:c5e247159aa6 201 {LO(C_U), HI(C_U)},
wim 1:c5e247159aa6 202 {LO(C_V), HI(C_V)},
wim 1:c5e247159aa6 203 {LO(C_W), HI(C_W)},
wim 1:c5e247159aa6 204 {LO(C_X), HI(C_X)},
wim 1:c5e247159aa6 205 {LO(C_Y), HI(C_Y)},
wim 2:f010b7022803 206 {LO(C_Z), HI(C_Z)}, //90 0x5A, Z
wim 2:f010b7022803 207 {LO(C_SBL), HI(C_SBL)}, //91 0x5B
wim 2:f010b7022803 208 {LO(C_LS), HI(C_LS)},
wim 2:f010b7022803 209 {LO(C_SBR), HI(C_SBR)},
wim 2:f010b7022803 210 {LO(C_PWR), HI(C_PWR)},
wim 2:f010b7022803 211 {LO(C_UDS), HI(C_UDS)},
wim 2:f010b7022803 212 {LO(C_ACC), HI(C_ACC)},
wim 2:f010b7022803 213 {LO(C_A), HI(C_A)}, //97 0x61, A replacing a
wim 2:f010b7022803 214 {LO(C_B), HI(C_B)},
wim 2:f010b7022803 215 {LO(C_C), HI(C_C)},
wim 2:f010b7022803 216 {LO(C_D), HI(C_D)},
wim 2:f010b7022803 217 {LO(C_E), HI(C_E)},
wim 2:f010b7022803 218 {LO(C_F), HI(C_F)},
wim 2:f010b7022803 219 {LO(C_G), HI(C_G)},
wim 2:f010b7022803 220 {LO(C_H), HI(C_H)},
wim 2:f010b7022803 221 {LO(C_I), HI(C_I)},
wim 2:f010b7022803 222 {LO(C_J), HI(C_J)},
wim 2:f010b7022803 223 {LO(C_K), HI(C_K)},
wim 2:f010b7022803 224 {LO(C_L), HI(C_L)},
wim 2:f010b7022803 225 {LO(C_M), HI(C_M)},
wim 2:f010b7022803 226 {LO(C_N), HI(C_N)},
wim 2:f010b7022803 227 {LO(C_O), HI(C_O)},
wim 2:f010b7022803 228 {LO(C_P), HI(C_P)},
wim 2:f010b7022803 229 {LO(C_Q), HI(C_Q)},
wim 2:f010b7022803 230 {LO(C_R), HI(C_R)},
wim 2:f010b7022803 231 {LO(C_S), HI(C_S)},
wim 2:f010b7022803 232 {LO(C_T), HI(C_T)},
wim 2:f010b7022803 233 {LO(C_U), HI(C_U)},
wim 2:f010b7022803 234 {LO(C_V), HI(C_V)},
wim 2:f010b7022803 235 {LO(C_W), HI(C_W)},
wim 2:f010b7022803 236 {LO(C_X), HI(C_X)},
wim 2:f010b7022803 237 {LO(C_Y), HI(C_Y)},
wim 2:f010b7022803 238 {LO(C_Z), HI(C_Z)}, // 122 0x7A, Z replacing z
wim 2:f010b7022803 239 {LO(C_CBL), HI(C_CBL)}, // 123 0x7B
wim 2:f010b7022803 240 {LO(C_OR), HI(C_OR)},
wim 2:f010b7022803 241 {LO(C_CBR), HI(C_CBR)},
wim 2:f010b7022803 242 {LO(C_TLD), HI(C_TLD)},
wim 2:f010b7022803 243 {LO(C_DEL), HI(C_DEL)} };// 127
wim 2:f010b7022803 244