3 chân điều khiển 74hc595
3 chân điều khiển 74hc595
#define LAT 8
#define CLK 9
#define DATA 6
#define H1 2
#define H2 3
#define H3 4
#define H4 5
#define AT A1
int hang_pin[4] = { 2, 3, 4, 5 };
byte led[16] = { 0x01, 0x02, 0x04, 0x08, 0x20, 0x10, 0x40, 0x80, 0x04, 0x08, 0x02, 0x01,
0x80, 0x40, 0x20, 0x10 };
int at, at_max;
int level;
int level_max = 0;
unsigned long dt;
int chip = 0;
void setup() {
pinMode(LAT, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(H1, OUTPUT);
pinMode(H2, OUTPUT);
pinMode(H3, OUTPUT);
pinMode(H4, OUTPUT);
digitalWrite(H1, HIGH);
digitalWrite(H2, HIGH);
digitalWrite(H3, HIGH);
digitalWrite(H4, HIGH);
TestLed();
dt = millis();
}
void loop() {
if(dt<millis()){
dt = millis()+5;
at = analogRead(AT);
}
at_max--;
if (at > at_max)
at_max = at;
TurnOn2x2Led();
level = at / 32;
for (int i = 0; i < 4; i++) {
if (level - 1 > i)
digitalWrite(hang_pin[i], LOW);
else digitalWrite(hang_pin[i], HIGH);
}
delay(5);
// if(dt<millis()){
// if (chip < 15)
// chip++;
// else chip = 0;
// dt = millis() + 100;
// }
// digitalWrite(hang_pin[0], LOW);
// digitalWrite(LAT, LOW);
// if (chip < 8) {
// shiftOut(DATA, CLK, MSBFIRST, ~led[chip]);
// shiftOut(DATA, CLK, MSBFIRST, 0xFF);
// } else {
// shiftOut(DATA, CLK, MSBFIRST, 0xFF);
// shiftOut(DATA, CLK, MSBFIRST, ~led[chip]);
// }
// digitalWrite(LAT, HIGH);
// delay(10);
// digitalWrite(hang_pin[0], HIGH);
}
void TurnOnAllLed() {
digitalWrite(LAT, LOW);
shiftOut(DATA, CLK, MSBFIRST, 0);
shiftOut(DATA, CLK, MSBFIRST, 0);
digitalWrite(LAT, HIGH);
}
void TurnOn2x2Led() {
digitalWrite(LAT, LOW);
shiftOut(DATA, CLK, MSBFIRST, ~0x50);
shiftOut(DATA, CLK, MSBFIRST, ~0x0A);
digitalWrite(LAT, HIGH);
}
void TurnOffAllLed() {
digitalWrite(LAT, LOW);
shiftOut(DATA, CLK, MSBFIRST, 0xFF);
shiftOut(DATA, CLK, MSBFIRST, 0xFF);
digitalWrite(LAT, HIGH);
}
void TurnOn1Led() {
digitalWrite(LAT, LOW);
shiftOut(DATA, CLK, MSBFIRST, 0xFF);
shiftOut(DATA, CLK, MSBFIRST, 0xFF);
digitalWrite(LAT, HIGH);
}
void TestLed() {
for (int j = 0; j < 4; j++) {
digitalWrite(hang_pin[j], LOW);
for (int i = 0; i < 16; i++) {
digitalWrite(LAT, LOW);
if (i < 8) {
shiftOut(DATA, CLK, MSBFIRST, ~led[i]);
shiftOut(DATA, CLK, MSBFIRST, 0xFF);
} else {
shiftOut(DATA, CLK, MSBFIRST, 0xFF);
shiftOut(DATA, CLK, MSBFIRST, ~led[i]);
}
digitalWrite(LAT, HIGH);
delay(50);
}
digitalWrite(hang_pin[j], HIGH);
}
for (int j = 0; j < 4; j++) {
digitalWrite(hang_pin[j], LOW);
TurnOnAllLed();
delay(50);
digitalWrite(hang_pin[j], HIGH);
}
for (int j = 3; j >= 0; j--) {
digitalWrite(hang_pin[j], LOW);
TurnOnAllLed();
delay(50);
digitalWrite(hang_pin[j], HIGH);
}
TurnOffAllLed();
}