Library to use 595 shift registers

ShiftRegister.h

Committer:
henryeherman
Date:
2013-10-30
Revision:
0:46b1b63c40e6

File content as of revision 0:46b1b63c40e6:

#include "mbed.h"
#ifndef SHIFTREGISTER_H
#define SHIFTREGISTER_H


class ShiftRegister {

public:

/*
* Constructor
*/
ShiftRegister(DigitalOut &clk, DigitalOut &dat, 
                DigitalOut &latch, DigitalOut &clr, 
                DigitalOut &oe);

/*
* Destructor
*/
~ShiftRegister();

/*
* Write Value
*/
template <typename T>
int write(T val, int bits);

void clear();

private:
DigitalOut &_clk;
DigitalOut &_dat;
DigitalOut &_latch;
DigitalOut &_clr;
DigitalOut &_oe;

}; // end class ShiftRegister


template <typename T>
int ShiftRegister::write(T val, int bits) {        
    T tmpval = ~0;
    int tmpsz = sizeof(val)*8;
    val = tmpval & val;  
    bits = tmpsz < bits ? tmpsz : bits;
    for(char i = 0; i < bits; i++) {
        _dat.write((val >> i) & 0x01);        
        _clk = 0;        
        _clk = 1;
    }
    _latch = 0; 
    _latch =1;
    return val;
}

#endif //ShiftRegister