//Bước 1: Khai báo
//khai báo các chân kết nối với Arduino
#define ledA 2
#define ledB 3
#define ledC 4
#define ledD 5
#define ledE 6
#define ledF 7
#define ledG 8
#define digit3 10 //hàng chục
#define digit4 11 //hàng đơn vị
#define digit2 12 //hàng tram
#define digit1 13 //hàng nghin
int time = 25; //thời gian delay
// Sử dụng mảng hai chiều để lưu trữ các giá trị của các chân LED cho mỗi số, đây là LED 7 đoạn Anode chung, đối với Cathode chung thì đổi 0 thành 1, 1 thành 0
byte numbers[10][7] =
{
{0, 0, 0, 0, 0, 0, 1}, // số 0
{1, 0, 0, 1, 1, 1, 1}, // số 1
{0, 0, 1, 0, 0, 1, 0}, // số 2
{0, 0, 0, 0, 1, 1, 0}, // số 3
{1, 0, 0, 1, 1, 0, 0}, // số 4
{0, 1, 0, 0, 1, 0, 0}, // số 5
{0, 1, 0, 0, 0, 0, 0}, // số 6
{0, 0, 0, 1, 1, 1, 1}, // số 7
{0, 0, 0, 0, 0, 0, 0}, // số 8
{0, 0, 0, 0, 1, 0, 0} // số 9
};
//Bước 2: Cấu hình các chân
void setup()
{
pinMode(ledA, OUTPUT);
pinMode(ledB, OUTPUT);
pinMode(ledC, OUTPUT);
pinMode(ledD, OUTPUT);
pinMode(ledE, OUTPUT);
pinMode(ledF, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(digit1 ,OUTPUT);
pinMode(digit2 ,OUTPUT);
pinMode(digit3 ,OUTPUT);
pinMode(digit4 ,OUTPUT);
}
//Bước 3: Tạo hàm hiển thị các số
void display(int i)
{
for (byte j = 0; j < 7; j++) {
digitalWrite(ledA + j , numbers[i][j]); // Sử dụng vòng lặp để ghi giá trị cho các chân LED
}
}
//Bước 3: Tạo hàm tắt các chân COM
void offdisplay()
{
digitalWrite(digit1 ,LOW);
digitalWrite(digit2 ,LOW);
digitalWrite(digit3 ,LOW);
digitalWrite(digit4 ,LOW);
}
//Bước 4: Vòng lặp
void loop()
{
unsigned long count = millis() / 1000; // Sử dụng hàm millis() để đo thời gian, /1000 nghĩa là hàm đơn vị tăng lên 1 số sau 1 giây
count = count % 10000; //giới hạn số từ 0000 đến 9999
byte n1 = (count / 1000) % 10; // Lấy chữ số hàng nghìn
byte n2 = (count / 100) % 10; // Lấy chữ số hàng trăm
byte n3 = (count / 10) % 10; // Lấy chữ số hàng chục
byte n4 = count % 10; // Lấy chữ số hàng đơn vị
offdisplay();//tắt toàn bộ led
display(n1);//hiển thị hàng nghìn
digitalWrite(digit1, HIGH);
delay(time);//quét led
offdisplay();//tắt toàn bộ led
display(n2); //hiển thị hàng trăm
digitalWrite(digit2, HIGH);
delay(time); //quét led
offdisplay();//tắt toàn bộ led
display(n3); //hiển thị hàng chục
digitalWrite(digit3, HIGH);
delay(time); //quét led
offdisplay();//tắt toàn bộ led
display(n4);//hiển thị hàng đơn vị
digitalWrite(digit4, HIGH);
delay(time);//quét led
offdisplay();//tắt toàn bộ led
}