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

Committer:
wim
Date:
Thu Jan 14 20:03:13 2016 +0000
Revision:
2:c6883ede8d8b
Parent:
1:eb4758bba68a
Refactored display and keyboard defines

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:feebe8eca523 1 /* mbed PT6961 Library, for Princeton PT6961 LED controller
wim 1:eb4758bba68a 2 * Copyright (c) 2015, v01: WH, Initial version (HR734)
wim 1:eb4758bba68a 3 * 2015, v02: WH, rename Digit/Grid
wim 1:eb4758bba68a 4 * 2016, v02: WH, Added V56S, Added Stream support
wim 2:c6883ede8d8b 5 * 2016, v03: WH, Refactored display and keyboard defines
wim 0:feebe8eca523 6 *
wim 0:feebe8eca523 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 0:feebe8eca523 8 * of this software and associated documentation files (the "Software"), to deal
wim 0:feebe8eca523 9 * in the Software without restriction, including without limitation the rights
wim 0:feebe8eca523 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 0:feebe8eca523 11 * copies of the Software, and to permit persons to whom the Software is
wim 0:feebe8eca523 12 * furnished to do so, subject to the following conditions:
wim 0:feebe8eca523 13 *
wim 0:feebe8eca523 14 * The above copyright notice and this permission notice shall be included in
wim 0:feebe8eca523 15 * all copies or substantial portions of the Software.
wim 0:feebe8eca523 16 *
wim 0:feebe8eca523 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 0:feebe8eca523 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 0:feebe8eca523 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 0:feebe8eca523 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 0:feebe8eca523 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 0:feebe8eca523 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 0:feebe8eca523 23 * THE SOFTWARE.
wim 0:feebe8eca523 24 */
wim 0:feebe8eca523 25
wim 0:feebe8eca523 26 #ifndef PT6961_H
wim 0:feebe8eca523 27 #define PT6961_H
wim 0:feebe8eca523 28
wim 1:eb4758bba68a 29 // Select one of the testboards for Princeton PT6312 VFD controller
wim 1:eb4758bba68a 30 #include "PT6961_Config.h"
wim 1:eb4758bba68a 31
wim 0:feebe8eca523 32 /** An interface for driving Princeton PT6961 LED controller
wim 1:eb4758bba68a 33 * Note: Also available are derived Classes for V56S and HR734 displays that have added Stream support.
wim 0:feebe8eca523 34 *
wim 0:feebe8eca523 35 * @code
wim 0:feebe8eca523 36 * #include "mbed.h"
wim 1:eb4758bba68a 37 * #include "PT6961.h"
wim 0:feebe8eca523 38 *
wim 1:eb4758bba68a 39 * // DisplayData_t size is 12 bytes (6 Grids max 12 Segments) OR 14 bytes (7 Grids at max 11 Segments)
wim 0:feebe8eca523 40 * PT6961::DisplayData_t mbed_str = {0xDA,0x00, 0x7C,0x00, 0x3C,0x01, 0xF6,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00};
wim 0:feebe8eca523 41 * PT6961::DisplayData_t all_str = {0xFF,0x0F, 0xFF,0x0F, 0xFF,0x0F, 0xFF,0x0F, 0xFF,0x0F, 0xFF,0x0F, 0xFF,0x0F};
wim 0:feebe8eca523 42 *
wim 0:feebe8eca523 43 * // KeyData_t size is 5 bytes
wim 0:feebe8eca523 44 * PT6961::KeyData_t keydata;
wim 0:feebe8eca523 45 *
wim 1:eb4758bba68a 46 * // PT6191 declaration, Default setting 7 Grids, 11 Segments
wim 0:feebe8eca523 47 * PT6961 pt6961(p5,p6,p7, p8);
wim 0:feebe8eca523 48 *
wim 0:feebe8eca523 49 * int main() {
wim 0:feebe8eca523 50 * pt6961.cls();
wim 0:feebe8eca523 51 * pt6961.writeData(all_str);
wim 0:feebe8eca523 52 * wait(4);
wim 0:feebe8eca523 53 * pt6961.writeData(mbed_str);
wim 0:feebe8eca523 54 * wait(1);
wim 0:feebe8eca523 55 * pt6961.setBrightness(PT6961_BRT0);
wim 0:feebe8eca523 56 * wait(1);
wim 0:feebe8eca523 57 * pt6961.setBrightness(PT6961_BRT3);
wim 0:feebe8eca523 58 *
wim 0:feebe8eca523 59 * while (1) {
wim 0:feebe8eca523 60 * // Check and read keydata
wim 0:feebe8eca523 61 * if (pt6961.getKeys(&keydata)) {
wim 0:feebe8eca523 62 * pc.printf("Keydata 0..4 = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\r\n", keydata[0], keydata[1], keydata[2], keydata[3], keydata[4]);
wim 0:feebe8eca523 63 *
wim 0:feebe8eca523 64 * if (keydata[0] == 0x10) { //sw2
wim 0:feebe8eca523 65 * pt6961.cls();
wim 0:feebe8eca523 66 * pt6961.writeData(all_str);
wim 0:feebe8eca523 67 * }
wim 0:feebe8eca523 68 * }
wim 0:feebe8eca523 69 * }
wim 0:feebe8eca523 70 * }
wim 0:feebe8eca523 71 * @endcode
wim 0:feebe8eca523 72 */
wim 0:feebe8eca523 73
wim 2:c6883ede8d8b 74
wim 2:c6883ede8d8b 75 //PT6961 Display and Keymatrix data
wim 2:c6883ede8d8b 76 #define PT6961_MAX_NR_GRIDS 7
wim 2:c6883ede8d8b 77 #define PT6961_BYTES_PER_GRID 2
wim 2:c6883ede8d8b 78 //Significant bits Keymatrix data
wim 2:c6883ede8d8b 79 #define PT6961_KEY_MSK 0x3F
wim 2:c6883ede8d8b 80
wim 0:feebe8eca523 81 //Memory size in bytes for Display and Keymatrix
wim 2:c6883ede8d8b 82 #define PT6961_DISPLAY_MEM (PT6961_MAX_NR_GRIDS * PT6961_BYTES_PER_GRID)
wim 0:feebe8eca523 83 #define PT6961_KEY_MEM 5
wim 2:c6883ede8d8b 84
wim 0:feebe8eca523 85
wim 0:feebe8eca523 86 //Reserved bits for commands
wim 0:feebe8eca523 87 #define PT6961_CMD_MSK 0xE0
wim 0:feebe8eca523 88
wim 0:feebe8eca523 89 //Mode setting command
wim 0:feebe8eca523 90 #define PT6961_MODE_SET_CMD 0x00
wim 1:eb4758bba68a 91 #define PT6961_GR6_SEG12 0x02
wim 1:eb4758bba68a 92 #define PT6961_GR7_SEG11 0x03 //default
wim 0:feebe8eca523 93
wim 0:feebe8eca523 94 //Data setting commands
wim 0:feebe8eca523 95 #define PT6961_DATA_SET_CMD 0x40
wim 0:feebe8eca523 96 #define PT6961_DATA_WR 0x00
wim 0:feebe8eca523 97 #define PT6961_KEY_RD 0x02
wim 0:feebe8eca523 98 #define PT6961_ADDR_INC 0x00
wim 0:feebe8eca523 99 #define PT6961_ADDR_FIXED 0x04
wim 0:feebe8eca523 100 #define PT6961_MODE_NORM 0x00
wim 0:feebe8eca523 101 #define PT6961_MODE_TEST 0x08
wim 0:feebe8eca523 102
wim 0:feebe8eca523 103 //Address setting commands
wim 0:feebe8eca523 104 #define PT6961_ADDR_SET_CMD 0xC0
wim 0:feebe8eca523 105 #define PT6961_ADDR_MSK 0x0F
wim 0:feebe8eca523 106
wim 0:feebe8eca523 107 //Display control commands
wim 0:feebe8eca523 108 #define PT6961_DSP_CTRL_CMD 0x80
wim 0:feebe8eca523 109 #define PT6961_BRT_MSK 0x07
wim 0:feebe8eca523 110 #define PT6961_BRT0 0x00 //Pulsewidth 1/16
wim 0:feebe8eca523 111 #define PT6961_BRT1 0x01
wim 0:feebe8eca523 112 #define PT6961_BRT2 0x02
wim 0:feebe8eca523 113 #define PT6961_BRT3 0x03
wim 0:feebe8eca523 114 #define PT6961_BRT4 0x04
wim 0:feebe8eca523 115 #define PT6961_BRT5 0x05
wim 0:feebe8eca523 116 #define PT6961_BRT6 0x06
wim 0:feebe8eca523 117 #define PT6961_BRT7 0x07 //Pulsewidth 14/16
wim 0:feebe8eca523 118
wim 0:feebe8eca523 119 #define PT6961_BRT_DEF PT6961_BRT3
wim 0:feebe8eca523 120
wim 0:feebe8eca523 121 #define PT6961_DSP_OFF 0x00
wim 0:feebe8eca523 122 #define PT6961_DSP_ON 0x08
wim 0:feebe8eca523 123
wim 0:feebe8eca523 124
wim 0:feebe8eca523 125 /** A class for driving Princeton PT6961 LED controller
wim 0:feebe8eca523 126 *
wim 1:eb4758bba68a 127 * @brief Supports 6 Grids of 12 Segments or 7 Grids of 11 Segments. Also supports a scanned keyboard of upto 30 keys.
wim 0:feebe8eca523 128 * SPI bus interface device.
wim 0:feebe8eca523 129 */
wim 0:feebe8eca523 130 class PT6961 {
wim 0:feebe8eca523 131 public:
wim 0:feebe8eca523 132
wim 0:feebe8eca523 133 /** Enums for display mode */
wim 0:feebe8eca523 134 enum Mode {
wim 1:eb4758bba68a 135 Grid6_Seg12 = PT6961_GR6_SEG12,
wim 1:eb4758bba68a 136 Grid7_Seg11 = PT6961_GR7_SEG11
wim 0:feebe8eca523 137 };
wim 0:feebe8eca523 138
wim 0:feebe8eca523 139 /** Datatypes for display and keymatrix data */
wim 0:feebe8eca523 140 typedef char DisplayData_t[PT6961_DISPLAY_MEM];
wim 0:feebe8eca523 141 typedef char KeyData_t[PT6961_KEY_MEM];
wim 0:feebe8eca523 142
wim 0:feebe8eca523 143 /** Constructor for class for driving Princeton PT6961 LED controller
wim 0:feebe8eca523 144 *
wim 1:eb4758bba68a 145 * @brief Supports 6 Grids @ 12 Segments or 7 Grids @ 11 Segments. Also supports a scanned keyboard of upto 30 keys.
wim 0:feebe8eca523 146 * SPI bus interface device.
wim 0:feebe8eca523 147 * @param PinName mosi, miso, sclk, cs SPI bus pins
wim 1:eb4758bba68a 148 * @param Mode selects either 6 Grids @ 12 Segments or 7 Grids @ 11 Segments (default 7 Grids @ 11 Segments)
wim 0:feebe8eca523 149 */
wim 1:eb4758bba68a 150 PT6961(PinName mosi, PinName miso, PinName sclk, PinName cs, Mode mode=Grid7_Seg11);
wim 0:feebe8eca523 151
wim 0:feebe8eca523 152 /** Clear the screen and locate to 0
wim 0:feebe8eca523 153 */
wim 0:feebe8eca523 154 void cls();
wim 0:feebe8eca523 155
wim 0:feebe8eca523 156 /** Write databyte to PT6961
wim 0:feebe8eca523 157 * @param int address display memory location to write byte
wim 0:feebe8eca523 158 * @param char data byte written at given address
wim 0:feebe8eca523 159 * @return none
wim 0:feebe8eca523 160 */
wim 0:feebe8eca523 161 void writeData(int address, char data);
wim 0:feebe8eca523 162
wim 0:feebe8eca523 163 /** Write Display datablock to PT6961
wim 0:feebe8eca523 164 * @param DisplayData_t data Array of PT6961_DISPLAY_MEM (=14) bytes for displaydata (starting at address 0)
wim 0:feebe8eca523 165 * @param length number bytes to write (valid range 0..PT6961_DISPLAY_MEM (=14), starting at address 0)
wim 0:feebe8eca523 166 * @return none
wim 0:feebe8eca523 167 */
wim 0:feebe8eca523 168 void writeData(DisplayData_t data, int length = PT6961_DISPLAY_MEM);
wim 0:feebe8eca523 169
wim 0:feebe8eca523 170 /** Read keydata block from PT6961
wim 0:feebe8eca523 171 * @param *keydata Ptr to Array of PT6961_KEY_MEM (=5) bytes for keydata
wim 0:feebe8eca523 172 * @return bool keypress True when at least one key was pressed
wim 0:feebe8eca523 173 *
wim 0:feebe8eca523 174 * Note: Due to the hardware configuration the PT6961 key matrix scanner will detect multiple keys pressed at same time,
wim 0:feebe8eca523 175 * but this may result in some spurious keys also being set in keypress data array.
wim 0:feebe8eca523 176 * It may be best to ignore all keys in those situations. That option is implemented in this method depending on #define setting.
wim 0:feebe8eca523 177 */
wim 0:feebe8eca523 178 bool getKeys(KeyData_t *keydata);
wim 0:feebe8eca523 179
wim 0:feebe8eca523 180 /** Set Brightness
wim 0:feebe8eca523 181 *
wim 0:feebe8eca523 182 * @param char brightness (3 significant bits, valid range 0..7 (1/16 .. 14/14 dutycycle)
wim 0:feebe8eca523 183 * @return none
wim 0:feebe8eca523 184 */
wim 0:feebe8eca523 185 void setBrightness(char brightness = PT6961_BRT_DEF);
wim 0:feebe8eca523 186
wim 0:feebe8eca523 187 /** Set the Display mode On/off
wim 0:feebe8eca523 188 *
wim 0:feebe8eca523 189 * @param bool display mode
wim 0:feebe8eca523 190 */
wim 0:feebe8eca523 191 void setDisplay(bool on);
wim 0:feebe8eca523 192
wim 0:feebe8eca523 193 private:
wim 0:feebe8eca523 194 SPI _spi;
wim 0:feebe8eca523 195 DigitalOut _cs;
wim 0:feebe8eca523 196 Mode _mode;
wim 0:feebe8eca523 197 char _display;
wim 0:feebe8eca523 198 char _bright;
wim 0:feebe8eca523 199
wim 0:feebe8eca523 200 /** Init the SPI interface and the controller
wim 0:feebe8eca523 201 * @param none
wim 0:feebe8eca523 202 * @return none
wim 0:feebe8eca523 203 */
wim 0:feebe8eca523 204 void _init();
wim 0:feebe8eca523 205
wim 0:feebe8eca523 206 /** Helper to reverse all command or databits. The PT6961 expects LSB first, whereas SPI is MSB first
wim 0:feebe8eca523 207 * @param char data
wim 0:feebe8eca523 208 * @return bitreversed data
wim 0:feebe8eca523 209 */
wim 0:feebe8eca523 210 char _flip(char data);
wim 0:feebe8eca523 211
wim 0:feebe8eca523 212 /** Write command and parameter to PT6961
wim 0:feebe8eca523 213 * @param int cmd Command byte
wim 0:feebe8eca523 214 * &Param int data Parameters for command
wim 0:feebe8eca523 215 * @return none
wim 0:feebe8eca523 216 */
wim 0:feebe8eca523 217 void _writeCmd(int cmd, int data);
wim 0:feebe8eca523 218 };
wim 0:feebe8eca523 219
wim 1:eb4758bba68a 220
wim 1:eb4758bba68a 221 #if(HR734_TEST == 1)
wim 1:eb4758bba68a 222 // Derived class for PT6961 used in DVD-HR734 front display unit
wim 1:eb4758bba68a 223 //
wim 1:eb4758bba68a 224 #include "Font_7Seg.h"
wim 1:eb4758bba68a 225
wim 1:eb4758bba68a 226 #define HR734_NR_GRIDS 7
wim 1:eb4758bba68a 227 #define HR734_NR_DIGITS 5
wim 1:eb4758bba68a 228 //#define HR734_DIG1_IDX 0
wim 1:eb4758bba68a 229 #define HR734_NR_UDC 8
wim 1:eb4758bba68a 230
wim 1:eb4758bba68a 231 //Access to 8 Switches
wim 1:eb4758bba68a 232 //#define HR734_SW1_IDX 0
wim 1:eb4758bba68a 233 //#define HR734_SW1_BIT 0x01
wim 1:eb4758bba68a 234
wim 1:eb4758bba68a 235 /** A class for driving Princeton PT6961 LED controller as used in HR734 display
wim 1:eb4758bba68a 236 *
wim 1:eb4758bba68a 237 * @brief Supports 5 Digits of 7 Segments + some additional segments + Icons. Also supports a scanned keyboard of 10 keys.
wim 1:eb4758bba68a 238 *
wim 1:eb4758bba68a 239 * SPI bus interface device.
wim 1:eb4758bba68a 240 */
wim 1:eb4758bba68a 241 class PT6961_HR734 : public PT6961, public Stream {
wim 1:eb4758bba68a 242 public:
wim 1:eb4758bba68a 243
wim 1:eb4758bba68a 244 /** Enums for Icons */
wim 1:eb4758bba68a 245 // Grid encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 1:eb4758bba68a 246 enum Icon {
wim 1:eb4758bba68a 247 RA = (1<<24) | S7_RA,
wim 1:eb4758bba68a 248 M = (2<<24) | S7_M,
wim 1:eb4758bba68a 249 ARW = (3<<24) | S7_ARW,
wim 1:eb4758bba68a 250 HDDDVD_HD = (4<<24) | S7_HDDVD_HD,
wim 1:eb4758bba68a 251 HDDDVD_D = (5<<24) | S7_HDDVD_D,
wim 1:eb4758bba68a 252 HDDDVD_VD = (6<<24) | S7_HDDVD_VD,
wim 1:eb4758bba68a 253 DP2 = (6<<24) | S7_DP2,
wim 1:eb4758bba68a 254 DP1 = (6<<24) | S7_DP1,
wim 1:eb4758bba68a 255 R = (7<<24) | S7_R,
wim 1:eb4758bba68a 256 W = (7<<24) | S7_W,
wim 1:eb4758bba68a 257 SO = (7<<24) | S7_SO,
wim 1:eb4758bba68a 258 P = (7<<24) | S7_P,
wim 1:eb4758bba68a 259 CLK = (7<<24) | S7_CLK,
wim 1:eb4758bba68a 260 BRK = (7<<24) | S7_BRK,
wim 1:eb4758bba68a 261 DP4 = (7<<24) | S7_DP4,
wim 1:eb4758bba68a 262 DP3 = (7<<24) | S7_DP3,
wim 1:eb4758bba68a 263 };
wim 1:eb4758bba68a 264
wim 1:eb4758bba68a 265 /** Datatypes for display */
wim 1:eb4758bba68a 266 typedef short UDCData_t[HR734_NR_UDC];
wim 1:eb4758bba68a 267
wim 1:eb4758bba68a 268 /** Constructor for class for driving Princeton PT6961 LED controller as used in HR734 display
wim 1:eb4758bba68a 269 *
wim 1:eb4758bba68a 270 * @brief Supports 5 Digits of 7 Segments + some additional segments + Icons. Also supports a scanned keyboard of 10 keys.
wim 1:eb4758bba68a 271 * SPI bus interface device.
wim 1:eb4758bba68a 272 * @param PinName mosi, miso, sclk, cs SPI bus pins
wim 1:eb4758bba68a 273 */
wim 1:eb4758bba68a 274 PT6961_HR734(PinName mosi, PinName miso, PinName sclk, PinName cs);
wim 1:eb4758bba68a 275
wim 1:eb4758bba68a 276
wim 1:eb4758bba68a 277 #if DOXYGEN_ONLY
wim 1:eb4758bba68a 278 /** Write a character to the Display
wim 1:eb4758bba68a 279 *
wim 1:eb4758bba68a 280 * @param c The character to write to the display
wim 1:eb4758bba68a 281 */
wim 1:eb4758bba68a 282 int putc(int c);
wim 1:eb4758bba68a 283
wim 1:eb4758bba68a 284 /** Write a formatted string to the Display
wim 1:eb4758bba68a 285 *
wim 1:eb4758bba68a 286 * @param format A printf-style format string, followed by the
wim 1:eb4758bba68a 287 * variables to use in formatting the string.
wim 1:eb4758bba68a 288 */
wim 1:eb4758bba68a 289 int printf(const char* format, ...);
wim 1:eb4758bba68a 290 #endif
wim 1:eb4758bba68a 291
wim 1:eb4758bba68a 292 /** Locate cursor to a screen column
wim 1:eb4758bba68a 293 *
wim 1:eb4758bba68a 294 * @param column The horizontal position from the left, indexed from 0
wim 1:eb4758bba68a 295 */
wim 1:eb4758bba68a 296 void locate(int column);
wim 1:eb4758bba68a 297
wim 1:eb4758bba68a 298 /** Clear the screen and locate to 0
wim 1:eb4758bba68a 299 * @param bool clrAll Clear Icons also (default = false)
wim 1:eb4758bba68a 300 */
wim 1:eb4758bba68a 301 void cls(bool clrAll = false);
wim 1:eb4758bba68a 302
wim 1:eb4758bba68a 303 /** Set Icon
wim 1:eb4758bba68a 304 *
wim 1:eb4758bba68a 305 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 1:eb4758bba68a 306 * @return none
wim 1:eb4758bba68a 307 */
wim 1:eb4758bba68a 308 void setIcon(Icon icon);
wim 1:eb4758bba68a 309
wim 1:eb4758bba68a 310 /** Clr Icon
wim 1:eb4758bba68a 311 *
wim 1:eb4758bba68a 312 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 1:eb4758bba68a 313 * @return none
wim 1:eb4758bba68a 314 */
wim 1:eb4758bba68a 315 void clrIcon(Icon icon);
wim 1:eb4758bba68a 316
wim 1:eb4758bba68a 317 /** Set User Defined Characters (UDC)
wim 1:eb4758bba68a 318 *
wim 1:eb4758bba68a 319 * @param unsigned char udc_idx The Index of the UDC (0..7)
wim 1:eb4758bba68a 320 * @param int udc_data The bitpattern for the UDC (16 bits)
wim 1:eb4758bba68a 321 */
wim 1:eb4758bba68a 322 void setUDC(unsigned char udc_idx, int udc_data);
wim 1:eb4758bba68a 323
wim 1:eb4758bba68a 324
wim 1:eb4758bba68a 325 /** Number of screen columns
wim 1:eb4758bba68a 326 *
wim 1:eb4758bba68a 327 * @param none
wim 1:eb4758bba68a 328 * @return columns
wim 1:eb4758bba68a 329 */
wim 1:eb4758bba68a 330 int columns();
wim 1:eb4758bba68a 331
wim 1:eb4758bba68a 332 /** Write databyte to PT6961
wim 1:eb4758bba68a 333 * @param int address display memory location to write byte
wim 1:eb4758bba68a 334 * @param char data byte written at given address
wim 1:eb4758bba68a 335 * @return none
wim 1:eb4758bba68a 336 */
wim 1:eb4758bba68a 337 void writeData(int address, char data){
wim 1:eb4758bba68a 338 PT6961::writeData(address, data);
wim 1:eb4758bba68a 339 }
wim 1:eb4758bba68a 340
wim 1:eb4758bba68a 341 /** Write Display datablock to PT6961
wim 1:eb4758bba68a 342 * @param DisplayData_t data Array of PT6961_DISPLAY_MEM (=16) bytes for displaydata (starting at address 0)
wim 1:eb4758bba68a 343 * @param length number bytes to write (valid range 0..(HR734_NR_GRIDS*2) (=14), starting at address 0)
wim 1:eb4758bba68a 344 * @return none
wim 1:eb4758bba68a 345 */
wim 1:eb4758bba68a 346 void writeData(DisplayData_t data, int length = (HR734_NR_GRIDS*2)) {
wim 1:eb4758bba68a 347 PT6961::writeData(data, length);
wim 1:eb4758bba68a 348 }
wim 1:eb4758bba68a 349
wim 1:eb4758bba68a 350 protected:
wim 1:eb4758bba68a 351 // Stream implementation functions
wim 1:eb4758bba68a 352 virtual int _putc(int value);
wim 1:eb4758bba68a 353 virtual int _getc();
wim 1:eb4758bba68a 354
wim 1:eb4758bba68a 355 private:
wim 1:eb4758bba68a 356 int _column;
wim 1:eb4758bba68a 357 int _columns;
wim 1:eb4758bba68a 358
wim 1:eb4758bba68a 359 DisplayData_t _displaybuffer;
wim 1:eb4758bba68a 360 UDCData_t _UDC_7S;
wim 1:eb4758bba68a 361 };
wim 1:eb4758bba68a 362 #endif
wim 1:eb4758bba68a 363
wim 1:eb4758bba68a 364
wim 1:eb4758bba68a 365
wim 1:eb4758bba68a 366 #if(V56S_TEST == 1)
wim 1:eb4758bba68a 367 // Derived class for PT6961 used in V56S front display unit
wim 1:eb4758bba68a 368 //
wim 1:eb4758bba68a 369 #include "Font_7Seg.h"
wim 1:eb4758bba68a 370
wim 1:eb4758bba68a 371 #define V56S_NR_GRIDS 7
wim 1:eb4758bba68a 372 #define V56S_NR_DIGITS 5
wim 1:eb4758bba68a 373 //#define V56S_DIG1_IDX 0
wim 1:eb4758bba68a 374 #define V56S_NR_UDC 8
wim 1:eb4758bba68a 375
wim 1:eb4758bba68a 376 //Access to 5 Switches
wim 1:eb4758bba68a 377 //#define V56S_SW1_IDX 0
wim 1:eb4758bba68a 378 //#define V56S_SW1_BIT 0x01
wim 1:eb4758bba68a 379
wim 1:eb4758bba68a 380 /** A class for driving Princeton PT6961 LED controller as used in V56S display
wim 1:eb4758bba68a 381 *
wim 1:eb4758bba68a 382 * @brief Supports 5 Digits of 7 Segments + some additional segments + Icons. Also supports a scanned keyboard of 5 keys.
wim 1:eb4758bba68a 383 *
wim 1:eb4758bba68a 384 * SPI bus interface device.
wim 1:eb4758bba68a 385 */
wim 1:eb4758bba68a 386 class PT6961_V56S : public PT6961, public Stream {
wim 1:eb4758bba68a 387 public:
wim 1:eb4758bba68a 388
wim 1:eb4758bba68a 389 /** Enums for Icons */
wim 1:eb4758bba68a 390 // Grid encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 1:eb4758bba68a 391 enum Icon {
wim 1:eb4758bba68a 392 RED = (1<<24) | S7_RED,
wim 1:eb4758bba68a 393 GRN = (1<<24) | S7_GRN,
wim 1:eb4758bba68a 394 YEL = (1<<24) | S7_YEL,
wim 1:eb4758bba68a 395 DVD = (6<<24) | S7_DVD,
wim 1:eb4758bba68a 396 COL1 = (6<<24) | S7_COL1,
wim 1:eb4758bba68a 397 DP3 = (6<<24) | S7_DP3,
wim 1:eb4758bba68a 398 PSE = (6<<24) | S7_PSE,
wim 1:eb4758bba68a 399 MP3 = (6<<24) | S7_MP3,
wim 1:eb4758bba68a 400 PLY = (6<<24) | S7_PLY,
wim 1:eb4758bba68a 401 CD = (6<<24) | S7_CD,
wim 1:eb4758bba68a 402 COL3 = (6<<24) | S7_COL3,
wim 1:eb4758bba68a 403 ARW = (7<<24) | S7_ARW,
wim 1:eb4758bba68a 404 ANT = (7<<24) | S7_ANT,
wim 1:eb4758bba68a 405 DTS = (7<<24) | S7_DTS,
wim 1:eb4758bba68a 406 MHZ = (7<<24) | S7_MHZ,
wim 1:eb4758bba68a 407 DDD = (7<<24) | S7_DDD,
wim 1:eb4758bba68a 408 KHZ = (7<<24) | S7_KHZ,
wim 1:eb4758bba68a 409 RDS = (7<<24) | S7_RDS
wim 1:eb4758bba68a 410 };
wim 1:eb4758bba68a 411
wim 1:eb4758bba68a 412 /** Datatypes for display */
wim 1:eb4758bba68a 413 typedef short UDCData_t[V56S_NR_UDC];
wim 1:eb4758bba68a 414
wim 1:eb4758bba68a 415 /** Constructor for class for driving Princeton PT6961 LED controller as used in V56S display
wim 1:eb4758bba68a 416 *
wim 1:eb4758bba68a 417 * @brief Supports 5 Digits of 7 Segments + some additional segments + Icons. Also supports a scanned keyboard of 5 keys.
wim 1:eb4758bba68a 418 * SPI bus interface device.
wim 1:eb4758bba68a 419 * @param PinName mosi, miso, sclk, cs SPI bus pins
wim 1:eb4758bba68a 420 */
wim 1:eb4758bba68a 421 PT6961_V56S(PinName mosi, PinName miso, PinName sclk, PinName cs);
wim 1:eb4758bba68a 422
wim 1:eb4758bba68a 423
wim 1:eb4758bba68a 424 #if DOXYGEN_ONLY
wim 1:eb4758bba68a 425 /** Write a character to the Display
wim 1:eb4758bba68a 426 *
wim 1:eb4758bba68a 427 * @param c The character to write to the display
wim 1:eb4758bba68a 428 */
wim 1:eb4758bba68a 429 int putc(int c);
wim 1:eb4758bba68a 430
wim 1:eb4758bba68a 431 /** Write a formatted string to the Display
wim 1:eb4758bba68a 432 *
wim 1:eb4758bba68a 433 * @param format A printf-style format string, followed by the
wim 1:eb4758bba68a 434 * variables to use in formatting the string.
wim 1:eb4758bba68a 435 */
wim 1:eb4758bba68a 436 int printf(const char* format, ...);
wim 1:eb4758bba68a 437 #endif
wim 1:eb4758bba68a 438
wim 1:eb4758bba68a 439 /** Locate cursor to a screen column
wim 1:eb4758bba68a 440 *
wim 1:eb4758bba68a 441 * @param column The horizontal position from the left, indexed from 0
wim 1:eb4758bba68a 442 */
wim 1:eb4758bba68a 443 void locate(int column);
wim 1:eb4758bba68a 444
wim 1:eb4758bba68a 445 /** Clear the screen and locate to 0
wim 1:eb4758bba68a 446 * @param bool clrAll Clear Icons also (default = false)
wim 1:eb4758bba68a 447 */
wim 1:eb4758bba68a 448 void cls(bool clrAll = false);
wim 1:eb4758bba68a 449
wim 1:eb4758bba68a 450 /** Set Icon
wim 1:eb4758bba68a 451 *
wim 1:eb4758bba68a 452 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 1:eb4758bba68a 453 * @return none
wim 1:eb4758bba68a 454 */
wim 1:eb4758bba68a 455 void setIcon(Icon icon);
wim 1:eb4758bba68a 456
wim 1:eb4758bba68a 457 /** Clr Icon
wim 1:eb4758bba68a 458 *
wim 1:eb4758bba68a 459 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
wim 1:eb4758bba68a 460 * @return none
wim 1:eb4758bba68a 461 */
wim 1:eb4758bba68a 462 void clrIcon(Icon icon);
wim 1:eb4758bba68a 463
wim 1:eb4758bba68a 464 /** Set User Defined Characters (UDC)
wim 1:eb4758bba68a 465 *
wim 1:eb4758bba68a 466 * @param unsigned char udc_idx The Index of the UDC (0..7)
wim 1:eb4758bba68a 467 * @param int udc_data The bitpattern for the UDC (16 bits)
wim 1:eb4758bba68a 468 */
wim 1:eb4758bba68a 469 void setUDC(unsigned char udc_idx, int udc_data);
wim 1:eb4758bba68a 470
wim 1:eb4758bba68a 471
wim 1:eb4758bba68a 472 /** Number of screen columns
wim 1:eb4758bba68a 473 *
wim 1:eb4758bba68a 474 * @param none
wim 1:eb4758bba68a 475 * @return columns
wim 1:eb4758bba68a 476 */
wim 1:eb4758bba68a 477 int columns();
wim 1:eb4758bba68a 478
wim 1:eb4758bba68a 479 /** Write databyte to PT6961
wim 1:eb4758bba68a 480 * @param int address display memory location to write byte
wim 1:eb4758bba68a 481 * @param char data byte written at given address
wim 1:eb4758bba68a 482 * @return none
wim 1:eb4758bba68a 483 */
wim 1:eb4758bba68a 484 void writeData(int address, char data){
wim 1:eb4758bba68a 485 PT6961::writeData(address, data);
wim 1:eb4758bba68a 486 }
wim 1:eb4758bba68a 487
wim 1:eb4758bba68a 488 /** Write Display datablock to PT6961
wim 1:eb4758bba68a 489 * @param DisplayData_t data Array of PT6961_DISPLAY_MEM (=16) bytes for displaydata (starting at address 0)
wim 1:eb4758bba68a 490 * @param length number bytes to write (valid range 0..(V56S_NR_GRIDS*2) (=14), starting at address 0)
wim 1:eb4758bba68a 491 * @return none
wim 1:eb4758bba68a 492 */
wim 1:eb4758bba68a 493 void writeData(DisplayData_t data, int length = (V56S_NR_GRIDS*2)) {
wim 1:eb4758bba68a 494 PT6961::writeData(data, length);
wim 1:eb4758bba68a 495 }
wim 1:eb4758bba68a 496
wim 1:eb4758bba68a 497 protected:
wim 1:eb4758bba68a 498 // Stream implementation functions
wim 1:eb4758bba68a 499 virtual int _putc(int value);
wim 1:eb4758bba68a 500 virtual int _getc();
wim 1:eb4758bba68a 501
wim 1:eb4758bba68a 502 private:
wim 1:eb4758bba68a 503 int _column;
wim 1:eb4758bba68a 504 int _columns;
wim 1:eb4758bba68a 505
wim 1:eb4758bba68a 506 DisplayData_t _displaybuffer;
wim 1:eb4758bba68a 507 UDCData_t _UDC_7S;
wim 1:eb4758bba68a 508 };
wim 1:eb4758bba68a 509 #endif
wim 1:eb4758bba68a 510
wim 1:eb4758bba68a 511
wim 0:feebe8eca523 512 #endif