Giao tiếp mạch LED 7 đoạn 4 số TM1637 với Arduino

Giới thiệu

Mô-đun TM1637 là một giải pháp hiển thị hiệu quả và dễ dàng cho các ứng dụng Arduino. Nó thường được sử dụng trong các dự án đồng hồ, bảng hiển thị thời gian, bảng đếm, v.v. TM1637 kết hợp với Arduino mang lại tính linh hoạt cao nhờ giao diện giao tiếp đơn giản và hỗ trợ thư viện phong phú.

Tổng quan về phần cứng mô-đun TM1637

Mô-đun TM1637 kết hợp màn hình hiển thị 7 đoạn 4 chữ số 0,36 inch cổ điển và bộ điều khiển LED TM1637, cho phép bạn điều khiển tất cả các chữ số và dấu hai chấm chỉ bằng hai chân I/O.

Mô-đun TM1637 lý tưởng để hiển thị dữ liệu cảm biến hoặc nhiệt độ. Nó cũng bao gồm một "dấu hai chấm" để sử dụng trong các dự án liên quan đến đồng hồ và thời gian.

Chip TM1637 tích hợp chức năng quản lý hiển thị, điều khiển LED và giao tiếp với vi điều khiển qua giao thức hai dây (CLK và DIO), giúp giảm đáng kể số chân cần thiết khi kết nối với Arduino.

Một điểm cộng nữa là TM1637 có nhiều tính năng hữu ích, chẳng hạn như khả năng điều chỉnh độ sáng của màn hình và điều khiển từng phân đoạn độc lập.

Thông số kỹ thuật

  • Nguồn cung cấp: 3.3V - 5V.
  • Giao tiếp: 2 dây (CLK, DIO).
  • Hiển thị: 4 chữ số LED 7 đoạn.
  • Dòng tiêu thụ: Khoảng 80mA (tùy thuộc vào số LED đang sáng).
  • Cơ chế giao tiếp: Dựa trên giao thức hai dây.
  • Kích thước: Nhỏ gọn, phù hợp với các dự án có không gian hạn chế.

Để biết thêm thông tin về trình điều khiển TM1637, vui lòng tham khảo bảng dữ liệu bên dưới.

Sơ đồ chân (pinout)

Mô-đun TM1637 có 4 chân:

CLK là chân đầu vào xung nhịp.

DIO là chân I/O dữ liệu.

VCC là chân cấp nguồn. Kết nối nó với nguồn cấp 3,3V đến 5V.

GND là chân nối đất.

Kết nối với Arduino:

Kết nối TM1637 với Arduino rất dễ dàng. Chỉ có bốn dây để kết nối: hai dây cấp nguồn và hai dây để điều khiển màn hình.

Bắt đầu bằng cách kết nối chân VCC với đầu ra 5V của Arduino và chân GND với đất. Kết nối chân CLK và DIO với chân kỹ thuật số 2 và 3 của Arduino.

Sơ đồ bên dưới cho thấy cách kết nối mọi thứ.

  • VCC nối với 5V trên Arduino.
  • GND nối với GND trên Arduino.
  • CLK nối với một chân số (vd: D2).
  • DIO nối với một chân số khác (vd: D3).

Hướng dẫn lập trình

Thư viện cần thiết

Để làm việc với TM1637, bạn cần cài đặt thư viện TM1637Display. Bạn có thể tìm và cài đặt thư viện này qua Arduino IDE bằng cách:

 

  • Vào Tools > Manage Libraries....

 

  • Tìm kiếm "TM1637" của Avishay Opaz và cài đặt.

Mã Arduino cơ bản

Sau đây là một chương trình thử nghiệm đơn giản.

// Thêm thư viện
#include <TM1637Display.h>

// Định nghĩa các chân kết nối
#define CLK 3
#define DIO 4

// Tạo một đối tượng hiển thị thuộc loại TM1637Display
TM1637Display display = TM1637Display(CLK, DIO);

// Tạo một mảng bật tất cả các đoạn hiển thị
const uint8_t allON[] = {0xff, 0xff, 0xff, 0xff};

// Tạo một mảng tắt tất cả các đoạn hiển thị
const uint8_t allOFF[] = {0x00, 0x00, 0x00, 0x00};

// Tạo một mảng cài đặt các đoạn hiển thị riêng lẻ để hiển thị từ "dOnE"
const uint8_t done[] = {
  SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
  SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
  SEG_C | SEG_E | SEG_G,                           // n
  SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
};

// Tạo ký hiệu độ C
const uint8_t celsius[] = {
  SEG_A | SEG_B | SEG_F | SEG_G,  // Ký hiệu độ
  SEG_A | SEG_D | SEG_E | SEG_F   // C
};

void setup() {

}

void loop() {
	// Đặt độ sáng thành 5 (0=mờ nhất, 7=sáng nhất)
	display.setBrightness(5);

	// Bật tất cả các đoạn hiển thị
	display.setSegments(allON);

	delay(2000);
	display.clear();

	// Hiển thị đếm từ 0-9
	int i;
	for (i = 0; i < 10; i++) {
		display.showNumberDec(i);
		delay(50);
	}

	delay(2000);
	display.clear();

	display.showNumberDec(-12);			// Hiển thị _-12
	delay(2000);
	display.clear();
	
	display.showNumberDec(-999);		// Hiển thị -999
	delay(2000);
	display.clear();
	
	display.showNumberDec(31, false);	// Hiển thị __31
	delay(2000);
	display.clear();
	
	display.showNumberDec(31, true);	// Hiển thị 0031
	delay(2000);
	display.clear();
	
	display.showNumberDec(14, false, 2, 1);	// Hiển thị _14_
	delay(2000);
	display.clear();
	
	display.showNumberDec(-5, false, 3, 0);	// Hiển thị _-5_
	delay(2000);
	display.clear();

	// Hiển thị 12:34
	display.showNumberDecEx(1234, 0b11100000, false, 4, 0);

	delay(2000);
	display.clear();

	// Hiển thị 15°C
	int temperature = 15;
	display.showNumberDec(temperature, false, 2, 0);
	display.setSegments(celsius, 2, 2);

	delay(2000);
	display.clear();
	
	// Hiển thị dOnE
	display.setSegments(done);

	while(1);
}

Giải thích mã:

1. Khai báo và cấu hình:

#include <TM1637Display.h>
#define CLK 3
#define DIO 4
TM1637Display display = TM1637Display(CLK, DIO);
  • TM1637Display.h: Thư viện để giao tiếp với màn hình TM1637.
  • CLKDIO: Chân kết nối của màn hình với Arduino.
  • display: Đối tượng điều khiển màn hình.

2. Các mảng dữ liệu hiển thị:

const uint8_t allON[] = {0xff, 0xff, 0xff, 0xff};
const uint8_t allOFF[] = {0x00, 0x00, 0x00, 0x00};
  • allON: Bật tất cả các LED trên màn hình.
  • allOFF: Tắt tất cả các LED.
const uint8_t done[] = {
  SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
  SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
  SEG_C | SEG_E | SEG_G,                           // n
  SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
};
  • done: Hiển thị từ "dOnE" bằng cách xác định từng đoạn (segment) của mỗi ký tự.
const uint8_t celsius[] = {
  SEG_A | SEG_B | SEG_F | SEG_G,  // Biểu tượng độ
  SEG_A | SEG_D | SEG_E | SEG_F   // Ký tự 'C'
};
  • celsius: Biểu tượng "°C" (độ C).

3. Hàm setuploop:

3.1. Thiết lập độ sáng và bật tất cả các LED:

display.setBrightness(5);  // Độ sáng mức 5 (0-7)
display.setSegments(allON); // Bật tất cả LED
delay(2000);
display.clear();            // Xóa màn hình
  • Đặt độ sáng là 5 (giá trị từ 0 đến 7).
  • Bật tất cả các LED và tạm dừng 2 giây trước khi xóa màn hình.

3.2. Hiển thị số và các chế độ khác nhau:

  • Hiển thị số từ 0 đến 9:
for (i = 0; i < 10; i++) {
  display.showNumberDec(i);  // Hiển thị số thập phân
  delay(50);
}
  • Hiển thị số âm, định dạng số, hoặc số 0 đầu:
display.showNumberDec(-12);          // Hiển thị "-12"
display.showNumberDec(-999);         // Hiển thị "-999"
display.showNumberDec(31, false);   // Hiển thị "  31"
display.showNumberDec(31, true);    // Hiển thị "0031"
display.showNumberDec(14, false, 2, 1); // Hiển thị "_14_"
display.showNumberDec(-5, false, 3, 0); // Hiển thị "_-5_"
  • Các tham số:
    • false: Không thêm số 0 ở đầu.
    • 2: Số chữ số cần hiển thị.
    • 1: Vị trí bắt đầu (digit).

3.3. Hiển thị số với dấu ::

display.showNumberDecEx(1234, 0b11100000, false, 4, 0);
  • Hiển thị số "12:34", với dấu ":" nằm giữa các chữ số.

3.4. Hiển thị nhiệt độ:

int temperature = 15;
display.showNumberDec(temperature, false, 2, 0);
display.setSegments(celsius, 2, 2);
  • Hiển thị "15°C".

3.5. Hiển thị từ "dOnE":

display.setSegments(done);
while(1);
  • Hiển thị từ "dOnE" và dừng chương trình bằng while(1).

Các hàm sử dụng:

1. setBrightness(uint8_t brightness)

  • Công dụng: Đặt độ sáng cho màn hình TM1637.
  • Tham số:
    • brightness: Giá trị từ 0 (mờ nhất) đến 7 (sáng nhất).
  • Ví dụ:
    display.setBrightness(5);

2. setSegments(const uint8_t segments[], uint8_t length = 4, uint8_t pos = 0)

  • Công dụng: Hiển thị dữ liệu tùy chỉnh bằng cách điều khiển từng đoạn (segment) của màn hình.
  • Tham số:
    • segments[]: Mảng chứa dữ liệu cho từng đoạn.
    • length: Số ký tự cần hiển thị (mặc định là 4).
    • pos: Vị trí bắt đầu hiển thị (mặc định là 0).
  • Ví dụ:
    display.setSegments(allON); // Bật tất cả LED
    display.setSegments(done);  // Hiển thị từ "dOnE"

3. showNumberDec(int num, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0)

  • Công dụng: Hiển thị số nguyên dạng thập phân (decimal).
  • Tham số:
    • num: Số cần hiển thị (có thể là số âm).
    • leading_zero: Nếu true, hiển thị thêm số 0 ở đầu; nếu false, không hiển thị.
    • length: Số chữ số cần hiển thị (mặc định là 4).
    • pos: Vị trí bắt đầu hiển thị (mặc định là 0).
  • Ví dụ:
    display.showNumberDec(31, true);  // Hiển thị "0031"
    display.showNumberDec(-5, false, 3, 0); // Hiển thị "_-5_"

4. showNumberDecEx(int num, uint8_t dots, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0)

  • Công dụng: Hiển thị số nguyên và bật các dấu chấm (:) giữa các ký tự.
  • Tham số:
    • num: Số cần hiển thị.
    • dots: Định nghĩa vị trí bật chấm (bitmask). Ví dụ: 0b11100000 bật dấu :.
    • leading_zero: Nếu true, hiển thị thêm số 0 ở đầu.
    • length: Số chữ số cần hiển thị (mặc định là 4).
    • pos: Vị trí bắt đầu hiển thị (mặc định là 0).
  • Ví dụ:
    display.showNumberDecEx(1234, 0b11100000); // Hiển thị "12:34"

5. clear()

  • Công dụng: Xóa màn hình, tắt tất cả các LED.
  • Ví dụ:
    display.clear();

Mã nguồn mẫu

Dưới đây là đoạn mã mẫu để hiển thị số đếm từ 0 đến 9999:

#include <TM1637Display.h>

// Khai báo chân kết nối
#define CLK 2
#define DIO 3

// Khởi tạo đối tượng hiển thị
TM1637Display display(CLK, DIO);

void setup() {
  // Cài đặt độ sáng (0-7)
  display.setBrightness(5);
}

void loop() {
  for (int i = 0; i <= 9999; i++) {
    display.showNumberDec(i); // Hiển thị số
    delay(500); // Chờ 500ms
  }
}

Giải thích mã

  • TM1637Display display(CLK, DIO);: Tạo đối tượng điều khiển màn hình.
  • display.setBrightness(5);: Cài đặt độ sáng màn hình (giá trị từ 0 đến 7).
  • display.showNumberDec(i);: Hiển thị số dạng thập phân trên màn hình.

Ứng dụng thực tế

  1. Đồng hồ hiển thị thời gian thực:

    • Kết hợp TM1637 với module RTC như DS3231 để tạo đồng hồ hiển thị thời gian thực.
    • Hiển thị giờ, phút hoặc ngày tháng.
  2. Bộ đếm số:

    • Sử dụng màn hình để đếm số lượng hoặc đo lường dữ liệu.
    • Ví dụ: Đếm số người qua cửa.
  3. Hiển thị cảm biến:

    • Kết hợp với cảm biến như nhiệt độ, độ ẩm để hiển thị dữ liệu đọc được.
    • Ví dụ: Hiển thị nhiệt độ từ cảm biến LM35.
  4. Đồng hồ bấm giờ:

    • Thiết lập bộ đếm giờ lên hoặc giờ xuống cho các hoạt động cần theo dõi thời gian.

Với sự linh hoạt và dễ dàng trong lập trình, mô-đun TM1637 là một công cụ hữu ích để tạo ra các ứng dụng sáng tạo và hiệu quả. Hãy thử ngay trên dự án của bạn!

TM1637 ARDUINO DS3231
VCC 5V VCC
GND GND GND
CLK D2  
DIO D3  
  A5 SCL
  A4 SDA

Nhận xét

Mới hơn Cũ hơn