Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Sseg.h
00001 /* 00002 SSeg.cpp - mbed library for 2/4/8 digit seven segment LED driver. 00003 Copyright 2013,2014,2015 by morecat_lab 00004 00005 based on Dots library. 00006 Copyright 2010 arms22. All right reserved. 00007 00008 This library is distributed in the hope that it will be useful, 00009 but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00011 */ 00012 00013 #ifndef SSEG_H 00014 #define SSEG_H 00015 00016 #include "mbed.h" 00017 #include <Timer.h> 00018 00019 #define NUM_PAT_0 0xfc 00020 #define NUM_PAT_1 0x60 00021 #define NUM_PAT_2 0xda 00022 #define NUM_PAT_3 0xf2 00023 #define NUM_PAT_4 0x66 00024 #define NUM_PAT_5 0xb6 00025 #define NUM_PAT_6 0xbe 00026 #define NUM_PAT_7 0xe0 00027 #define NUM_PAT_8 0xfe 00028 #define NUM_PAT_9 0xf6 00029 #define NUM_PAT_A 0xee 00030 #define NUM_PAT_B 0x3e 00031 #define NUM_PAT_C 0x9c 00032 #define NUM_PAT_D 0x7a 00033 #define NUM_PAT_E 0x9e 00034 #define NUM_PAT_F 0x8e 00035 00036 /** 00037 * Seven segment LED driver library 00038 */ 00039 class Sseg 00040 { 00041 private: 00042 unsigned long _lastUpdateTime; 00043 int _updateInterval; 00044 DigitalOut *_segPins[8]; // changed to use array 00045 DigitalOut *_digPins[8]; // changed to use array 00046 char _buffer[8]; 00047 int _numOfDigs; 00048 int _dig; // support 4 or 8 00049 bool _zeroSupress; 00050 bool _kcommon; // Cathode-common flag 00051 bool _sinkDriver; // invert segment drive, if true 00052 void initConv(void); 00053 Timer timer; 00054 public: 00055 static const int numConv[16]; 00056 /** 00057 * create an 2 digit seven segment driver 00058 * 00059 * @param PinName a Pin No for segment A 00060 * @param PinName b Pin No for segment B 00061 * @param PinName c Pin No for segment C 00062 * @param PinName d Pin No for segment D 00063 * @param PinName e Pin No for segment E 00064 * @param PinName f Pin No for segment F 00065 * @param PinName g Pin No for segment G 00066 * @param PinName dp Pin No for segment DP 00067 * @param PinName d1 Pin No for dight 1 00068 * @param PinName d2 Pin No for dight 2 00069 */ 00070 Sseg(PinName a,PinName b,PinName c,PinName d, 00071 PinName e,PinName f,PinName g,PinName dp, 00072 PinName d1,PinName d2); 00073 00074 /** 00075 * create an 4 digit seven segment driver 00076 * 00077 * @param PinName a Pin No for segment A 00078 * @param PinName b Pin No for segment B 00079 * @param PinName c Pin No for segment C 00080 * @param PinName d Pin No for segment D 00081 * @param PinName e Pin No for segment E 00082 * @param PinName f Pin No for segment F 00083 * @param PinName g Pin No for segment G 00084 * @param PinName dp Pin No for segment DP 00085 * @param PinName d1 Pin No for dight 1 00086 * @param PinName d2 Pin No for dight 2 00087 * @param PinName d3 Pin No for dight 3 00088 * @param PinName d4 Pin No for dight 4 00089 */ 00090 Sseg(PinName a,PinName b,PinName c,PinName d, 00091 PinName e,PinName f,PinName g,PinName dp, 00092 PinName d1,PinName d2, PinName d3, PinName d4); 00093 00094 /** 00095 * create an 8 digit seven segment driver 00096 * 00097 * @param PinName a Pin No for segment A 00098 * @param PinName b Pin No for segment B 00099 * @param PinName c Pin No for segment C 00100 * @param PinName d Pin No for segment D 00101 * @param PinName e Pin No for segment E 00102 * @param PinName f Pin No for segment F 00103 * @param PinName g Pin No for segment G 00104 * @param PinName dp Pin No for segment DP 00105 * @param PinName d1 Pin No for dight 1 00106 * @param PinName d2 Pin No for dight 2 00107 * @param PinName d3 Pin No for dight 3 00108 * @param PinName d4 Pin No for dight 4 00109 * @param PinName d5 Pin No for dight 5 00110 * @param PinName d6 Pin No for dight 6 00111 * @param PinName d7 Pin No for dight 7 00112 * @param PinName d8 Pin No for dight 8 00113 */ 00114 Sseg(PinName a,PinName b,PinName c,PinName d, 00115 PinName e,PinName f,PinName g,PinName dp, 00116 PinName d1,PinName d2, PinName d3, PinName d4, 00117 PinName d5,PinName d6, PinName d7, PinName d8); 00118 00119 /** 00120 * start driver 00121 */ 00122 void begin(void); 00123 00124 /** 00125 * use Kathode Common LED 00126 */ 00127 void setKcommon(void); 00128 00129 /** 00130 * use Anode Common LED (default) 00131 */ 00132 void setAcommon(void); 00133 00134 /** 00135 * sink driver 00136 */ 00137 void setSinkDriver(void); 00138 00139 /** 00140 * get a charcter pattern from a number 00141 * 00142 * @param i number 00143 * 00144 * @returns bit pattern of number i 00145 * 00146 */ 00147 char segCh(char i); 00148 00149 /** 00150 * turn on DP 00151 * 00152 * @param d dight 00153 * 00154 */ 00155 void setDot(int d); 00156 00157 /** 00158 * turn off DP 00159 * 00160 * @param d dight 00161 * 00162 */ 00163 void clearDot(int d); 00164 00165 /** 00166 * write a number to LED 00167 * 00168 * @param d number 00169 * 00170 */ 00171 void writeNum(int n); 00172 00173 /** 00174 * write a number to 2 dight LED 00175 * 00176 * @param n number 00177 * 00178 */ 00179 void writeNum2(int n); 00180 00181 /** 00182 * write a number to 4 dight LED 00183 * 00184 * @param n number 00185 * 00186 */ 00187 void writeNum4(int n); 00188 00189 /** 00190 * write a number to 8 dight LED 00191 * 00192 * @param n number 00193 * 00194 */ 00195 void writeNum8(int n); 00196 00197 /** 00198 * write numbers to each dight of 2 dight LED 00199 * 00200 * @param d1 digit 1 number 00201 * @param d2 digit 2 number 00202 * 00203 */ 00204 void writeNum(char d1, char d2); 00205 00206 /** 00207 * write numbers to each dight of 4 dight LED 00208 * 00209 * @param d1 digit 1 number 00210 * @param d2 digit 2 number 00211 * @param d3 digit 3 number 00212 * @param d4 digit 4 number 00213 * 00214 */ 00215 void writeNum(char d1, char d2, char d3, char d4); 00216 00217 /** 00218 * write numbers to each dight of 8 dight LED 00219 * 00220 * @param d1 digit 1 number 00221 * @param d2 digit 2 number 00222 * @param d3 digit 3 number 00223 * @param d4 digit 4 number 00224 * @param d5 digit 5 number 00225 * @param d6 digit 6 number 00226 * @param d7 digit 7 number 00227 * @param d8 digit 8 number 00228 * 00229 */ 00230 void writeNum(char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8); 00231 00232 /** 00233 * zero supress: tell driver not to display 0 in the left 00234 * 00235 */ 00236 void supressZero(); 00237 00238 /** 00239 * control zero supress bit 00240 * 00241 * @param t, 1:supress on, 0:supress off 00242 * 00243 */ 00244 void setZeroSupress(bool t); 00245 00246 /** 00247 * write hex number to LED 00248 * 00249 * @param n number 00250 * 00251 */ 00252 void writeHex(int n); 00253 00254 /** 00255 * write hex number to LED 00256 * 00257 * @param n (long)number 00258 * 00259 */ 00260 void writeHex(long n); 00261 00262 /** 00263 * write patterns to each dight of 2 dight LED 00264 * 00265 * @param d1 digit 1 pattern 00266 * @param d2 digit 2 pattern 00267 * 00268 */ 00269 void writeRawData(char d1, char d2); 00270 00271 /** 00272 * write patterns to each dight of 4 dight LED 00273 * 00274 * @param d1 digit 1 pattern 00275 * @param d2 digit 2 pattern 00276 * @param d3 digit 3 pattern 00277 * @param d4 digit 4 pattern 00278 * 00279 */ 00280 void writeRawData(char d1, char d2, char d3, char d4); 00281 00282 /** 00283 * write patterns to each dight of 8 dight LED 00284 * 00285 * @param d1 digit 1 pattern 00286 * @param d2 digit 2 pattern 00287 * @param d3 digit 3 pattern 00288 * @param d4 digit 4 pattern 00289 * @param d5 digit 5 pattern 00290 * @param d6 digit 6 pattern 00291 * @param d7 digit 7 pattern 00292 * @param d8 digit 8 pattern 00293 * 00294 */ 00295 void writeRawData(char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8); 00296 00297 void write(uint8_t x, uint8_t y, uint8_t value); 00298 00299 /** 00300 * write patterns to a dight 00301 * 00302 * @param d digit 00303 * 00304 * @param value pattern 00305 * 00306 */ 00307 void write(uint8_t d, uint8_t value); 00308 void write(uint8_t y, const uint8_t values[], uint8_t size); 00309 00310 /** 00311 * Clear LED buffer 00312 */ 00313 void clear(void); 00314 00315 /** 00316 * Turn off LED 00317 */ 00318 void turnOff(void); 00319 00320 /** 00321 * Turn on LED 00322 */ 00323 void turnOn(void); 00324 00325 /** 00326 * Update One dight of LED 00327 */ 00328 void updateSeg(void); 00329 00330 /** 00331 * Update LED (by internal clock) 00332 * 00333 * @returns sync = 1, if digit == 0 00334 * 00335 */ 00336 bool update(void); 00337 00338 /** 00339 * keep updating LED for specified period 00340 * 00341 * @param ms period (ms) 00342 * 00343 */ 00344 void updateWithDelay(int ms); 00345 00346 /** 00347 * Update LED Once with 1ms delay 00348 */ 00349 void updateOnce(void); 00350 }; 00351 00352 #endif // SSEG.h
Generated on Tue Jul 12 2022 21:22:26 by
1.7.2