I2C controlled 4 digit 7 segment LED display library

Committer:
patthoyts
Date:
Fri Feb 07 00:10:45 2014 +0000
Revision:
0:48b781bee6dc
Initial version of I2C display library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
patthoyts 0:48b781bee6dc 1 #include "DisplayI2C.h"
patthoyts 0:48b781bee6dc 2
patthoyts 0:48b781bee6dc 3 #define IOCON 0x0A
patthoyts 0:48b781bee6dc 4 #define IODIRA 0x00
patthoyts 0:48b781bee6dc 5 #define IODIRB 0x01
patthoyts 0:48b781bee6dc 6 #define GPIOA 0x12
patthoyts 0:48b781bee6dc 7 #define GPIOB 0x13
patthoyts 0:48b781bee6dc 8
patthoyts 0:48b781bee6dc 9 DisplayI2C::DisplayI2C(I2C& i2c, uint8_t address, uint8_t dp) :
patthoyts 0:48b781bee6dc 10 mI2C(i2c),
patthoyts 0:48b781bee6dc 11 mAddr(address),
patthoyts 0:48b781bee6dc 12 mDigit(0),
patthoyts 0:48b781bee6dc 13 mDP(dp)
patthoyts 0:48b781bee6dc 14 {
patthoyts 0:48b781bee6dc 15 mValue[0] = 0;
patthoyts 0:48b781bee6dc 16 mValue[1] = 0;
patthoyts 0:48b781bee6dc 17 mValue[2] = 0;
patthoyts 0:48b781bee6dc 18 mValue[3] = 0;
patthoyts 0:48b781bee6dc 19 mValue[4] = 0;
patthoyts 0:48b781bee6dc 20 }
patthoyts 0:48b781bee6dc 21
patthoyts 0:48b781bee6dc 22 void DisplayI2C::
patthoyts 0:48b781bee6dc 23 Setup()
patthoyts 0:48b781bee6dc 24 {
patthoyts 0:48b781bee6dc 25 char buffer[3];
patthoyts 0:48b781bee6dc 26 // Initialize the MCP device
patthoyts 0:48b781bee6dc 27 buffer[0] = IOCON; // IOCON.BANK = 0
patthoyts 0:48b781bee6dc 28 buffer[1] = 0;
patthoyts 0:48b781bee6dc 29 mI2C.write(mAddr, buffer, 2);
patthoyts 0:48b781bee6dc 30 buffer[0] = IODIRA;
patthoyts 0:48b781bee6dc 31 buffer[1] = 0; // port A as output
patthoyts 0:48b781bee6dc 32 buffer[2] = 0; // port B as output
patthoyts 0:48b781bee6dc 33 mI2C.write(mAddr, buffer, 3);
patthoyts 0:48b781bee6dc 34 }
patthoyts 0:48b781bee6dc 35
patthoyts 0:48b781bee6dc 36 void DisplayI2C::
patthoyts 0:48b781bee6dc 37 SetLEDs(uint8_t value)
patthoyts 0:48b781bee6dc 38 {
patthoyts 0:48b781bee6dc 39 char buf[3];
patthoyts 0:48b781bee6dc 40 uint8_t x;
patthoyts 0:48b781bee6dc 41 // reversed
patthoyts 0:48b781bee6dc 42 switch (value) {
patthoyts 0:48b781bee6dc 43 case 0: x = 0xfc; break;
patthoyts 0:48b781bee6dc 44 case 1: x = 0x60; break;
patthoyts 0:48b781bee6dc 45 case 2: x = 0xda; break;
patthoyts 0:48b781bee6dc 46 case 3: x = 0xf2; break;
patthoyts 0:48b781bee6dc 47 case 4: x = 0x66; break;
patthoyts 0:48b781bee6dc 48 case 5: x = 0xb6; break;
patthoyts 0:48b781bee6dc 49 case 6: x = 0xbe; break;
patthoyts 0:48b781bee6dc 50 case 7: x = 0xe0; break;
patthoyts 0:48b781bee6dc 51 case 8: x = 0xfe; break;
patthoyts 0:48b781bee6dc 52 case 9: x = 0xf6; break;
patthoyts 0:48b781bee6dc 53 default: x = 0x0; break;
patthoyts 0:48b781bee6dc 54 }
patthoyts 0:48b781bee6dc 55 if (mDigit == mDP && x != 0)
patthoyts 0:48b781bee6dc 56 x |= 0x01;
patthoyts 0:48b781bee6dc 57 buf[0] = GPIOA;
patthoyts 0:48b781bee6dc 58 buf[1] = (char)x;
patthoyts 0:48b781bee6dc 59 mI2C.write(mAddr, buf, 2);
patthoyts 0:48b781bee6dc 60 }
patthoyts 0:48b781bee6dc 61
patthoyts 0:48b781bee6dc 62 void DisplayI2C::
patthoyts 0:48b781bee6dc 63 SelectDigit(uint8_t digit)
patthoyts 0:48b781bee6dc 64 {
patthoyts 0:48b781bee6dc 65 char buf[2];
patthoyts 0:48b781bee6dc 66 buf[0] = GPIOB;
patthoyts 0:48b781bee6dc 67 buf[1] = digit;
patthoyts 0:48b781bee6dc 68 mI2C.write(mAddr, buf, 2);
patthoyts 0:48b781bee6dc 69 }
patthoyts 0:48b781bee6dc 70
patthoyts 0:48b781bee6dc 71 void DisplayI2C::
patthoyts 0:48b781bee6dc 72 Update()
patthoyts 0:48b781bee6dc 73 {
patthoyts 0:48b781bee6dc 74 SetLEDs(0xff); // set all leds off
patthoyts 0:48b781bee6dc 75 SelectDigit(1<<mDigit); // choose digit
patthoyts 0:48b781bee6dc 76 SetLEDs(mValue[mDigit] - 0x30); // select the digit led values
patthoyts 0:48b781bee6dc 77 mDigit = (mDigit + 1) % 4; // next digit
patthoyts 0:48b781bee6dc 78 }
patthoyts 0:48b781bee6dc 79
patthoyts 0:48b781bee6dc 80 void DisplayI2C::
patthoyts 0:48b781bee6dc 81 SetValue(int value)
patthoyts 0:48b781bee6dc 82 {
patthoyts 0:48b781bee6dc 83 mValue[3] = 0x30 + (value % 10);
patthoyts 0:48b781bee6dc 84 mValue[2] = 0x30 + ((value / 10) % 10);
patthoyts 0:48b781bee6dc 85 mValue[1] = 0x30 + ((value / 100) % 10);
patthoyts 0:48b781bee6dc 86 mValue[0] = 0x30 + ((value / 1000) % 10);
patthoyts 0:48b781bee6dc 87 }