Yoshitaka Kuwata / sseg

Dependents:   7segMbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Sseg.h Source File

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