I2C controlled 4 digit 7 segment LED display library
DisplayI2C.cpp@0:48b781bee6dc, 2014-02-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |