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

Dependents:   7segMbed

Sseg.h

Committer:
morecat_lab
Date:
2013-10-20
Revision:
0:6bf4ee8ee342
Child:
1:12daa491059c

File content as of revision 0:6bf4ee8ee342:

/*
  SSeg.cpp - mbed library for 7seg 4digit/8digit LED matrix.
  Copyright 2013 morecat_lab
 
  base on Dots library.
  Copyright 2010 arms22. All right reserved.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
*/

#ifndef SSEG_H
#define SSEG_H

#include "mbed.h"
#include <Timer.h>

#define NUM_PAT_0 0xfc
#define NUM_PAT_1 0x60
#define NUM_PAT_2 0xda
#define NUM_PAT_3 0xf2
#define NUM_PAT_4 0x66
#define NUM_PAT_5 0xb6
#define NUM_PAT_6 0xbe
#define NUM_PAT_7 0xe0
#define NUM_PAT_8 0xfe
#define NUM_PAT_9 0xf6
#define NUM_PAT_A 0xee
#define NUM_PAT_B 0x3e
#define NUM_PAT_C 0x9c
#define NUM_PAT_D 0x7a
#define NUM_PAT_E 0x9e
#define NUM_PAT_F 0x8e

class Sseg
{
private:
    unsigned long _lastUpdateTime;
    int _updateInterval;
    BusOut _segPins;
    BusOut _digPins;
    char _buffer[8];
    int _numOfDigs;
    int _dig;       // support 4 or 8
    bool _zeroSupress;
    bool _kcommon;  // Cathode-common flag
    void initConv(void);
    Timer timer;
public:
    static const int numConv[16];
    // 2 digit
    Sseg(PinName a,PinName b,PinName c,PinName d,
         PinName e,PinName f,PinName g,PinName dp,
         PinName d1,PinName d2);

    // 4 digit
    Sseg(PinName a,PinName b,PinName c,PinName d,
         PinName e,PinName f,PinName g,PinName dp,
         PinName d1,PinName d2, PinName d3, PinName d4);

    // 8 digit
    Sseg(PinName a,PinName b,PinName c,PinName d,
         PinName e,PinName f,PinName g,PinName dp,
         PinName d1,PinName d2, PinName d3, PinName d4,
         PinName d5,PinName d6, PinName d7, PinName d8);
    
    void begin(void);
    void setKcommon(void);
    void setAcommon(void);
    char segCh(char i);
    void setDot(int d);
    void clearDot(int d);
    void writeNum(int n);
    void writeNum2(int n);
    void writeNum4(int n);
    void writeNum8(int n);
    void writeNum(char d1, char d2);
    void writeNum(char d1, char d2, char d3, char d4);
    void writeNum(char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8);
    void supressZero();
    void setZeroSupress(bool t);
    void writeHex(int n);
    void writeHex(long n);
    void writeRawData(char d1, char d2);
    void writeRawData(char d1, char d2, char d3, char d4);
    void writeRawData(char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8);
    void write(uint8_t x, uint8_t y, uint8_t value);
    void write(uint8_t y, uint8_t value);
    void write(uint8_t y, const uint8_t values[], uint8_t size);
    void clear(void);
    void turnOff(void);
    void turnOn(void);
    void updateSeg(void);
    bool update(void);
    void updateWithDelay(int ms);
    void updateOnce(void);
};

#endif  // SSEG.h