16 segment display library for mbed This routine support 4, 6 and 8 digit anode-common or cathode-common LED.

Dependents:   16segmentLED_test

Committer:
morecat_lab
Date:
Sun Feb 08 11:51:48 2015 +0000
Revision:
0:420d710da1c5
1st release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
morecat_lab 0:420d710da1c5 1 /*
morecat_lab 0:420d710da1c5 2 Stnseg.cpp - mbed library for 2/4/8 digit Sixteen (16) segment LED driver.
morecat_lab 0:420d710da1c5 3 Copyright 2015 by morecat_lab
morecat_lab 0:420d710da1c5 4
morecat_lab 0:420d710da1c5 5 This library is distributed in the hope that it will be useful,
morecat_lab 0:420d710da1c5 6 but WITHOUT ANY WARRANTY; without even the implied warranty of
morecat_lab 0:420d710da1c5 7 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
morecat_lab 0:420d710da1c5 8 */
morecat_lab 0:420d710da1c5 9
morecat_lab 0:420d710da1c5 10 #ifndef STNSEG_H
morecat_lab 0:420d710da1c5 11 #define STNSEG_H
morecat_lab 0:420d710da1c5 12
morecat_lab 0:420d710da1c5 13 #include "mbed.h"
morecat_lab 0:420d710da1c5 14 #include <Timer.h>
morecat_lab 0:420d710da1c5 15
morecat_lab 0:420d710da1c5 16 // the order of segment bit is as follows (16 bit)
morecat_lab 0:420d710da1c5 17 // | | | | |
morecat_lab 0:420d710da1c5 18 // A1, A2, B, C, D1, D2, E, F, G1, G2, H, I, J, K, L, M
morecat_lab 0:420d710da1c5 19 // note that DP must set independent port
morecat_lab 0:420d710da1c5 20
morecat_lab 0:420d710da1c5 21 #define NUM_PAT16_0 0xff09
morecat_lab 0:420d710da1c5 22 #define NUM_PAT16_1 0x3000
morecat_lab 0:420d710da1c5 23 #define NUM_PAT16_2 0xeec0
morecat_lab 0:420d710da1c5 24 #define NUM_PAT16_3 0xfcc0
morecat_lab 0:420d710da1c5 25 #define NUM_PAT16_4 0x31c0
morecat_lab 0:420d710da1c5 26 #define NUM_PAT16_5 0xddc0
morecat_lab 0:420d710da1c5 27 #define NUM_PAT16_6 0xdfc0
morecat_lab 0:420d710da1c5 28 #define NUM_PAT16_7 0xf000
morecat_lab 0:420d710da1c5 29 #define NUM_PAT16_8 0xffc0
morecat_lab 0:420d710da1c5 30 #define NUM_PAT16_9 0xfdc0
morecat_lab 0:420d710da1c5 31 #define NUM_PAT16_A 0xf3c0
morecat_lab 0:420d710da1c5 32 #define NUM_PAT16_B 0xfc52
morecat_lab 0:420d710da1c5 33 #define NUM_PAT16_C 0xcf00
morecat_lab 0:420d710da1c5 34 #define NUM_PAT16_D 0xfc12
morecat_lab 0:420d710da1c5 35 #define NUM_PAT16_E 0xcf80
morecat_lab 0:420d710da1c5 36 #define NUM_PAT16_F 0xf310
morecat_lab 0:420d710da1c5 37
morecat_lab 0:420d710da1c5 38 #define NUM_PAT16_MINUS 0x00c0
morecat_lab 0:420d710da1c5 39
morecat_lab 0:420d710da1c5 40 /**
morecat_lab 0:420d710da1c5 41 * Sixteen segment LED driver library
morecat_lab 0:420d710da1c5 42 */
morecat_lab 0:420d710da1c5 43 class Stnseg
morecat_lab 0:420d710da1c5 44 {
morecat_lab 0:420d710da1c5 45 private:
morecat_lab 0:420d710da1c5 46 unsigned long _lastUpdateTime;
morecat_lab 0:420d710da1c5 47 int _updateInterval;
morecat_lab 0:420d710da1c5 48 DigitalOut _dataPin, _clockPin, _latchPin, _dpPin;
morecat_lab 0:420d710da1c5 49 BusOut _digPins;
morecat_lab 0:420d710da1c5 50 uint32_t _buffer[8];
morecat_lab 0:420d710da1c5 51 int _numOfDigs;
morecat_lab 0:420d710da1c5 52 int _dig; // support 4, 6 or 8
morecat_lab 0:420d710da1c5 53 bool _zeroSupress;
morecat_lab 0:420d710da1c5 54 bool _kcommon; // Cathode-common flag
morecat_lab 0:420d710da1c5 55 Timer timer;
morecat_lab 0:420d710da1c5 56 public:
morecat_lab 0:420d710da1c5 57 static const uint16_t numConv[16];
morecat_lab 0:420d710da1c5 58
morecat_lab 0:420d710da1c5 59 /**
morecat_lab 0:420d710da1c5 60 * create an 4 digit sixteen segment driver
morecat_lab 0:420d710da1c5 61 *
morecat_lab 0:420d710da1c5 62 * @param PinName data (for 74HC959)
morecat_lab 0:420d710da1c5 63 * @param PinName clock (for 74HC959)
morecat_lab 0:420d710da1c5 64 * @param PinName latch (for 74HC959)
morecat_lab 0:420d710da1c5 65 * @param PinName dp Pin No for segment DP
morecat_lab 0:420d710da1c5 66 * @param PinName d1 Pin No for dight 1
morecat_lab 0:420d710da1c5 67 * @param PinName d2 Pin No for dight 2
morecat_lab 0:420d710da1c5 68 * @param PinName d3 Pin No for dight 3
morecat_lab 0:420d710da1c5 69 * @param PinName d4 Pin No for dight 4
morecat_lab 0:420d710da1c5 70 */
morecat_lab 0:420d710da1c5 71 Stnseg(PinName data, PinName clock, PinName latch, PinName dp,
morecat_lab 0:420d710da1c5 72 PinName d1,PinName d2, PinName d3, PinName d4);
morecat_lab 0:420d710da1c5 73
morecat_lab 0:420d710da1c5 74 /**
morecat_lab 0:420d710da1c5 75 * create an 6 digit sixteen segment driver
morecat_lab 0:420d710da1c5 76 *
morecat_lab 0:420d710da1c5 77 * @param PinName data (for 74HC959)
morecat_lab 0:420d710da1c5 78 * @param PinName clock (for 74HC959)
morecat_lab 0:420d710da1c5 79 * @param PinName latch (for 74HC959)
morecat_lab 0:420d710da1c5 80 * @param PinName dp Pin No for segment DP
morecat_lab 0:420d710da1c5 81 * @param PinName d1 Pin No for dight 1
morecat_lab 0:420d710da1c5 82 * @param PinName d2 Pin No for dight 2
morecat_lab 0:420d710da1c5 83 * @param PinName d3 Pin No for dight 3
morecat_lab 0:420d710da1c5 84 * @param PinName d4 Pin No for dight 4
morecat_lab 0:420d710da1c5 85 * @param PinName d4 Pin No for dight 5
morecat_lab 0:420d710da1c5 86 * @param PinName d4 Pin No for dight 6
morecat_lab 0:420d710da1c5 87 */
morecat_lab 0:420d710da1c5 88 Stnseg(PinName data, PinName clock, PinName latch, PinName dp,
morecat_lab 0:420d710da1c5 89 PinName d1,PinName d2, PinName d3, PinName d4,
morecat_lab 0:420d710da1c5 90 PinName d5, PinName d6);
morecat_lab 0:420d710da1c5 91
morecat_lab 0:420d710da1c5 92 /**
morecat_lab 0:420d710da1c5 93 * create an 8 digit sixteen segment driver
morecat_lab 0:420d710da1c5 94 *
morecat_lab 0:420d710da1c5 95 * @param PinName data (for 74HC959)
morecat_lab 0:420d710da1c5 96 * @param PinName clock (for 74HC959)
morecat_lab 0:420d710da1c5 97 * @param PinName latch (for 74HC959)
morecat_lab 0:420d710da1c5 98 * @param PinName dp Pin No for segment DP
morecat_lab 0:420d710da1c5 99 * @param PinName d1 Pin No for dight 1
morecat_lab 0:420d710da1c5 100 * @param PinName d2 Pin No for dight 2
morecat_lab 0:420d710da1c5 101 * @param PinName d3 Pin No for dight 3
morecat_lab 0:420d710da1c5 102 * @param PinName d4 Pin No for dight 4
morecat_lab 0:420d710da1c5 103 * @param PinName d5 Pin No for dight 5
morecat_lab 0:420d710da1c5 104 * @param PinName d6 Pin No for dight 6
morecat_lab 0:420d710da1c5 105 * @param PinName d7 Pin No for dight 7
morecat_lab 0:420d710da1c5 106 * @param PinName d8 Pin No for dight 8
morecat_lab 0:420d710da1c5 107 */
morecat_lab 0:420d710da1c5 108 Stnseg(PinName data, PinName clock, PinName latch, PinName dp,
morecat_lab 0:420d710da1c5 109 PinName d1,PinName d2, PinName d3, PinName d4,
morecat_lab 0:420d710da1c5 110 PinName d5,PinName d6, PinName d7, PinName d8);
morecat_lab 0:420d710da1c5 111
morecat_lab 0:420d710da1c5 112 /**
morecat_lab 0:420d710da1c5 113 * start driver
morecat_lab 0:420d710da1c5 114 */
morecat_lab 0:420d710da1c5 115 void begin(void);
morecat_lab 0:420d710da1c5 116
morecat_lab 0:420d710da1c5 117 /**
morecat_lab 0:420d710da1c5 118 * use Kathode Common LED
morecat_lab 0:420d710da1c5 119 */
morecat_lab 0:420d710da1c5 120 void setKcommon(void);
morecat_lab 0:420d710da1c5 121
morecat_lab 0:420d710da1c5 122 /**
morecat_lab 0:420d710da1c5 123 * use Anode Common LED (default)
morecat_lab 0:420d710da1c5 124 */
morecat_lab 0:420d710da1c5 125 void setAcommon(void);
morecat_lab 0:420d710da1c5 126
morecat_lab 0:420d710da1c5 127 /**
morecat_lab 0:420d710da1c5 128 * get a charcter pattern from a number
morecat_lab 0:420d710da1c5 129 *
morecat_lab 0:420d710da1c5 130 * @param i number
morecat_lab 0:420d710da1c5 131 *
morecat_lab 0:420d710da1c5 132 * @returns bit pattern of number i
morecat_lab 0:420d710da1c5 133 *
morecat_lab 0:420d710da1c5 134 */
morecat_lab 0:420d710da1c5 135 uint16_t segCh(char i);
morecat_lab 0:420d710da1c5 136
morecat_lab 0:420d710da1c5 137 /**
morecat_lab 0:420d710da1c5 138 * turn on DP
morecat_lab 0:420d710da1c5 139 *
morecat_lab 0:420d710da1c5 140 * @param d dight
morecat_lab 0:420d710da1c5 141 *
morecat_lab 0:420d710da1c5 142 */
morecat_lab 0:420d710da1c5 143 void setDot(int d);
morecat_lab 0:420d710da1c5 144
morecat_lab 0:420d710da1c5 145 /**
morecat_lab 0:420d710da1c5 146 * turn off DP
morecat_lab 0:420d710da1c5 147 *
morecat_lab 0:420d710da1c5 148 * @param d dight
morecat_lab 0:420d710da1c5 149 *
morecat_lab 0:420d710da1c5 150 */
morecat_lab 0:420d710da1c5 151 void clearDot(int d);
morecat_lab 0:420d710da1c5 152
morecat_lab 0:420d710da1c5 153 /**
morecat_lab 0:420d710da1c5 154 * write a number to LED
morecat_lab 0:420d710da1c5 155 *
morecat_lab 0:420d710da1c5 156 * @param d number
morecat_lab 0:420d710da1c5 157 *
morecat_lab 0:420d710da1c5 158 */
morecat_lab 0:420d710da1c5 159 void writeNum(int n);
morecat_lab 0:420d710da1c5 160
morecat_lab 0:420d710da1c5 161 /**
morecat_lab 0:420d710da1c5 162 * write a number to 4 dight LED
morecat_lab 0:420d710da1c5 163 *
morecat_lab 0:420d710da1c5 164 * @param n number
morecat_lab 0:420d710da1c5 165 *
morecat_lab 0:420d710da1c5 166 */
morecat_lab 0:420d710da1c5 167 void writeNum4(int n);
morecat_lab 0:420d710da1c5 168
morecat_lab 0:420d710da1c5 169 /**
morecat_lab 0:420d710da1c5 170 * write a number to 6 dight LED
morecat_lab 0:420d710da1c5 171 *
morecat_lab 0:420d710da1c5 172 * @param n number
morecat_lab 0:420d710da1c5 173 *
morecat_lab 0:420d710da1c5 174 */
morecat_lab 0:420d710da1c5 175 void writeNum6(int n);
morecat_lab 0:420d710da1c5 176
morecat_lab 0:420d710da1c5 177 /**
morecat_lab 0:420d710da1c5 178 * write a number to 8 dight LED
morecat_lab 0:420d710da1c5 179 *
morecat_lab 0:420d710da1c5 180 * @param n number
morecat_lab 0:420d710da1c5 181 *
morecat_lab 0:420d710da1c5 182 */
morecat_lab 0:420d710da1c5 183 void writeNum8(int n);
morecat_lab 0:420d710da1c5 184
morecat_lab 0:420d710da1c5 185 /**
morecat_lab 0:420d710da1c5 186 * write numbers to each dight of 2 dight LED
morecat_lab 0:420d710da1c5 187 *
morecat_lab 0:420d710da1c5 188 * @param d1 digit 1 number
morecat_lab 0:420d710da1c5 189 * @param d2 digit 2 number
morecat_lab 0:420d710da1c5 190 *
morecat_lab 0:420d710da1c5 191 */
morecat_lab 0:420d710da1c5 192 void writeNum(char d1, char d2);
morecat_lab 0:420d710da1c5 193
morecat_lab 0:420d710da1c5 194 /**
morecat_lab 0:420d710da1c5 195 * write numbers to each dight of 4 dight LED
morecat_lab 0:420d710da1c5 196 *
morecat_lab 0:420d710da1c5 197 * @param d1 digit 1 number
morecat_lab 0:420d710da1c5 198 * @param d2 digit 2 number
morecat_lab 0:420d710da1c5 199 * @param d3 digit 3 number
morecat_lab 0:420d710da1c5 200 * @param d4 digit 4 number
morecat_lab 0:420d710da1c5 201 *
morecat_lab 0:420d710da1c5 202 */
morecat_lab 0:420d710da1c5 203 void writeNum(char d1, char d2, char d3, char d4);
morecat_lab 0:420d710da1c5 204
morecat_lab 0:420d710da1c5 205 /**
morecat_lab 0:420d710da1c5 206 * write numbers to each dight of 8 dight LED
morecat_lab 0:420d710da1c5 207 *
morecat_lab 0:420d710da1c5 208 * @param d1 digit 1 number
morecat_lab 0:420d710da1c5 209 * @param d2 digit 2 number
morecat_lab 0:420d710da1c5 210 * @param d3 digit 3 number
morecat_lab 0:420d710da1c5 211 * @param d4 digit 4 number
morecat_lab 0:420d710da1c5 212 * @param d5 digit 5 number
morecat_lab 0:420d710da1c5 213 * @param d6 digit 6 number
morecat_lab 0:420d710da1c5 214 * @param d7 digit 7 number
morecat_lab 0:420d710da1c5 215 * @param d8 digit 8 number
morecat_lab 0:420d710da1c5 216 *
morecat_lab 0:420d710da1c5 217 */
morecat_lab 0:420d710da1c5 218 void writeNum(char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8);
morecat_lab 0:420d710da1c5 219
morecat_lab 0:420d710da1c5 220 /**
morecat_lab 0:420d710da1c5 221 * zero supress: tell driver not to display 0 in the left
morecat_lab 0:420d710da1c5 222 *
morecat_lab 0:420d710da1c5 223 */
morecat_lab 0:420d710da1c5 224 void supressZero();
morecat_lab 0:420d710da1c5 225
morecat_lab 0:420d710da1c5 226 /**
morecat_lab 0:420d710da1c5 227 * control zero supress bit
morecat_lab 0:420d710da1c5 228 *
morecat_lab 0:420d710da1c5 229 * @param t, 1:supress on, 0:supress off
morecat_lab 0:420d710da1c5 230 *
morecat_lab 0:420d710da1c5 231 */
morecat_lab 0:420d710da1c5 232 void setZeroSupress(bool t);
morecat_lab 0:420d710da1c5 233
morecat_lab 0:420d710da1c5 234 /**
morecat_lab 0:420d710da1c5 235 * write hex number to LED
morecat_lab 0:420d710da1c5 236 *
morecat_lab 0:420d710da1c5 237 * @param n (long)number
morecat_lab 0:420d710da1c5 238 *
morecat_lab 0:420d710da1c5 239 */
morecat_lab 0:420d710da1c5 240 void writeHex(long n);
morecat_lab 0:420d710da1c5 241
morecat_lab 0:420d710da1c5 242
morecat_lab 0:420d710da1c5 243 /**
morecat_lab 0:420d710da1c5 244 * write patterns to each dight of 4 dight LED
morecat_lab 0:420d710da1c5 245 *
morecat_lab 0:420d710da1c5 246 * @param d1 digit 1 pattern
morecat_lab 0:420d710da1c5 247 * @param d2 digit 2 pattern
morecat_lab 0:420d710da1c5 248 * @param d3 digit 3 pattern
morecat_lab 0:420d710da1c5 249 * @param d4 digit 4 pattern
morecat_lab 0:420d710da1c5 250 *
morecat_lab 0:420d710da1c5 251 */
morecat_lab 0:420d710da1c5 252 void writeRawData(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4);
morecat_lab 0:420d710da1c5 253
morecat_lab 0:420d710da1c5 254 /**
morecat_lab 0:420d710da1c5 255 * write patterns to each dight of 6 dight LED
morecat_lab 0:420d710da1c5 256 *
morecat_lab 0:420d710da1c5 257 * @param d1 digit 1 pattern
morecat_lab 0:420d710da1c5 258 * @param d2 digit 2 pattern
morecat_lab 0:420d710da1c5 259 * @param d3 digit 3 pattern
morecat_lab 0:420d710da1c5 260 * @param d4 digit 4 pattern
morecat_lab 0:420d710da1c5 261 * @param d5 digit 5 pattern
morecat_lab 0:420d710da1c5 262 * @param d6 digit 6 pattern
morecat_lab 0:420d710da1c5 263 *
morecat_lab 0:420d710da1c5 264 */
morecat_lab 0:420d710da1c5 265 void writeRawData(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6);
morecat_lab 0:420d710da1c5 266
morecat_lab 0:420d710da1c5 267 /**
morecat_lab 0:420d710da1c5 268 * write patterns to each dight of 8 dight LED
morecat_lab 0:420d710da1c5 269 *
morecat_lab 0:420d710da1c5 270 * @param d1 digit 1 pattern
morecat_lab 0:420d710da1c5 271 * @param d2 digit 2 pattern
morecat_lab 0:420d710da1c5 272 * @param d3 digit 3 pattern
morecat_lab 0:420d710da1c5 273 * @param d4 digit 4 pattern
morecat_lab 0:420d710da1c5 274 * @param d5 digit 5 pattern
morecat_lab 0:420d710da1c5 275 * @param d6 digit 6 pattern
morecat_lab 0:420d710da1c5 276 * @param d7 digit 7 pattern
morecat_lab 0:420d710da1c5 277 * @param d8 digit 8 pattern
morecat_lab 0:420d710da1c5 278 *
morecat_lab 0:420d710da1c5 279 */
morecat_lab 0:420d710da1c5 280 void writeRawData(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6, uint32_t d7, uint32_t d8);
morecat_lab 0:420d710da1c5 281
morecat_lab 0:420d710da1c5 282 /**
morecat_lab 0:420d710da1c5 283 * write patterns to a dight
morecat_lab 0:420d710da1c5 284 *
morecat_lab 0:420d710da1c5 285 * @param d digit
morecat_lab 0:420d710da1c5 286 *
morecat_lab 0:420d710da1c5 287 * @param value pattern
morecat_lab 0:420d710da1c5 288 *
morecat_lab 0:420d710da1c5 289 */
morecat_lab 0:420d710da1c5 290 void write(uint8_t d, uint32_t value);
morecat_lab 0:420d710da1c5 291
morecat_lab 0:420d710da1c5 292 /**
morecat_lab 0:420d710da1c5 293 * Clear LED buffer
morecat_lab 0:420d710da1c5 294 */
morecat_lab 0:420d710da1c5 295 void clear(void);
morecat_lab 0:420d710da1c5 296
morecat_lab 0:420d710da1c5 297 /**
morecat_lab 0:420d710da1c5 298 * Turn off LED
morecat_lab 0:420d710da1c5 299 */
morecat_lab 0:420d710da1c5 300 void turnOff(void);
morecat_lab 0:420d710da1c5 301
morecat_lab 0:420d710da1c5 302 /**
morecat_lab 0:420d710da1c5 303 * Turn on LED
morecat_lab 0:420d710da1c5 304 */
morecat_lab 0:420d710da1c5 305 void turnOn(void);
morecat_lab 0:420d710da1c5 306
morecat_lab 0:420d710da1c5 307 /**
morecat_lab 0:420d710da1c5 308 * Update One dight of LED
morecat_lab 0:420d710da1c5 309 */
morecat_lab 0:420d710da1c5 310 void updateSeg(void);
morecat_lab 0:420d710da1c5 311
morecat_lab 0:420d710da1c5 312 /**
morecat_lab 0:420d710da1c5 313 * keep updating LED for specified period
morecat_lab 0:420d710da1c5 314 *
morecat_lab 0:420d710da1c5 315 * @param ms period (ms)
morecat_lab 0:420d710da1c5 316 *
morecat_lab 0:420d710da1c5 317 */
morecat_lab 0:420d710da1c5 318 void updateWithDelay(int ms);
morecat_lab 0:420d710da1c5 319
morecat_lab 0:420d710da1c5 320 /**
morecat_lab 0:420d710da1c5 321 * Update LED Once with 1ms delay
morecat_lab 0:420d710da1c5 322 */
morecat_lab 0:420d710da1c5 323 void updateOnce(void);
morecat_lab 0:420d710da1c5 324 };
morecat_lab 0:420d710da1c5 325
morecat_lab 0:420d710da1c5 326 #endif // Stnseg.h