Matthew Edwards

Writing a Driver for 7 Segment Displays



#ifndef __MAXIM_FLOAT_DISPLAY_H__
#define __MAXIM_FLOAT_DISPLAY_H__

#include 


#define MAXIM_MAX_BITRATE       10000000

#define MAXIM_DIGIT             0x01
#define MAXIM_MODE              0x09
#define MAXIM_INTENSITY         0x0A
#define MAXIM_SCAN_LIMIT        0x0B
#define MAXIM_SHUTDOWN          0x0C
#define MAXIM_TEST              0x0F

#define MAXIM_PWR_OFF           0x00
#define MAXIM_PWR_ON            0x01

#define MAXIM_MODE_NO_DECODE    0x00

class MaximFloatDisplay {
  public:
    MaximFloatDisplay(int selectPin) :
        selectPin(selectPin),
        settings(SPISettings(MAXIM_MAX_BITRATE, MSBFIRST, SPI_MODE0)) {}

    // Start SPI and initialize the display.
    void begin() {
        pinMode(this->selectPin, OUTPUT);

        SPI.begin();

        init();
    }

    // Shutdown the display and end SPI.
    void end() {
        writeRaw(MAXIM_SHUTDOWN, MAXIM_PWR_OFF);
        SPI.end();
    }

    void write(const char *str) {
        int i = 0;
        for (; i < 8; ++i) {
            if (!str || str[i] == 0) {
                break;
            }
            writeLetter(i, str[i]);
        }
        for (; i = 0.0 && val <= 9999.0) {
            uint8_t digits[4] = { 0, 0, 0, 0 };
            int decimalPlace = -1;
            int index = 0;

            for (int i = 0; i  0) {
                    if (decimalPlace < 0) {
                        decimalPlace = max(3 - i, 0);
                        for (int j = 0; j = 4) {
                        break;
                    }
                }
                val *= 10;
            }

            if (decimalPlace == -1) {
                decimalPlace = 0;
            }

            for (int i = 0; i < 4; ++i) {
                uint8_t c = nums[digits[i]];
                if (decimalPlace == i) {
                    c |= dp;
                }
                writeRawDigit(slot == 1 ? 4 + i : i, c);
            }
        } else {
            for (int i = 0; i = 'a' && c = '0' && c selectPin, LOW);
        delayMicroseconds(1);

        SPI.transfer(addr);
        SPI.transfer(data);

        digitalWrite(this->selectPin, HIGH);
        delayMicroseconds(1);
        SPI.endTransaction();
    }
};

#undef SPI_BAUD

#endif // __MAXIM_FLOAT_DISPLAY_H__