/*
// Định nghĩa các chân kết nối LED 7 đoạn
#define a 0
#define b 2
#define c 4
#define d 16
#define e 17
#define f 18
#define g 19
#define DIG1 21
#define DIG2 22
// Bảng mã hiển thị số trên LED 7 đoạn (cathode chung)
const uint8_t numbers[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
// Danh sách chân điều khiển LED 7 đoạn
const int segmentPins[] = {a, b, c, d, e, f, g};
// Hàm hiển thị số trên LED 7 đoạn
void displayNumber(int num, int digit) {
// Tắt cả hai digit
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
// Chuyển số thành mã LED 7 đoạn
uint8_t pattern = numbers[num];
// Hiển thị số bằng cách bật/tắt các LED
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], (pattern >> i) & 1 ? HIGH : LOW);
}
// Bật chữ số cần hiển thị
digitalWrite(digit, LOW);
}
// Hàm quét LED liên tục
void displayTwoDigits(int number) {
int tens = number / 10;
int ones = number % 10;
displayNumber(tens, DIG1);
delay(5);
displayNumber(ones, DIG2);
delay(5);
}
void setup() {
// Khởi tạo các chân GPIO
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(DIG1, OUTPUT);
pinMode(DIG2, OUTPUT);
// Tắt các digit ban đầu
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
}
void loop() {
for (int i = 0; i < 100; i++) {
unsigned long startTime = millis();
while (millis() - startTime < 1000) {
displayTwoDigits(i);
}
}
}
*/
// Định nghĩa chân LED 7 đoạn
#define a 0
#define b 2
#define c 4
#define d 16
#define e 17
#define f 18
#define g 19
#define DIG1 21
#define DIG2 22
// Ma trận điều khiển LED 7 đoạn (Common Cathode)
byte matrix[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // Số 0
{0, 1, 1, 0, 0, 0, 0}, // Số 1
{1, 1, 0, 1, 1, 0, 1}, // Số 2
{1, 1, 1, 1, 0, 0, 1}, // Số 3
{0, 1, 1, 0, 0, 1, 1}, // Số 4
{1, 0, 1, 1, 0, 1, 1}, // Số 5
{1, 0, 1, 1, 1, 1, 1}, // Số 6
{1, 1, 1, 0, 0, 0, 0}, // Số 7
{1, 1, 1, 1, 1, 1, 1}, // Số 8
{1, 1, 1, 1, 0, 1, 1} // Số 9
};
// Danh sách chân điều khiển LED 7 đoạn
const int segmentPins[] = {a, b, c, d, e, f, g};
// Hàm hiển thị số lên LED 7 đoạn
void displayNumber(int num, int digit) {
// Tắt cả hai digit trước khi cập nhật số
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
// Kiểm tra số hợp lệ (0-9)
if (num < 0 || num > 9) return;
// Điều khiển các thanh LED
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], matrix[num][i] ? HIGH : LOW);
}
// Kích hoạt digit cần hiển thị
digitalWrite(digit, LOW);
}
// Hàm hiển thị số có 2 chữ số
void displayTwoDigits(int number) {
int tens = number / 10;
int ones = number % 10;
displayNumber(tens, DIG1);
delay(5);
displayNumber(ones, DIG2);
delay(5);
}
void setup() {
// Khởi tạo GPIO
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(DIG1, OUTPUT);
pinMode(DIG2, OUTPUT);
// Ban đầu tắt cả 2 digit
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
}
void loop() {
for (int i = 0; i < 100; i++) {
unsigned long startTime = millis();
while (millis() - startTime < 1000) {
displayTwoDigits(i);
}
}
}