Trong bài học này, tôi sẽ hướng dẫn các bạn cách điều khiển LED 7 đoạn với mạch điều khiển Arduino.
Trước khi vào lập trình, chúng ta hãy cùng đi vào tìm hiểu cấu trúc của LED 7 đoạn.
Thực ra cấu trúc của LED 7 đoạn gồm 8 LED đơn, nhìn lên hình trên chắc các bạn cũng thấy gồm có 7 đoạn và một dấu chấm nhỏ, mỗi đoạn và dấu chấm nhỏ đó là một LED đơn.
Với việc sử dụng LED 7 đoạn chúng ta có thể sử dụng để hiển thị các số, các chữ cái anphabet và nhiều kiểu ký tự khác nhau.
Như trên hình các bạn đã thấy, một LED 7 đoạn đơn gồm 10 chân đó là các chân: a, b, c, d, e, f, g, 2 chân chung và chân dấu chấm tròn.
LED 7 đoạn gồm 2 loại đó là dương chung và âm chung.
Trong bài học này chúng ta sẽ viết chương trình và tải vào Arduino để hiển thị các số từ 0-9.
Để thực hiện bài học này chúng ta cần chuẩn bị các linh kiện sau:
- 1 LED 7 đoạn loại cathode chung ( âm chung)
- 1 board Arduino ( ở đây tôi sử dụng Arduino Uno)
- 8 điện trở 270 Ohm
- Các dây nối
8 điện trở 270Ohm được gắn với 8 chân xuất tín hiệu của Arduino và kết nối với với 8 đoạn. Chúng có tác dụng giới hạn dòng qua mỗi LED, để không làm cháy LED.
Để hiểu được chương trình làm việc như thế nào đầu tiên chúng ta hãy xem làm sao để LED 7 đoạn hiển thị.
Để LED hiển thị chúng ta phải làm cho 8 LED đơn như ở trên hiển thị, ví dụ ở đây 8 LED ở đây là các led mang kí tự a, b, c, d, e, f, g và một dấu chấm ở chân cuối.
Bây giờ chúng ta thử suy nghĩ nếu chúng ta muốn hiển thị số 0 chúng ta phải làm thế nào?
Nhìn vào hình LED hiển thị ở đầu bài chúng ta thấy:
Để hiển thị số 0 thì chúng ta phải làm cho các LED đơn a, b, c, d, e, f phải sáng lên, dấu chấm và g phải tắt đi. Như vậy để tạo số 0 chúng ta phải thể hiện mã code hệ nhị phân (binary) là B111111100.
Tương tự đối với số 1 thì có những cái LED nào sáng?
Các bạn có thể viết được mã làm xuất hiện số 1 được không?
Đó là: B01100000.
Tương tự đối với các số 2. 3, 4, 5, 6, 7, 9.
Để dễ hiểu hơn tôi xin đưa ra một bảng sau để các bạn dò. Lưu ý: sáng là 1, tắt là 0.
Số thập phân
|
Số nhị phân
|
a
|
b
|
c
|
d
|
e
|
f
|
g
|
DP(demical point)
|
0
|
B11111100
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
0
|
1
|
B01100000
|
0
|
1
|
1
|
0
|
0
|
0
|
0
|
0
|
2
|
B11011010
|
1
|
1
|
0
|
1
|
1
|
0
|
1
|
0
|
3
|
B11110010
|
1
|
1
|
1
|
1
|
0
|
0
|
1
|
0
|
4
|
B01100110
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
0
|
5
|
B10110110
|
1
|
0
|
1
|
1
|
0
|
1
|
1
|
0
|
6
|
B10111110
|
1
|
0
|
1
|
1
|
1
|
1
|
1
|
0
|
7
|
B11100000
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
0
|
8
|
B11111110
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
9
|
B11100110
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
0
|
Bây giờ chúng ta đã biết những con số hiển thị như thế nào khi điều khiển LED. Công việc tiếp theo chúng ta cần làm là kết nối LED 7 đoạn với Arduino.
Hình trên hiển thị các chân của LED 7 đoạn loại Cathode chung ( âm chung ).
Sơ đồ nối dây
Cách kết nối các chân cũng rất đơn giản các bạn nhìn trên hình có thể tự làm được.
Bảng dưới đây thể hiện các chân kết nối
Chân LED 7 đoạn
|
Chân kết nối với
Arduino
|
a
|
2
|
b
|
3
|
c
|
4
|
d
|
5
|
e
|
6
|
f
|
7
|
g
|
8
|
DP
|
9
|
Công tiếp theo là viết Code
Code
// Khai báo chânconst int G = 8; // G= Arduino chân 8
const int F = 7; // F= Arduino chân 7
const int A = 2; // A = Arduino chân 2
const int B = 3; // B = Arduino chân 3
const int E = 6; // E = Arduino chân 6
const int D = 5; // D = Arduino chân 5
const int C = 4; // C = Arduino chân 4
const int dp = 9; // dp = Arduino chân 9
const int second = 1000; // thiết lập với mili giây, 1000 milliseconds = 1 second
const int digit = 10; // Số ký tự hiển thị
10 digits (0 - 9)
const int segment = 7; // Số thanh hiển thị trong LED (7)
// Định nghĩa những thanh( led đơn) sáng
byte digseg[digit][segment] = {
{ 1,1,1,1,1,1,0 }, // = 0
{ 0,1,1,0,0,0,0 }, // = 1
{ 1,1,0,1,1,0,1 }, // = 2
{ 1,1,1,1,0,0,1 }, // = 3
{ 0,1,1,0,0,1,1 }, // = 4
{ 1,0,1,1,0,1,1 }, // = 5
{ 1,0,1,1,1,1,1 }, // = 6
{ 1,1,1,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,1,0,1,1 } // = 9
};
void setup() {
// Định nghĩa chân xuất tín hiệu OUTPUT
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(dp, OUTPUT);
// Tắt dấu chấm
digitalWrite(dp, LOW);
}
// Loop through all 7 LED segments starting with pin 2
void writeDigit(byte digit)
{
byte pin = 2;
byte seg;
for (seg = 0; seg < 7; seg++)
{
digitalWrite(pin, digseg[digit][seg]);
pin++;
}
}
void loop()
{
byte digit;
for (digit=0; digit < 10; digit++)
{
writeDigit(digit);
delay(second);
}
delay(4*second);
}