Nội dung bài viết
Đăng ký học lập trình C++
Tại STDIO bạn được dạy nền tảng lập trình tốt nhất.
Đăng ký học
Bùi Nguyễn Minh Hoàng LED 7 đoạn hiện nay được sử dụng rộng rãi, cơ chế hoạt động của LED 7 đoạn khá đơn giản. Bài viết sau hướng dẫn các bạn thực hiện thể hiện con số bằng qua LED 7 đoạn bằng Arduino. Thông qua bài viết này, các bạn sẽ có khái niệm ban đầu về việc lập trình trong điện tử.

Giới thiệu

Bài viết giới thiệu đến bạn đọc nguyên lý hoạt động của LED 7 đoạn và viết ứng dụng thông qua Arduino để thể hiện các con số trên LED 7 đoạn.

Tiền đề bài viết

Được sự định hướng của tác giả La Kiến Vinh :: www.stdio.vn/users/index/1/la-kien-vinh cùng với sự chỉ dẫn của tác giả Brain Vu :: www.stdio.vn/users/index/3/brian-vu, tôi làm quen với điện tử thông qua mạch Arduino Uno.

Bài viết nằm trong chuyên mục Arduino, bạn đọc có thể tìm hiểu thêm các bài viết ở cùng chuyên mục tại STDIO :: Arduino.

Đối tượng hướng đến

Chương trình này hướng đến các bạn ĐANG LÀM QUEN với việc lập trình Arduino.

Chuẩn bị

  • 1 x LED 7 đoạn loại chung Anode
  • Breadboard
  • Dây cắm các loại
  • Arduino Uno R3 hoặc tương đương

Hiện thực

Trong điện tử như ở bài hiện thực LED chớp tắt trước, ta nhận thấy chúng ta chỉ quan tâm các giá trị cho chân đó là HIGH và LOW. Vậy để biểu diễn một thông tin ra ngoài chỉ có cách bật đèn LED mà thôi. Tuy nhiên chúng ta có thể sắp xếp thứ tự các đèn LED để thành ký tư.

Giới thiêu về LED 7 đoạn

ss_01

Hiện nay trên thị trường có bán các đèn LED 7 đoạn như thế này. Về cấu tạo, LED 7 đoạn thực chất là các đèn LED bình thường nhưng đã được lắp theo thứ tự và hình ảnh giống số 8. Về phương thức hoạt động tương tự như LED bình thường.

Mỗi đoạn tương ứng một đèn LED nên cũng có cực âm và cực dương. Tuy nhiên có 2 loại đèn LED:

  • Anode các chân LED có chung 1 chân cực dương.
  • Cathode các chân LED có chung 1 chân cực âm.

Thử nghiệm

Trước khi hiện thực, chúng ta thử kiểm tra sơ qua. Các bạn thử lắp đặt các linh kiện như sau:

Nối chân 5V vào các chân A của LED 7 đoạn nhưng thông qua 1 con trở, đây ta dùng trở 500. Nếu các bạn thắc mắc tại sao lại dùng trở 500 thì bạn có thể tham khảo qua bài viết Điện trở của tác giá Jacob Vo.

ss_02

 
Nguyên tắc hoạt động của LED 7 đoạn:

ss_03

Từ số 1 -> 7 tượng trưng cho chân cắm tương đương với vị trí các đèn led ở hình kế bên.

Dấu “.” tượng cho dấu chấm trên đèn LED

Chân “A” tượng trưng cho chân nguồn của đèn. Tùy vào đây là đèn LED gì mà chân A khác nhau:

  • Đèn LED Anode: chân “A” được nối vào VCC.
  • Đèn LED Cathode: chân “A” được nối vào GND.

Ở đây ta đang dùng đèn LED 7 đoạn Anode, để cho một trong các đèn LED của “đoạn” đó của LED 7 đoạn. Ta đơn giản nối chân của "đoạn" LED đó với GND. Ví dụ như ta đang muốn để đoạn số 1 của LED 7 đoạn sáng thì ta cắm vào chân số 1 như hình trên.

Kết quả bạn sẽ được như hình

ss_04

Lý do tại sao lại sử dụng đèn Anode:

Đó là vì đèn LED 7 đoạn cần nguồn nhỏ tức ~ < 3V, trong khi đó nguồn mà Arduino cung cấp là 5V. Vì thế ta cần hạ áp dòng trước khi đưa vào đèn, tuy nhiên nếu sử dụng đèn Cathode thì các bạn lại phải nối nguồn 5V cho từng chân đèn LED dẫn đến việc tốn nhiều điện trở. Nếu sử dụng Anode, ta chỉ cần sử dụng một điện trở để hạ nguồn cho toàn LED.

Cài đặt

Sau kết quả kiểm tra trên, ta thấy các đèn của 7 đoạn hoàn toàn hoạt động dựa trên nguyên lý tắt mở. Việc ta cần ở đây là cắm các chân theo một thứ tự để dễ kiểm soát.

Ở đây ta cắm các chân 1->7 của đèn theo thứ tự từ chân 3 -> chân 10 và tạm thời không sử dụng chân nối với LED thể hiện kí tự ".".

  • Để tắt một đoạn LED bất kì, ta đưa điện áp nối với chân đó lên HIGH.
  • Để mở một đoạn LED bất kì, ta hạ điện áp nối với chân đó về LOW. 

ss_05

Vậy ví dụ để bật đèn LED 7 đoạn hiển thị số 2, ta sẽ sử dụng đoạn code:

digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);

Tương tự như các chân còn lại, ta tổ chức code như sau:

void Print_7SEG(byte number);
void Clear();
void setup() {
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop() {
  for (int i = 0; i<10; i++)
  {
    Clear();
    Print_7SEG(i);
    delay(500);
  }
}
void Clear()
{
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
}
void Print_7SEG(byte number)
{
  switch (number)
  {
    case 0:
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(9, HIGH);
      break;
    case 1:
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, HIGH);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      break;
    case 2:
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
      digitalWrite(9, LOW);
      break;
    case 3:
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(9, LOW);
      break;
    case 4:
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, HIGH);
      digitalWrite(7, HIGH);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      break;
    case 5:
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      break;
    case 6:
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      break;
    case 7:
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, HIGH);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      break;
    case 8:
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      break;
    case 9:
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      break;
  }
}

Ta sử hàm Print_7SEG để in giá trị ra LED 7 đoạn, hàm Clear() để đưa tất cả các chân về trạng thái tắt. Trong loop() ta cho lặp từ 0->9 và lần lượt đưa các giá trị đó vào hàm Print_7SEG.

Kết quả:

Nạp code vào Arduino và chạy thử

ss_06

THẢO LUẬN
ĐÓNG