#include <SevSeg.h>
int digit_1 = 9;
int digit_2 = 10;
int digit_3 = 11;
int digit_4 = 12;
int a_pin = 2;
int b_pin = 3;
int c_pin = 4;
int d_pin = 5;
int e_pin = 6;
int f_pin = 7;
int g_pin = 8;
// 👇👇 "unsigned" là khai báo các số không âm, là luôn luôn >= 0
unsigned char led7Hex_CommonCathode[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
unsigned char led7Hex_CommonAnode[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
// digit_1_enable();
// disable_all_pin();
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(13, HIGH);
digitalWrite(digit_1, HIGH);
digitalWrite(digit_2, HIGH);
digitalWrite(digit_3, HIGH);
digitalWrite(digit_4, HIGH);
// START - COMMON ANODE 👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
commonAnode_show_1();
delay(1000);
commonAnode_show_1111();
delay(1000);
commonAnode_show_2();
delay(1000);
commonAnode_show_2222();
delay(1000);
// END - COMMON ANODE 👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
// START - COMMON CATHODE 👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
// commonCathode_show_1();
// delay(1000);
// commonCathode_show_1111();
// delay(1000);
// commonCathode_show_2();
// delay(1000);
// commonCathode_show_2222();
// delay(1000);
// END - COMMON CATHODE 👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
}
void commonAnode_show_1(){
digitalWrite(digit_1, LOW);
digitalWrite(digit_2, LOW);
digitalWrite(digit_3, LOW);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, LOW);
digitalWrite(c_pin, LOW);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, HIGH);
digitalWrite(g_pin, HIGH);
}
void commonAnode_show_1111(){
digitalWrite(digit_1, HIGH);
digitalWrite(digit_2, HIGH);
digitalWrite(digit_3, HIGH);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, LOW);
digitalWrite(c_pin, LOW);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, HIGH);
digitalWrite(g_pin, HIGH);
}
void commonAnode_show_2(){
digitalWrite(digit_1, LOW);
digitalWrite(digit_2, LOW);
digitalWrite(digit_3, LOW);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, LOW);
digitalWrite(b_pin, LOW);
digitalWrite(c_pin, HIGH); // H
digitalWrite(d_pin, LOW);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, HIGH); // H
digitalWrite(g_pin, LOW);
}
void commonAnode_show_2222(){
digitalWrite(digit_1, HIGH);
digitalWrite(digit_2, HIGH);
digitalWrite(digit_3, HIGH);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, LOW);
digitalWrite(b_pin, LOW);
digitalWrite(c_pin, HIGH); // H
digitalWrite(d_pin, LOW);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, HIGH); // H
digitalWrite(g_pin, LOW);
}
void commonCathode_show_1(){
digitalWrite(digit_1, LOW);
digitalWrite(digit_2, LOW);
digitalWrite(digit_3, LOW);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, LOW);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, LOW);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, LOW);
}
void commonCathode_show_1111(){
digitalWrite(digit_1, HIGH);
digitalWrite(digit_2, HIGH);
digitalWrite(digit_3, HIGH);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, LOW);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, HIGH);
digitalWrite(d_pin, LOW);
digitalWrite(e_pin, LOW);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, LOW);
}
void commonCathode_show_2(){
digitalWrite(digit_1, LOW);
digitalWrite(digit_2, LOW);
digitalWrite(digit_3, LOW);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, LOW);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, HIGH);
}
void commonCathode_show_2222(){
digitalWrite(digit_1, HIGH);
digitalWrite(digit_2, HIGH);
digitalWrite(digit_3, HIGH);
digitalWrite(digit_4, HIGH);
digitalWrite(a_pin, HIGH);
digitalWrite(b_pin, HIGH);
digitalWrite(c_pin, LOW);
digitalWrite(d_pin, HIGH);
digitalWrite(e_pin, HIGH);
digitalWrite(f_pin, LOW);
digitalWrite(g_pin, HIGH);
}
// NGUYÊN LÝ QUÉT LED
// Lý thuyết:
// Mắt người nhận được 24 khung hình / 1 giây
// Tương đương với 24Hz
// Như vậy, 1 khung hình sẽ chiếm: 1 giây/24 khung hình = 0.0416 second = 41.6 millisecond
// Mà ở đây ta có 4 Digit LED, như vậy trong 41.6ms thì 1 Digit LED sẽ hiển thị trong: 41.6 / 4 = 10.4 millisecond
// ............................................................................. làm tròn thành = 10 ms
// Cài đặt:
// Bước 1:
// Bật LED 1 => Xuất mã LED 1 => Tạo độ trễ khoảng 10ms => Tắt LED 1
// Bước 2:
// Bật LED 2 => Xuất mã LED 2 => Tạo độ trễ khoảng 10ms => Tắt LED 2
// Bước 3:
// Bật LED 3 => Xuất mã LED 3 => Tạo độ trễ khoảng 10ms => Tắt LED 3
// Bước 4:
// Bật LED 4 => Xuất mã LED 4 => Tạo độ trễ khoảng 10ms => Tắt LED 4
void scan_led(){
for(int number = 1234 ; number < 9999 ; number++){
for(int i = 0 ; i < 25 ; i++){
// Theo lý thuyết ta có 1 khung hình sẽ chiếm 41.6 ms, ta làm tròn thành 40 ms
// Như vậy số lượng khung hình trong 1 giây sẽ là: 1 second / 40 millisecond
// .............................................. = 1000 millisecond / 40 millisecond
// .............................................. = 25 khung hình
// link: https://www.youtube.com/watch?v=Khk_54_BZbE
// PROCESS LED 1 =======================================
// Bật hiển thị LED 1
digitalWrite(digit_1, HIGH);
// Xuất mã hiển thị
LED7_writeByte(led7Hex_CommonAnode[number/1000]);
// Tạo độ trễ 10MS
delay(10);
// Tắt hiển thị LED 1
digitalWrite(digit_1, LOW);
// PROCESS LED 2 =======================================
// Bật hiển thị LED 2
digitalWrite(digit_2, HIGH);
// Xuất mã hiển thị
LED7_writeByte(led7Hex_CommonAnode[number/100%10]);
// Tạo độ trễ 10MS
delay(10);
// Tắt hiển thị LED 2
digitalWrite(digit_2, LOW);
// PROCESS LED 3 =======================================
// Bật hiển thị LED 3
digitalWrite(digit_3, HIGH);
// Xuất mã hiển thị
LED7_writeByte(led7Hex_CommonAnode[number/10%10]);
// Tạo độ trễ 10MS
delay(10);
// Tắt hiển thị LED 3
digitalWrite(digit_3, LOW);
// PROCESS LED 4 =======================================
// Bật hiển thị LED 4
digitalWrite(digit_4, HIGH);
// Xuất mã hiển thị
LED7_writeByte(led7Hex_CommonAnode[number%10]);
// Tạo độ trễ 10MS
delay(10);
// Tắt hiển thị LED 4
digitalWrite(digit_4, LOW);
}
}
}
void LED7_writeByte(unsigned char b) {
// Lấy bit ở led A (là chân A của LED7) nếu bằng 1 => thì xuất mức cao (HIGH)
if (((b >> 0) & 0x01) == 1) {
digitalWrite(a_pin, HIGH);
}
else {
digitalWrite(a_pin, LOW);
}
// Lấy bit ở led B (là chân B của LED7) nếu bằng 1 => thì xuất mức cao (HIGH)
if (((b >> 1) & 0x01) == 1) {
digitalWrite(b_pin, HIGH);
}
else {
digitalWrite(b_pin, LOW);
}
// Lấy bit ở led C (là chân C của LED7) nếu bằng 1 => thì xuất mức cao (HIGH)
if (((b >> 2) & 0x01) == 1) {
digitalWrite(c_pin, HIGH);
}
else {
digitalWrite(c_pin, LOW);
}
// Lấy bit ở led D (là chân D của LED7) nếu bằng 1 => thì xuất mức cao (HIGH)
if (((b >> 3) & 0x01) == 1) {
digitalWrite(d_pin, HIGH);
}
else {
digitalWrite(d_pin, LOW);
}
// Lấy bit ở led E (là chân E của LED7) nếu bằng 1 => thì xuất mức cao (HIGH)
if (((b >> 4) & 0x01) == 1) {
digitalWrite(e_pin, HIGH);
}
else {
digitalWrite(e_pin, LOW);
}
// Lấy bit ở led F (là chân F của LED7) nếu bằng 1 => thì xuất mức cao (HIGH)
if (((b >> 5) & 0x01) == 1) {
digitalWrite(f_pin, HIGH);
}
else {
digitalWrite(f_pin, LOW);
}
// Lấy bit ở led G (là chân G của LED7) nếu bằng 1 => thì xuất mức cao (HIGH)
if (((b >> 6) & 0x01) == 1) {
digitalWrite(g_pin, HIGH);
}
else {
digitalWrite(g_pin, LOW);
}
}