Library to use 595 shift registers

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?

UserRevisionLine numberNew 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