Library to use 595 shift registers
ShiftRegister.h@0:46b1b63c40e6, 2013-10-30 (annotated)
- Committer:
- henryeherman
- Date:
- Wed Oct 30 18:15:52 2013 +0000
- Revision:
- 0:46b1b63c40e6
Shift register for driving chip select lines on Elixys Synthesizer board
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
henryeherman | 0:46b1b63c40e6 | 1 | #include "mbed.h" |
henryeherman | 0:46b1b63c40e6 | 2 | #ifndef SHIFTREGISTER_H |
henryeherman | 0:46b1b63c40e6 | 3 | #define SHIFTREGISTER_H |
henryeherman | 0:46b1b63c40e6 | 4 | |
henryeherman | 0:46b1b63c40e6 | 5 | |
henryeherman | 0:46b1b63c40e6 | 6 | class ShiftRegister { |
henryeherman | 0:46b1b63c40e6 | 7 | |
henryeherman | 0:46b1b63c40e6 | 8 | public: |
henryeherman | 0:46b1b63c40e6 | 9 | |
henryeherman | 0:46b1b63c40e6 | 10 | /* |
henryeherman | 0:46b1b63c40e6 | 11 | * Constructor |
henryeherman | 0:46b1b63c40e6 | 12 | */ |
henryeherman | 0:46b1b63c40e6 | 13 | ShiftRegister(DigitalOut &clk, DigitalOut &dat, |
henryeherman | 0:46b1b63c40e6 | 14 | DigitalOut &latch, DigitalOut &clr, |
henryeherman | 0:46b1b63c40e6 | 15 | DigitalOut &oe); |
henryeherman | 0:46b1b63c40e6 | 16 | |
henryeherman | 0:46b1b63c40e6 | 17 | /* |
henryeherman | 0:46b1b63c40e6 | 18 | * Destructor |
henryeherman | 0:46b1b63c40e6 | 19 | */ |
henryeherman | 0:46b1b63c40e6 | 20 | ~ShiftRegister(); |
henryeherman | 0:46b1b63c40e6 | 21 | |
henryeherman | 0:46b1b63c40e6 | 22 | /* |
henryeherman | 0:46b1b63c40e6 | 23 | * Write Value |
henryeherman | 0:46b1b63c40e6 | 24 | */ |
henryeherman | 0:46b1b63c40e6 | 25 | template <typename T> |
henryeherman | 0:46b1b63c40e6 | 26 | int write(T val, int bits); |
henryeherman | 0:46b1b63c40e6 | 27 | |
henryeherman | 0:46b1b63c40e6 | 28 | void clear(); |
henryeherman | 0:46b1b63c40e6 | 29 | |
henryeherman | 0:46b1b63c40e6 | 30 | private: |
henryeherman | 0:46b1b63c40e6 | 31 | DigitalOut &_clk; |
henryeherman | 0:46b1b63c40e6 | 32 | DigitalOut &_dat; |
henryeherman | 0:46b1b63c40e6 | 33 | DigitalOut &_latch; |
henryeherman | 0:46b1b63c40e6 | 34 | DigitalOut &_clr; |
henryeherman | 0:46b1b63c40e6 | 35 | DigitalOut &_oe; |
henryeherman | 0:46b1b63c40e6 | 36 | |
henryeherman | 0:46b1b63c40e6 | 37 | }; // end class ShiftRegister |
henryeherman | 0:46b1b63c40e6 | 38 | |
henryeherman | 0:46b1b63c40e6 | 39 | |
henryeherman | 0:46b1b63c40e6 | 40 | template <typename T> |
henryeherman | 0:46b1b63c40e6 | 41 | int ShiftRegister::write(T val, int bits) { |
henryeherman | 0:46b1b63c40e6 | 42 | T tmpval = ~0; |
henryeherman | 0:46b1b63c40e6 | 43 | int tmpsz = sizeof(val)*8; |
henryeherman | 0:46b1b63c40e6 | 44 | val = tmpval & val; |
henryeherman | 0:46b1b63c40e6 | 45 | bits = tmpsz < bits ? tmpsz : bits; |
henryeherman | 0:46b1b63c40e6 | 46 | for(char i = 0; i < bits; i++) { |
henryeherman | 0:46b1b63c40e6 | 47 | _dat.write((val >> i) & 0x01); |
henryeherman | 0:46b1b63c40e6 | 48 | _clk = 0; |
henryeherman | 0:46b1b63c40e6 | 49 | _clk = 1; |
henryeherman | 0:46b1b63c40e6 | 50 | } |
henryeherman | 0:46b1b63c40e6 | 51 | _latch = 0; |
henryeherman | 0:46b1b63c40e6 | 52 | _latch =1; |
henryeherman | 0:46b1b63c40e6 | 53 | return val; |
henryeherman | 0:46b1b63c40e6 | 54 | } |
henryeherman | 0:46b1b63c40e6 | 55 | |
henryeherman | 0:46b1b63c40e6 | 56 | #endif //ShiftRegister |