shift register

Dependents:   Enrico_newproject

Revision:
0:7af9b977e6e9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Shifter.cpp	Wed Feb 21 19:37:59 2018 +0000
@@ -0,0 +1,55 @@
+// Include the standard types
+#include "Shifter.h"
+
+#define LOW 0
+#define HIGH 1
+DigitalOut SER_Pin(D4);
+DigitalOut RCLK_Pin(D3);
+DigitalOut SRCLK_Pin(D2);
+int Number_of_Registers=2;
+
+void Shifter::write()
+{
+//Set and display registers
+//Only call AFTER all values are set how you would like (slow otherwise)
+RCLK_Pin.write(LOW);
+  
+  //iterate through the registers
+  for(int i = Number_of_Registers - 1; i >=  0; i--)
+  {
+    //iterate through the bits in each registers
+    for(int j = 8 - 1; j >=  0; j--)
+    {
+      SRCLK_Pin.write(LOW);   
+      wait_us(1);
+      int val = shiftRegisters[i] & (1 << j);
+      SER_Pin.write(val);
+      wait_us(1);
+      SRCLK_Pin.write(HIGH);
+    }
+   
+  }
+  RCLK_Pin.write(HIGH);
+}
+    
+void Shifter::setPin(int index, bool val)
+{
+    int byteIndex = index/8;
+    int bitIndex = index % 8;
+    char current = shiftRegisters[byteIndex];
+    current &= ~(1 << bitIndex); //clear the bit
+    current |= val << bitIndex; //set the bit
+    shiftRegisters[byteIndex] = current; //set the value
+}
+
+void Shifter::setAll(bool val)
+{
+//set all register pins to LOW  
+  for(int i = Number_of_Registers * 8 - 1; i >=  0; i--){  setPin(i, val); }
+}
+
+void Shifter::clear()
+{
+//set all register pins to LOW  
+  for(int i = Number_of_Registers * 8 - 1; i >=  0; i--){ setPin(i, LOW); }
+}
\ No newline at end of file