/*
Arduino code for Individual control over each pin
Support for 40+ 74HC595 8 bit shift registers
http://bildr.org/2011/02/74hc595/
*/
#define DATA_PIN 2 // Pin connected to DS of 74HC595
#define LATCH_PIN 42 // Pin connected to STCP of 74HC595
#define CLOCK_PIN 41 // Pin connected to SHCP of 74HC595
// How many of the shift registers
#define NUM_SHIFT_REGS 4
const uint8_t numOfRegisterPins = NUM_SHIFT_REGS * 8;
bool registers[numOfRegisterPins];
void setup() {
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
clearRegisters();
writeRegisters();
}
bool toggle = false;
void loop() {
// for (uint8_t i = 0; i < 32; i++) {
// setRegisterPin(i, HIGH);
// writeRegisters();
// delay(100);
// }
// for (uint8_t i = 0; i < 32; i++) {
// setRegisterPin(i, LOW);
// writeRegisters();
// delay(100);
// }
ChannelSelect(0,0);
delay(1000);
}
//piece,选择哪个选择器(每个选择器3位)
//channel,每个选择器组成的3位二进制
void ChannelSelect(int piece,int channel)
{
int a=channel /4;
int b=(channel%4)/2;
int c=(channel%2);
setRegisterPin(piece*3, c);
writeRegisters();
setRegisterPin(piece*3+1, b);
writeRegisters();
setRegisterPin(piece*3+2, a);
writeRegisters();
}
void clearRegisters() {
// Reset all register pins
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
registers[i] = LOW;
}
}
void setRegisterPin(int index, int value) {
// Set an individual pin HIGH or LOW
registers[index] = value;
}
void writeRegisters() {
// Set and display registers
digitalWrite(LATCH_PIN, LOW);
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
digitalWrite(CLOCK_PIN, LOW);
digitalWrite(DATA_PIN, registers[i]);
digitalWrite(CLOCK_PIN, HIGH);
}
digitalWrite(LATCH_PIN, HIGH);
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1