7 Segment LED Displaydriver, I2C interface, SAA1064

Dependents:   812_hello

Revision:
0:48adc4a70511
Child:
1:79cb73f852da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SAA1064.h	Sun Sep 08 22:23:52 2013 +0000
@@ -0,0 +1,103 @@
+/* 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
\ No newline at end of file