0% found this document useful (0 votes)
14 views5 pages

3 chân điều khiển 74hc595

Uploaded by

nlanh.dhcd15a2hn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views5 pages

3 chân điều khiển 74hc595

Uploaded by

nlanh.dhcd15a2hn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

// 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);

level = at_max / 32;


if (level > 4) level = 3;
if (level > 0) digitalWrite(hang_pin[level - 1], LOW);
TurnOnAllLed();
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();
}

You might also like