-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIC74HC595.h
More file actions
64 lines (50 loc) · 1.63 KB
/
IC74HC595.h
File metadata and controls
64 lines (50 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#pragma once
/*
*/
template <class PinLoad, class PinData, class PinClock>
class IC74HC595
{
private:
PinLoad &PL;
PinData &DS;
PinClock &CP;
#define BITSPERBYTE 8
public:
// Constructor
IC74HC595(PinLoad &load, PinData &data, PinClock &clock)
: PL(load), DS(data), CP(clock)
{
}
void beginWrite()
{
PL.write(LOW);
}
void write(const uint8_t value)
{
uint8_t pinState;
for (uint8_t i = 0; i < BITSPERBYTE; i++)
{
CP.write(LOW);
pinState = (value & (1 << i));
DS.write(pinState);
//register shifts bits on upstroke of clock pin
CP.write(HIGH);
//zero the data pin after shift to prevent bleed through
DS.write(LOW);
}
CP.write(LOW);
}
void endWrite()
{
PL.write(HIGH);
}
};
#define CREATE_74HC595(Name, DigitalIO, LatchPin, DataPin, ClockPin, MaxChipCount) \
NativeDigitalIO<LatchPin, OUTPUT> latch##Name; \
NativeDigitalIO<DataPin, OUTPUT> data##Name; \
NativeDigitalIO<ClockPin, OUTPUT> clock##Name; \
IC74HC595<NativeDigitalIO<LatchPin, OUTPUT>, NativeDigitalIO<DataPin, OUTPUT>, NativeDigitalIO<ClockPin, OUTPUT>> chip##Name(latch##Name, data##Name, clock##Name); \
ShiftOut<IC74HC595<NativeDigitalIO<LatchPin, OUTPUT>, NativeDigitalIO<DataPin, OUTPUT>, NativeDigitalIO<ClockPin, OUTPUT>>, MaxChipCount> Name(chip##Name);
#include <NativeDigitalIO.h>
#define CREATE_NATIVE_74HC595(Name, LatchPin, DataPin, ClockPin, MaxChipCount) \
CREATE_74HC595(Name, NativeDigitalIO, LatchPin, DataPin, ClockPin, MaxChipCount);