Bubble display example using NXP PCAL9555A GPIO expander

Dependencies:   mbed-dev

Fork of PCAL9555_Hello by InetrfaceProducts NXP

main.cpp

Committer:
MACRUM
Date:
2017-02-22
Revision:
4:0f3b252fb13f
Parent:
3:f74f521b2e46

File content as of revision 4:0f3b252fb13f:

#include "mbed.h"

#if defined(TARGET_LPC812)
I2C gpio_exp(P0_10, P0_11);
#elif defined(TARGET_LPC810)
I2C gpio_exp(dp2, dp3);
#else
I2C gpio_exp(SDA, SCL);
#endif

Ticker tick;
static int _seg;
static int _chrs[4];

const char dispTabl[] = {
    0x7E, // 0
    0x30, // 1
    0x6D, // 2
    0x79, // 3
    0x33, // 4
    0x5B, // 5
    0x5F, // 6
    0x70, // 7
    0x7F, // 8
    0x7B, // 9
};

void update()
{
    int port_0;
    int _data;

    _data = (dispTabl[_chrs[_seg]]);

    switch(_seg) {
        case 0:
            port_0 = 0x70;
            _seg = 1;
            break;
        case 1:
            port_0 = 0xb0;
            _seg = 2;
            break;
        case 2:
            port_0 = 0xd0;
            _seg = 3;
            break;
        case 3:
            port_0 = 0xe0;
            _seg = 0;
            break;
    }

    char buf[3];
    buf[0] = 2;      // OUTPUT
    buf[1] = port_0; // Port 0
    buf[2] = _data;  // Port 1
    gpio_exp.write(0x40, buf, 3);
}

void write_number(int num)
{
    num %= 10000;
    _chrs[0] = (num/1000);
    _chrs[1] = ((num/100)%10);
    _chrs[2] = (((num/10)%100)%10);
    _chrs[3] = (((num%1000)%100)%10);
}

int main()
{
    _seg = 0;

    char buf[3];
    buf[0] = 0x06; // CONFIG
    buf[1] = 0;    // output
    buf[2] = 0;    // output
    gpio_exp.write(0x40, buf, 3);
    wait(0.5);

    tick.attach(&update, 0.01); // 10 msec

    int cnt = 0;
    while(1) {
        write_number(cnt++);
        wait(0.1); // 100ms
    }
}

void error(const char* format, ...) {
}