Lib for Noritake Itron CU209SCPB VFD Module (1 Line, 20 Chars), Serial interface

Dependents:   mbed_CU209SCPB_T20

More info is here.

Committer:
wim
Date:
Sun Dec 10 17:02:32 2017 +0000
Revision:
0:93ae875cbb7a
Lib for Noritake Itron VFD Module (1 Line, 20 Chars), Serial interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:93ae875cbb7a 1 /* mbed CU209SCPB Library, for Noritake Itron CU209SCPB VFD module
wim 0:93ae875cbb7a 2 *
wim 0:93ae875cbb7a 3 * Copyright (c) 2017, v01: WH, Initial version
wim 0:93ae875cbb7a 4 *
wim 0:93ae875cbb7a 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 0:93ae875cbb7a 6 * of this software and associated documentation files (the "Software"), to deal
wim 0:93ae875cbb7a 7 * in the Software without restriction, including without limitation the rights
wim 0:93ae875cbb7a 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 0:93ae875cbb7a 9 * copies of the Software, and to permit persons to whom the Software is
wim 0:93ae875cbb7a 10 * furnished to do so, subject to the following conditions:
wim 0:93ae875cbb7a 11 *
wim 0:93ae875cbb7a 12 * The above copyright notice and this permission notice shall be included in
wim 0:93ae875cbb7a 13 * all copies or substantial portions of the Software.
wim 0:93ae875cbb7a 14 *
wim 0:93ae875cbb7a 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 0:93ae875cbb7a 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 0:93ae875cbb7a 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 0:93ae875cbb7a 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 0:93ae875cbb7a 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 0:93ae875cbb7a 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 0:93ae875cbb7a 21 * THE SOFTWARE.
wim 0:93ae875cbb7a 22 */
wim 0:93ae875cbb7a 23
wim 0:93ae875cbb7a 24 #ifndef CU209SCPB_H
wim 0:93ae875cbb7a 25 #define CU209SCPB_H
wim 0:93ae875cbb7a 26
wim 0:93ae875cbb7a 27 // Select Noritake Itron CU209SCPB VFD module settings
wim 0:93ae875cbb7a 28 #include "CU209SCPB_Config.h"
wim 0:93ae875cbb7a 29
wim 0:93ae875cbb7a 30 #include "CU209SCPB_UDC.h"
wim 0:93ae875cbb7a 31
wim 0:93ae875cbb7a 32 /** An interface for driving Noritake Itron CU209SCPB VFD module
wim 0:93ae875cbb7a 33 *
wim 0:93ae875cbb7a 34 * @code
wim 0:93ae875cbb7a 35 *
wim 0:93ae875cbb7a 36 * #include "mbed.h"
wim 0:93ae875cbb7a 37 * #include "CU209SCPB.h"
wim 0:93ae875cbb7a 38 *
wim 0:93ae875cbb7a 39 * DigitalOut myled(LED1);
wim 0:93ae875cbb7a 40 * Serial pc(USBTX, USBRX);
wim 0:93ae875cbb7a 41 *
wim 0:93ae875cbb7a 42 * // CU209SCPB declaration, Default setting
wim 0:93ae875cbb7a 43 * CU209SCPB CU209SCPB(p9); // TXD
wim 0:93ae875cbb7a 44 *
wim 0:93ae875cbb7a 45 * int main() {
wim 0:93ae875cbb7a 46 * pc.printf("Hello World: CU209SCPB test\n\r");
wim 0:93ae875cbb7a 47 *
wim 0:93ae875cbb7a 48 * CU209SCPB.cls();
wim 0:93ae875cbb7a 49 *
wim 0:93ae875cbb7a 50 * CU209SCPB.putc('H');
wim 0:93ae875cbb7a 51 * CU209SCPB.putc('e');
wim 0:93ae875cbb7a 52 * CU209SCPB.putc('l');
wim 0:93ae875cbb7a 53 * CU209SCPB.putc('l');
wim 0:93ae875cbb7a 54 * CU209SCPB.putc('0');
wim 0:93ae875cbb7a 55 * CU209SCPB.putc(' ');
wim 0:93ae875cbb7a 56 * CU209SCPB.printf("World);
wim 0:93ae875cbb7a 57 * wait(2);
wim 0:93ae875cbb7a 58 * CU209SCPB.setBrightness(CU209SCPB_BRT0);
wim 0:93ae875cbb7a 59 * wait(2);
wim 0:93ae875cbb7a 60 * CU209SCPB.setBrightness(CU209SCPB_BRT3);
wim 0:93ae875cbb7a 61 *
wim 0:93ae875cbb7a 62 * while(1) {
wim 0:93ae875cbb7a 63 * myled = !myled;
wim 0:93ae875cbb7a 64 * wait(1);
wim 0:93ae875cbb7a 65 * }
wim 0:93ae875cbb7a 66 * }
wim 0:93ae875cbb7a 67 * #endif
wim 0:93ae875cbb7a 68 *
wim 0:93ae875cbb7a 69 * @endcode
wim 0:93ae875cbb7a 70 */
wim 0:93ae875cbb7a 71
wim 0:93ae875cbb7a 72
wim 0:93ae875cbb7a 73 //CU209SCPB Display data
wim 0:93ae875cbb7a 74 #define CU209SCPB_MAX_NR_GRIDS 20
wim 0:93ae875cbb7a 75 #define CU209SCPB_BYTES_PER_GRID 1
wim 0:93ae875cbb7a 76
wim 0:93ae875cbb7a 77 //Memory size in bytes for Display
wim 0:93ae875cbb7a 78 #define CU209SCPB_DSP_MEM (CU209SCPB_MAX_NR_GRIDS * CU209SCPB_BYTES_PER_GRID)
wim 0:93ae875cbb7a 79
wim 0:93ae875cbb7a 80 //CU209SCPB Characters per line
wim 0:93ae875cbb7a 81 #define CU209SCPB_NR_COLS CU209SCPB_MAX_NR_GRIDS
wim 0:93ae875cbb7a 82
wim 0:93ae875cbb7a 83 //CU209SCPB User Defined Characters
wim 0:93ae875cbb7a 84 #define CU209SCPB_NR_UDC 8
wim 0:93ae875cbb7a 85 //#define CU209SCPB_UDC_MEM 8
wim 0:93ae875cbb7a 86
wim 0:93ae875cbb7a 87
wim 0:93ae875cbb7a 88 //Serial control data consists of an 8-bit command and one or more data bytes.
wim 0:93ae875cbb7a 89 //Command and data are sent LSB first. Data address is auto incremented.
wim 0:93ae875cbb7a 90
wim 0:93ae875cbb7a 91 //Command delay
wim 0:93ae875cbb7a 92 #define CU209SCPB_CMD_DLY 8
wim 0:93ae875cbb7a 93
wim 0:93ae875cbb7a 94 //Commands Characters
wim 0:93ae875cbb7a 95 #define D_BS 0x08
wim 0:93ae875cbb7a 96 #define D_HT 0x09
wim 0:93ae875cbb7a 97 #define D_LF 0x0A
wim 0:93ae875cbb7a 98 #define D_FF 0x0C
wim 0:93ae875cbb7a 99 #define D_CR 0x0D
wim 0:93ae875cbb7a 100 #define D_CLR 0x0E
wim 0:93ae875cbb7a 101
wim 0:93ae875cbb7a 102 #define D_DC1 0x11
wim 0:93ae875cbb7a 103 #define D_DC2 0x12
wim 0:93ae875cbb7a 104 #define D_DC3 0x13
wim 0:93ae875cbb7a 105 #define D_DC4 0x14
wim 0:93ae875cbb7a 106 #define D_DC5 0x15
wim 0:93ae875cbb7a 107 #define D_DC6 0x16
wim 0:93ae875cbb7a 108 #define D_DC7 0x17
wim 0:93ae875cbb7a 109 #define D_CT0 0x18
wim 0:93ae875cbb7a 110 #define D_CT1 0x19
wim 0:93ae875cbb7a 111 #define D_ESC 0x1B
wim 0:93ae875cbb7a 112
wim 0:93ae875cbb7a 113 //Display Characters
wim 0:93ae875cbb7a 114 #define CU209SCPB_CHR_STRT 0x20
wim 0:93ae875cbb7a 115 #define CU209SCPB_CHR_END 0xFF
wim 0:93ae875cbb7a 116
wim 0:93ae875cbb7a 117
wim 0:93ae875cbb7a 118 //User Defined Characters (UDCs) are a 5x7 Matrix pattern that will show on the VFD as
wim 0:93ae875cbb7a 119 // 0 P1 P2 P3 P4 P5
wim 0:93ae875cbb7a 120 // 1 P6 P7 ..... P10
wim 0:93ae875cbb7a 121 // . .............
wim 0:93ae875cbb7a 122 // . .............
wim 0:93ae875cbb7a 123 // . .............
wim 0:93ae875cbb7a 124 // 6 P31 P32 ... P35
wim 0:93ae875cbb7a 125 //
wim 0:93ae875cbb7a 126
wim 0:93ae875cbb7a 127 //UDCs are defined by sending a 5 byte bitpattern to the display.
wim 0:93ae875cbb7a 128 //UDC Command: ESC, 'C', UDC idx
wim 0:93ae875cbb7a 129 //Followed by:
wim 0:93ae875cbb7a 130 //UDC Data (4th byte .. 8th byte)
wim 0:93ae875cbb7a 131 // D7 D6 D5 D4 D3 D2 D1 D0
wim 0:93ae875cbb7a 132 // 0 P8 P7 P6 ...... P3 P2 P1
wim 0:93ae875cbb7a 133 // 1 P16 P15 P14 ........ P10 P9
wim 0:93ae875cbb7a 134 // 2 P24 P23 P22 .......... P17
wim 0:93ae875cbb7a 135 // 3 P32 P31 P30 ............ P25
wim 0:93ae875cbb7a 136 // 4 * * * .... * P35 P34 P33
wim 0:93ae875cbb7a 137 //
wim 0:93ae875cbb7a 138 //UDCs are defined by a 5x7 matrix and stored for convenience as 7 bytes with 5 significant bits
wim 0:93ae875cbb7a 139 typedef char UDCData_t[7];
wim 0:93ae875cbb7a 140
wim 0:93ae875cbb7a 141 //Any character in the CU209SCPB ROM can be redefined as UDC.
wim 0:93ae875cbb7a 142 //However, the lib restricts UDCs to the first 8 characters (which are not in use anyhow).
wim 0:93ae875cbb7a 143 #define CU209SCPB_UADR_MSK 0x07
wim 0:93ae875cbb7a 144
wim 0:93ae875cbb7a 145
wim 0:93ae875cbb7a 146 //Brightness Level (0..3)
wim 0:93ae875cbb7a 147 #define CU209SCPB_BRT_0 0x00 //Duty 25%
wim 0:93ae875cbb7a 148 #define CU209SCPB_BRT_1 0x40 //Duty 50%
wim 0:93ae875cbb7a 149 #define CU209SCPB_BRT_2 0x80 //Duty 75%
wim 0:93ae875cbb7a 150 #define CU209SCPB_BRT_3 0xC0 //Duty 100% (Default)
wim 0:93ae875cbb7a 151
wim 0:93ae875cbb7a 152 #define CU209SCPB_BRT_DEF (CU209SCPB_BRT_1)
wim 0:93ae875cbb7a 153
wim 0:93ae875cbb7a 154 #define CU209SCPB_BRT_MSK 0xFF
wim 0:93ae875cbb7a 155
wim 0:93ae875cbb7a 156
wim 0:93ae875cbb7a 157
wim 0:93ae875cbb7a 158 /** A class for driving Noritake Itron CU209SCPB VFD module
wim 0:93ae875cbb7a 159 *
wim 0:93ae875cbb7a 160 * @brief Supports 1 line of 20 chars (5x7 matrix segments).
wim 0:93ae875cbb7a 161 * Serial bus interface device.
wim 0:93ae875cbb7a 162 * @param PinName TX Serial bus pin
wim 0:93ae875cbb7a 163 * @param Baud baud selects baudrate (default 19200)
wim 0:93ae875cbb7a 164 * @param Int Parity selects paritybits (default Even)
wim 0:93ae875cbb7a 165 */
wim 0:93ae875cbb7a 166 class CU209SCPB : public Stream {
wim 0:93ae875cbb7a 167
wim 0:93ae875cbb7a 168 public:
wim 0:93ae875cbb7a 169
wim 0:93ae875cbb7a 170 /** Enums
wim 0:93ae875cbb7a 171 */
wim 0:93ae875cbb7a 172 enum Baud {
wim 0:93ae875cbb7a 173 B_300 = 300,
wim 0:93ae875cbb7a 174 B_600 = 600,
wim 0:93ae875cbb7a 175 B_1200 = 1200,
wim 0:93ae875cbb7a 176 B_2400 = 2400,
wim 0:93ae875cbb7a 177 B_9600 = 9600,
wim 0:93ae875cbb7a 178 B_19200 = 19200
wim 0:93ae875cbb7a 179 };
wim 0:93ae875cbb7a 180
wim 0:93ae875cbb7a 181 /** Constructor for class for driving Noritake Itron CU209SCPB VFD module
wim 0:93ae875cbb7a 182 *
wim 0:93ae875cbb7a 183 * @brief Supports 1 line of 20 chars (5x7 matrix segments).
wim 0:93ae875cbb7a 184 * Serial bus interface device.
wim 0:93ae875cbb7a 185 * @param PinName TX Serial bus pin
wim 0:93ae875cbb7a 186 * @param Baud baud selects baudrate (default 19200)
wim 0:93ae875cbb7a 187 * @param Parity parity selects paritybits (default Even)
wim 0:93ae875cbb7a 188 */
wim 0:93ae875cbb7a 189 CU209SCPB(PinName TXD, Baud baud = B_19200, SerialBase::Parity parity = SerialBase::Even);
wim 0:93ae875cbb7a 190
wim 0:93ae875cbb7a 191 /** Clear the screen and locate to 0
wim 0:93ae875cbb7a 192 *
wim 0:93ae875cbb7a 193 * @param none
wim 0:93ae875cbb7a 194 * @return none
wim 0:93ae875cbb7a 195 */
wim 0:93ae875cbb7a 196 void cls();
wim 0:93ae875cbb7a 197
wim 0:93ae875cbb7a 198 /** Locate cursor to a screen column
wim 0:93ae875cbb7a 199 *
wim 0:93ae875cbb7a 200 * @param column The horizontal position from the left, indexed from 0
wim 0:93ae875cbb7a 201 * @return none
wim 0:93ae875cbb7a 202 */
wim 0:93ae875cbb7a 203 void locate(int column);
wim 0:93ae875cbb7a 204
wim 0:93ae875cbb7a 205 /** Number of screen columns
wim 0:93ae875cbb7a 206 *
wim 0:93ae875cbb7a 207 * @param none
wim 0:93ae875cbb7a 208 * @return columns
wim 0:93ae875cbb7a 209 */
wim 0:93ae875cbb7a 210 int columns();
wim 0:93ae875cbb7a 211
wim 0:93ae875cbb7a 212 #if DOXYGEN_ONLY
wim 0:93ae875cbb7a 213 /** Write a character to the Display
wim 0:93ae875cbb7a 214 *
wim 0:93ae875cbb7a 215 * @param c The character to write to the display
wim 0:93ae875cbb7a 216 * @return char written
wim 0:93ae875cbb7a 217 */
wim 0:93ae875cbb7a 218 int putc(int c);
wim 0:93ae875cbb7a 219
wim 0:93ae875cbb7a 220 /** Write a formatted string to the Display
wim 0:93ae875cbb7a 221 *
wim 0:93ae875cbb7a 222 * @param format A printf-style format string, followed by the
wim 0:93ae875cbb7a 223 * variables to use in formatting the string.
wim 0:93ae875cbb7a 224 */
wim 0:93ae875cbb7a 225 int printf(const char* format, ...);
wim 0:93ae875cbb7a 226 #endif
wim 0:93ae875cbb7a 227
wim 0:93ae875cbb7a 228 /** Set Brightness
wim 0:93ae875cbb7a 229 *
wim 0:93ae875cbb7a 230 * @param char brightness (3 significant bits, valid range 0..7 (dutycycle linked to number of grids)
wim 0:93ae875cbb7a 231 * @return none
wim 0:93ae875cbb7a 232 */
wim 0:93ae875cbb7a 233 void setBrightness(char brightness = CU209SCPB_BRT_DEF);
wim 0:93ae875cbb7a 234
wim 0:93ae875cbb7a 235 /** Set the Cursor mode On/off
wim 0:93ae875cbb7a 236 *
wim 0:93ae875cbb7a 237 * @param bool cursor mode
wim 0:93ae875cbb7a 238 * @return none
wim 0:93ae875cbb7a 239 */
wim 0:93ae875cbb7a 240 void setCursor(bool on);
wim 0:93ae875cbb7a 241
wim 0:93ae875cbb7a 242 /** Set Font
wim 0:93ae875cbb7a 243 *
wim 0:93ae875cbb7a 244 * @param int font (valid range: 0 == International, other == Katakana)
wim 0:93ae875cbb7a 245 * @return none
wim 0:93ae875cbb7a 246 */
wim 0:93ae875cbb7a 247 void setFont(int font = 0);
wim 0:93ae875cbb7a 248
wim 0:93ae875cbb7a 249 /** Set User Defined Characters (UDC)
wim 0:93ae875cbb7a 250 *
wim 0:93ae875cbb7a 251 * @param unsigned char udc_idx The Index of the UDC (0..7)
wim 0:93ae875cbb7a 252 * @param UDCData_t udc_data The bitpattern for the UDC (7 bytes)
wim 0:93ae875cbb7a 253 * @return none
wim 0:93ae875cbb7a 254 */
wim 0:93ae875cbb7a 255 void setUDC(unsigned char udc_idx, UDCData_t udc_data);
wim 0:93ae875cbb7a 256
wim 0:93ae875cbb7a 257 protected:
wim 0:93ae875cbb7a 258 // Stream implementation functions
wim 0:93ae875cbb7a 259 virtual int _putc(int value);
wim 0:93ae875cbb7a 260 virtual int _getc();
wim 0:93ae875cbb7a 261
wim 0:93ae875cbb7a 262
wim 0:93ae875cbb7a 263 /** Init the Serial interface and the module
wim 0:93ae875cbb7a 264 *
wim 0:93ae875cbb7a 265 * @param none
wim 0:93ae875cbb7a 266 * @return none
wim 0:93ae875cbb7a 267 */
wim 0:93ae875cbb7a 268 void _init();
wim 0:93ae875cbb7a 269
wim 0:93ae875cbb7a 270 private:
wim 0:93ae875cbb7a 271 Serial _serial;
wim 0:93ae875cbb7a 272 Baud _baud;
wim 0:93ae875cbb7a 273 SerialBase::Parity _parity;
wim 0:93ae875cbb7a 274
wim 0:93ae875cbb7a 275 int _column; // Current cursor location
wim 0:93ae875cbb7a 276 int _columns; // Max number of columns
wim 0:93ae875cbb7a 277 };
wim 0:93ae875cbb7a 278 #endif
wim 0:93ae875cbb7a 279