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