Mục lục
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng màn hình phân đoạn 7 chữ số 3 với bảng Arduino UNO. Chúng ta sẽ sử dụng các hàm countUP () và countDown () để đếm từ 0 đến 'số' (biến) và từ 'số' đến 0. Chúng ta có thể thay đổi 'số' này với giá trị từ 0 đến 9999.
Kết nối rất dễ dàng:
Kết nối module 3 LED 7 đoạn với Arduino:
| Module LED 74HC595 | Arduino |
| VCC | VCC |
| GND | GND |
| SDI | D2 |
| CLK | D3 |
| LOAD | D4 |
Cài đặt thư viện
Trước khi sử dụng DS1307, bạn cần cài đặt thư viện ShiftRegister74HC595. Bạn có thể thực hiện điều này bằng cách mở Arduino IDE và điều hướng đến "Sketch" -> "Include Library" -> "Manage Libraries". Tìm kiếm "ShiftRegister74HC595" và cài đặt thư viện được tạo bởi Timo Denk.
Code:
#include <ShiftRegister74HC595.h>
// create a global shift register object
// parameters: <number of shift registers> (data pin, clock pin, latch pin)
ShiftRegister74HC595<8> sr(2, 3, 4);
long number = 99999; // <--- Change it from 0 to number
long value, digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8 ;
uint8_t numberB[] = {
B11000000, //0
B11111001, //1
B10100100, //2
B10110000, //3
B10011001, //4
B10010010, //5
B10000010, //6
B11111000, //7
B10000000, //8
B10011000 //9
};
void setup() {
//Count from 0 to 'number'
countAll_0_9();
delay(500);
countUp();
//Count from 'number' to 0
//countDown(); // <--- Comment countUp and uncomment countDown
//Blink 4 times all on and all off.
blink();
}
void loop() {
}
void countUp() {
for (int i = 0; i <= number; i++) {
//Split number to digits:
digit8 = (i / 10000000) % 10;
digit7 = (i / 1000000) % 10;
digit6 = (i / 100000) % 10 ;
digit5 = (i / 10000) % 10;
digit4 = (i / 1000) % 10 ;
digit3 = (i / 100) % 10;
digit2 = (i / 10) % 10 ;
digit1 = i % 10 ;
//Send them to 7 segment displays
uint8_t numberToPrint[] = {numberB[digit8], numberB[digit7],numberB[digit6], numberB[digit5], numberB[digit4],numberB[digit3], numberB[digit2], numberB[digit1]};//8led
// uint8_t numberToPrint[] = {numberB[digit4],numberB[digit3], numberB[digit2], numberB[digit1]};//4led
//uint8_t numberToPrint[] = {numberB[digit3], numberB[digit2], numberB[digit1]};//3led
//uint8_t numberToPrint[] = {numberB[digit2], numberB[digit1]};//2led
sr.setAll(numberToPrint);
//Reset them for next time
digit1 = 0;
digit2 = 0;
digit3 = 0;
delay(100); // Repeat every 100 ms
}
}
void countAll_0_9() {
for (int i=0; i<10; i++) {
digit1 = i % 10 ;
//Send them to 7 segment displays
uint8_t numberToPrint[] = {numberB[digit1], numberB[digit1], numberB[digit1],numberB[digit1], numberB[digit1], numberB[digit1], numberB[digit1], numberB[digit1]};//8led
//uint8_t numberToPrint[] = {numberB[digit1], numberB[digit1], numberB[digit1], numberB[digit1]};//4led
//uint8_t numberToPrint[] = {numberB[digit1], numberB[digit1], numberB[digit1]}//3led
//uint8_t numberToPrint[] = {numberB[digit1], numberB[digit1]}//2led
sr.setAll(numberToPrint);
//Reset them for next time
digit1 = 0;
delay(300); // Repeat every 1 sec
}
}
//Blink
void blink() {
for (int i = 0; i < 4; i++) {
sr.setAllLow(); // set all pins Low (off)
delay(1000);
sr.setAllHigh(); // set all pins High (on)
delay(1000);
}
}



