Fix to have load pin working with SPI1.

Dependencies:   mbed

Fork of Max7221 by Dwayne Dilbeck

Max7221.h

Committer:
ky3orr
Date:
2015-11-23
Revision:
7:a160cb7cdd86
Parent:
6:191569a26f50
Child:
8:3f5901f2f813

File content as of revision 7:a160cb7cdd86:

/**
* @file Max7221.h
* @brief Header file for the MAX7219/7221 driver class.
* 
* @author Grzegorz Kaczmarek
* @comment Code inspired on erlier Dwayne S. Dilbeck's work
* @date 20/11/2015
*/

#ifndef Max7221_H
#define Max7221_H

// MAX7219/7221 register map
#define max7219_reg_noop         0x00
#define max7219_reg_decodeMode   0x09
#define max7219_reg_intensity    0x0a
#define max7219_reg_scanLimit    0x0b
#define max7219_reg_shutdown     0x0c
#define max7219_reg_displayTest  0x0f

// Logical values
#define LOG_0 0
#define LOG_1 1

class Max7221 {
private:
   SPI *mp_spi;             // SPI used for this display (no data transmission when NULL)
   DigitalOut *mp_cs;       // CS signal (it should be handled manually when NULL)
   unsigned int m_position; // Display position on SPI chain (0 = 1'st)

public:
    /**
    *  Default constructor.
    *  @param spi       Initialized SPI port used for communication with MAX7219/7221.
    *  @param cs        Initialized output pin used as SW CS signal or NULL when HW one is used.
    *  @param position  Position on SPI port (for displays connected in daisy-chain: DOUT-DIN). 0=1st.
    */
    Max7221(SPI *spi, DigitalOut *cs, unsigned int position=0);

    /**
    *  Method for setting /CS signal LOW (enable data reception).
    */
    void CsLow(void);

    /**
    *  Method for setting /CS signal HIGH (received data is latched and processed).
    */
    void CsHigh(void);

    /**
    *  Method used to send data over SPI (no use of /CS signal).
    *  To be used with display chains and when building display libraries
    *  where amount of data needs to be pushed via SPI in one transaction.
    */
    void WriteRaw(unsigned int reg, unsigned int data);
   
    /**
    *  Method for sending register-value pair for this diasplay.
    *  Supports display chain on single SPI (m_position > 0).
    */
    void Write(unsigned int reg, unsigned int data);

    /**
    *  Sets test mode which causes all display LEDs to emit light with full brightess.
    *  @param mode  true - test mode, false - normal operation.
    */
    void TestMode(bool mode);
    
    /**
    *  Sets amount of digits to be used by this display.
    *  @param digits_no  1 - one digit, (2-7), 8 - all 8 digits.
    */
    void UseDigitsNo(unsigned int digits_no);

    /**
    *  Selects for which digits Code-B data decoding is used.
    *  @param mode  0x00 - no decoding, 0x0F - digits 0-3, 0xFF - all digits.
    */
    void DecodeMode(unsigned int mode);

    /**
    *  Sends data to selected digit.
    *  @param digit_no  Selected digit (0-7).
    *  @param digit_no  Data to display.
    */
    void WriteDigit(unsigned int digit_no, unsigned int value);

    /**
    *  Sets display brightness.
    *  @param intensity  0x00 - minimum brightness, 0x0F - maximum brightness.
    */
    void Intensity(unsigned int intensity);

    /**
    *  Sets display operation mode.
    *  @param mode  true - normal operation, false - shutdown mode.
    */
    void OperationMode(bool mode);
    
    /**
    *  Initial setup of this display.
    *  8-digit blank decimal display set to nimimal brightness.
    *  Supports display chain on single SPI (m_position > 0).
    */   
    void Setup(void);
};

#endif