From 9f8ad3372382536275926cd95d5e5343235faf21 Mon Sep 17 00:00:00 2001 From: Michael Mandl Date: Sun, 19 Feb 2017 12:17:54 +0100 Subject: [PATCH] Added a 74HC595 shift register A abstract base class for 74HC595 shift registers without reset and output-enable functionality. --- ShiftRegister.cpp | 27 +++++++++++++++++++++++++++ ShiftRegister.h | 18 ++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 ShiftRegister.cpp create mode 100644 ShiftRegister.h diff --git a/ShiftRegister.cpp b/ShiftRegister.cpp new file mode 100644 index 0000000..2294df0 --- /dev/null +++ b/ShiftRegister.cpp @@ -0,0 +1,27 @@ +#include "ShiftRegister.h" + +void ShiftRegister::set(uint8_t value) +{ + for (uint8_t bit = 0; bit < 8; ++bit) + { + setSerialPin(value & (1 << (7 - bit))); + pulseShiftPin(); + } + + pulseStoragePin(); +} + +void ShiftRegister::pulseShiftPin() +{ + setShiftPin(false); + setShiftPin(true); + setShiftPin(false); +} + +void ShiftRegister::pulseStoragePin() +{ + setStoragePin(false); + setStoragePin(true); + setStoragePin(false); +} + diff --git a/ShiftRegister.h b/ShiftRegister.h new file mode 100644 index 0000000..f9a8e5f --- /dev/null +++ b/ShiftRegister.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +class ShiftRegister +{ + public: + void set(uint8_t value); + + private: + virtual void setSerialPin(bool value) = 0; + virtual void setShiftPin(bool value) = 0; + virtual void setStoragePin(bool value) = 0; + + void pulseShiftPin(); + void pulseStoragePin(); +}; +