Library to use 595 shift registers
Revision 0:46b1b63c40e6, committed 2013-10-30
- Comitter:
- henryeherman
- Date:
- Wed Oct 30 18:15:52 2013 +0000
- Commit message:
- Shift register for driving chip select lines on Elixys Synthesizer board
Changed in this revision
ShiftRegister.cpp | Show annotated file Show diff for this revision Revisions of this file |
ShiftRegister.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 46b1b63c40e6 ShiftRegister.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ShiftRegister.cpp Wed Oct 30 18:15:52 2013 +0000 @@ -0,0 +1,34 @@ +#include "mbed.h" +#include "ShiftRegister.h" + +using namespace mbed; + +ShiftRegister::ShiftRegister(DigitalOut &clk, DigitalOut &dat, + DigitalOut &latch, DigitalOut &clr, + DigitalOut &oe): _clk(clk), _dat(dat), + _latch(latch), _clr(clr), + _oe(oe) { + + _clk = 1; + _dat = 1; + _clr = 0; + _oe = 1; + _clr = 1; + _oe = 0; +} + +ShiftRegister::~ShiftRegister() { + // Nothing to do! + clear(); +} + + + +void ShiftRegister::clear() { + _clk = 1; + _dat = 1; + _clr = 0; + _oe = 1; + _clr = 1; + _oe = 0; +} \ No newline at end of file
diff -r 000000000000 -r 46b1b63c40e6 ShiftRegister.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ShiftRegister.h Wed Oct 30 18:15:52 2013 +0000 @@ -0,0 +1,56 @@ +#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 \ No newline at end of file