simple library that can be used to write to a 595 shift register array

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?

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