7 Segment LED Displaydriver, I2C interface, SAA1064

Dependents:   812_hello

SAA1064.h

Committer:
wim
Date:
2013-09-08
Revision:
0:48adc4a70511
Child:
1:79cb73f852da

File content as of revision 0:48adc4a70511:

/* SAA1064 - I2C LED Driver used in multiplex mode (4x 7 Segments and Decimal Point)
 * Copyright (c) 2013 Wim Huiskamp
 *
 * Released under the MIT License: http://mbed.org/license/mit
 *
 * version 0.2 Initial Release
*/
#ifndef _SAA1064_H
#define _SAA1064_H

//Address Defines for SAA1064
#define SAA1064_SA0 0x70
#define SAA1064_SA1 0x72
#define SAA1064_SA2 0x74
#define SAA1064_SA3 0x76

//Register Defines for SAA1064
#define SAA1064_CTRL 0x00
#define SAA1064_DIG1 0x01
#define SAA1064_DIG2 0x02
#define SAA1064_DIG3 0x03
#define SAA1064_DIG4 0x04

//Control Register Defines for SAA1064
//Static display (2 digits) or Multiplexed (4 digits)
#define SAA1064_MPX  0x01
//Digits 1 and 2 On
#define SAA1064_B0   0x02
//Digits 3 and 4 On
#define SAA1064_B1   0x04
//Intensity of display
#define SAA1064_INT0 0x00
#define SAA1064_INT1 0x10
#define SAA1064_INT2 0x20
#define SAA1064_INT3 0x30
#define SAA1064_INT4 0x40
#define SAA1064_INT5 0x50
#define SAA1064_INT6 0x60
#define SAA1064_INT7 0x70

//Default Mode: Multiplex On, All Digits On
#define SAA1064_CTRL_DEF (SAA1064_MPX | SAA1064_B0 | SAA1064_B1)


//Pin Defines for SAA1064
#define D_L0                 0x01
#define D_L1                 0x02
#define D_L2                 0x04
#define D_L3                 0x08
#define D_L4                 0x10
#define D_L5                 0x20
#define D_L6                 0x40
#define D_L7                 0x80

//Defines for Segments
const char SAA1064_SEGM[] = {0x3F,  //0
                             0x06,  //1
                             0x5B,  //2
                             0x4F,  //3
                             0x66,  //4
                             0x6D,  //5
                             0x7D,  //6
                             0x07,  //7
                             0x7F,  //8
                             0x6F,  //9
                             0x77,  //A
                             0x7C,  //B
                             0x39,  //C
                             0x5E,  //D
                             0x79,  //E
                             0x71}; //F

#define SAA1064_DP           0x80   //Decimal Point
#define SAA1064_MINUS        0x40   //Minus Sign
#define SAA1064_BLNK         0x00   //Blank Digit
#define SAA1064_ALL          0xFF   //All Segments On
               

/** Create an SAA1064 object connected to the specified I2C object and using the specified deviceAddress
 *
 * @param I2C &i2c the I2C port to connect to 
 * @param char deviceAddress the address of the SAA1064
*/
class SAA1064 {
public:
  SAA1064(I2C *i2c, char deviceAddress = SAA1064_SA0);
  char read();
  void write(char byte);
    
  void setIntensity(unsigned char intensity);

  void write(unsigned char digit1, unsigned char digit2, unsigned char digit3, unsigned char digit4);        

  void writeInt(int value, unsigned char dp_digit=0, bool leading=true);

protected:
  I2C *_i2c;
  unsigned char _slaveAddress;    

  void _init(); 
};

#endif