Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Nếu bạn là học viên mời bạn tham gia Nhóm hỗ trợ giải đáp của các khóa tại: https://www.facebook.com/groups/altium.designer.vietnam

Mô tả

Màn hình LCD TFT 1.44 inch ST7735 giao tiếp SPI có kích thước nhỏ gọn thường được sử dụng để thay thế cho loại màn hình Nokia 5110 đã quá cũ và kém ổn định trên thị trường hiện nay, màn hình có độ phân giải 128×128 pixels với khả năng hiển thị lên đến 65K màu. Màn hình LCD TFT 1.44 inch ST7735 giao tiếp SPI còn được tích hợp IC chuyển nguồn và IC đệm giúp giao tiếp và cấp nguồn ở hai mức điện áp 3.3VDC và 5VDC 1 cách linh hoạt, 1 điểm đặc biệt nữa của màn hình này là có sơ đồ chân tương thích để có thể cắm trực tiếp với Arduino mà không cần thêm dây bus.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Thông số kỹ thuật

  • Điện áp sử dụng: 3.3~5VDC
  • Điện áp giao tiếp: TTL 3.3~5VDC
  • IC Driver hiển thị: ST7735 giao tiếp SPI.
  • Cỡ màn hình: 1.44 inch
  • Độ phân giải: 128 x 128 pixels
  • Có thể gắn trực tiếp với Arduino mà không cần nối qua dây Bus.

Cài đặt thư viện Adafruit ST7735 TFT

Từ Arduino “Sketch” menu, lựa chọn “Include Library” sau đó đến “Manage Libraries…”

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Tìm và cài đặt Adafruit GFX library

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Tiếp tục với Adafruit ST7735 library

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Bắt đầu với ví dụ mẫu

  • Hướng dẫn lập trình cho lcd tft stm32 năm 2024
  • Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Bắt đầu nào, bạn có thể lấy chương trình mẫu tại thư viện đã cài đặt ở trên

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Hoặc bạn có thể lấy file đã test chạy tại đây

Chú ý định nghĩa lại các chân sau:

define TFT_LED A0// TFT_BACKLIGHT

define TFT_SCLK A1//13 // Clock out

define TFT_MOSI A2//11 // Data out

define TFT_DC A3//8

define TFT_RST A4//9 // Or set to -1 and connect to Arduino RESET pin

define TFT_CS A5//10

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
Bật đèn màn hình nền lên pinMode(TFT_LED, OUTPUT); digitalWrite(TFT_LED, HIGH);

Thực hiện một bài tập nhỏ như sau

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Bạn có thể tải file đã chạy tại đây

Bạn có thể định nghĩa lại màu cho đúng với LCD của bạn, ví dụ như

define MY_WHITE ST77XX_WHITE

define MY_RED ST77XX_BLUE

define MY_SKY ST77XX_YELLOW

define MY_GREEN ST77XX_GREEN

define MY_PINK ST77XX_MAGENTA

define MY_PLUE ST77XX_RED

Thiết lập màn hình nền màu trắng tft.setTextWrap(false); tft.fillScreen(MY_WHITE);
In chữ Hello màu đỏ ra màn hình tọa độ x=10, y=5 tft.setCursor(10, 5); tft.setTextColor(MY_RED); tft.setTextSize(1); tft.println(“Hello”);

Chúc các bạn thành công nhé!

LCD1602 được sử dụng rất nhiều trong lập trình, tuy rằng nó ít được sử dụng trong các sản phẩm thương mại thế nhưng để làm quen về LCD thì sử dụng LCD1602 rất phù hợp.

Trong bài này chúng ta sẽ học các sử dụng STM32 điều khiển LCD1602 chế độ 8bit và 4bit.

Bài viết nằm trong Serie Lập trình STM32 từ A tới Z

Mục Lục

Tổng quan về LCD1602

LCD là gì?

LCD là một loại vật chất phản xạ ánh sáng khi điện thế thay đổi. Nó hoạt động dựa trên nguyên tắc ánh sáng nền (Back Light). Nó bao gồm một lớp chất lỏng nằm giữa 2 lớp kính phân cực ánh sáng. Bình thường, khi không có điện áp, các tinh thể này được xếp thẳng hàng giữa hai lớp cho phép ánh sáng truyền qua theo hình xoắn ốc. Hai bộ lọc phân cực, 2 bộ lọc màu và 2 bộ cân chỉnh sẽ xác định cường độ ánh sáng đi qua và màu nào được tạo ra trên một pixel.

Khi có điện áp cấp vào, lớp canh chỉnh sẽ tạo một vùng điện tích, canh chỉnh lại các tinh thể lỏng đó. Nó không cho phép ánh sáng đi qua để hiện thị lên hình ảnh tại vị trí điểm ảnh đó. Các điểm ảnh trong màn hình LCD là một transistor cực nhỏ ở một trong 2 chế độ: cho phép ánh sáng đi qua hoặc không.

Điểm ảnh bao gồm 3 yếu tố màu: đỏ, xanh lá, xanh dương. Các màn hình LCD trước đây thường tiêu thụ điện năng nhiều, độ tương phản thấp cho đến khi các nhà khoa học người Anh tìm ra “Biphenyl” – vật liệu chính của tinh thể lỏng, thì LCD mới thực sự phổ biến. LCD xuất hiện đầu tiên trong các máy tính cầm tay, trò chơi điện tử cầm tay, đồng hồ điện tử,…

Theo Wikimedia

LCD1602 overview

  • Điện áp hoạt động là 5 V.
  • Kích thước: 80 x 36 x 12.5 mm
  • Chữ đen, nền xanh lá
  • Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với Breadboard.
  • Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây điện.
  • Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít điện năng hơn.
  • Có thể được điều khiển với 6 dây tín hiệu

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Sơ đồ chân – Pin Out

  1. VSS: tương đương với GND – cực âm
  2. VDD: tương đương với VCC – cực dương (5V)
  3. Constrast Voltage (Vo): điều khiển độ sáng màn hình
  4. Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu
  5. Read/Write (RW): Bạn sẽ đọc (read mode) hay ghi (write mode) dữ liệu? Nó sẽ phụ thuộc vào bạn gửi giá trị gì vào.
  6. Enable pin: Cho phép ghi vào LCD
  7. D0 – D7: 8 chân dư liệu, mỗi chân sẽ có giá trị HIGH hoặc LOW nếu bạn đang ở chế độ đọc (read mode) và nó sẽ nhận giá trị HIGH hoặc LOW nếu đang ở chế độ ghi (write mode)
  8. Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình LCD.

Cấu tạo và cách hoạt động của LCD1602

Tham khảo datasheet: https://cdn-shop.adafruit.com/datasheets/TC1602A-01T.pdf

Màn hình LCD1602 cấu tạo từ 3 phần:

  • Chip driver: Điều khiển LCD, giao tiếp với vi điều khiển theo interface LCD
  • LCD Panel: Hiển thị ra bên ngoài
  • Back Light: Đèn nền LCD
    Hướng dẫn lập trình cho lcd tft stm32 năm 2024
    Sơ đồ khối LCD1602

DISPLAY DATA RAM (DD RAM): Bộ nhớ hiển thị dữ liệu

Điều khiển LCD1602 chính là thay đổi giá trị của DD RAM, mỗi ô trên DD RAM tương ứng với một vị trí của màn hình.

Với LCD1602 chúng có 2 line

  • Line 1: từ 0x80 tới 0x8F
  • Line 2: từ 0xC0 tới 0xCF

Ví dụ: Nếu bạn muốn hiển thị ở Line 1 ô đầu tiên, Chúng ta sẽ thay đổi giá trị của ô nhớ địa chỉ 0x80. Giá trị được ghi sẽ so sánh với bảng mã trong CG ROM, từ đó hiển thị ra đúng kí tự được lưu trên đó.

Lệnh để nhảy giữa các ô nhớ là Set cursor ( con trỏ)

Character Generator ROM (CG ROM): Bộ nhớ kí tự chỉ đọc

Đây là bộ nhớ đươc ghi sẵn của LCD, trong đó chứa các kí tự mà lcd hỗ trợ. Có hai mẫu Character mà LCD1602 hỗ trợ đó là 5×8 và 5×10

Character Generator RAM (CG RAM): Bộ nhớ kí tự có thể lập trình

Đây là bộ nhớ để người sử dụng có thể tự tạo ra các font chữ riêng trên LCD của mình.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024
Sơ đồ Display RAM LCD1602

Cách đọc và ghi vào LCD1602

Quy trình ghi vào LCD1602 như sau:

  1. Chân RS kéo xuống 0 nếu gửi Lệnh (Command) điều khiển LCD, lên 1 gửi data (ghi vào DD RAM)
  2. Chân R/W: Kéo xuống 0 ghi dữ liệu
  3. Các chân D0 – D7: Khi ghi dữ liệu, các chân D0-D7 của LCD sẽ ở chế độ Input, chân MCU kết nối vào sẽ ở chế độ OutPut
  4. Chân EN sẽ được kéo lên 1 để chốt dữ liệu vào LCD, sau đó lại nhả về 0

Khi lập trình chúng ta sẽ sử dụng bảng Timing để delay thời gian cho phù hợp.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024
Timing Diagram Write Mode – Cách ghi dữ liệu vào LCD
Hướng dẫn lập trình cho lcd tft stm32 năm 2024
Bảng Timing ghi vào LCD1602

Trong STM32 chúng ta sẽ lập trình như sau,

Lưu ý: Trong thư viện này mình chỉ sử dụng chế độ Write, vậy nên chân R/W mặc định đã được nối xuống 0 rồi nhé!

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Quy trình đọc LCD1602:

  1. Chân RS kéo xuống 0 nếu gửi Lệnh (Command) điều khiển LCD, lên1 gửi data (ghi vào DD RAM)
  2. Chân R/W: Kéo lên 1 để đọc dữ liệu
  3. Các chân D0 – D7: Khi đọc dữ liệu, các chân D0-D7 của LCD sẽ ở chế độ Output, chân MCU kết nối vào sẽ ở chế độ Input
  4. Chân EN sẽ được kéo lên 1 để chốt dữ liệu vào LCD, sau đó lại nhả về 0

Khi lập trình chúng ta sẽ sử dụng bảng Timing để delay thời gian cho phù hợp.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024
Timing Diagram Read Mode – Cách đọc dữ liệu từ LCD

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Các lệnh trong LCD1602

Để ghi các lệnh vào LCD1602 chúng ta sử dụng bảng lệnh sau:

Các bit 1 tương ứng với lệnh, và các bit sau bit 1 tương ứng với tham số.

VD: Khi gửi lệnh INPUT SET chúng ta sẽ sử dụng lệnh 0x40, sau đó AND với 2bit I/D và S và set các chân RS và R/W về 0.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024
Tập lệnh trong LCD1602

Quy trình khởi tạo LCD1602

Để khởi tạo cho LCD chế độ 8Bit, chúng ta sẽ lập trình theo trình tự sau:

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Để khởi tạo LCD1602 chế độ 4 bit chúng ta sẽ lập trình theo trình tự sau:

Với chế độ 4bit, để gửi 1byte (8bit) chúng ta sẽ gửi 2 lần 4bit.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Cách kết nối phần cứng STM32 với LCD1602

Để điều khiển độ tương phản của LCD chúng ta bắt buộc phải nối chân V0 vào biến trở hoặc trở để điểu khiển độ tương phản.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Lập trình STM32 điều khiển LCD1602 chế độ 8bit

Khới tạo LCD1602 chế độ 8bit trên CubeMX

Trong STM32 CubeMx khởi tạo với MCU STM32f103c8t6, trong SYS chọn debug – Serial Wire.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Trong GPIO khởi tạo các chân chế độ Output, đặt tên tương ứng với các chân trên LCD1602.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Khởi tạo chọn tools chain là MDK-ARM V5.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Lập trình STM32 LCD1602 chế độ 8bit

Sau khi Gen code chúng ta sẽ mở bằng Keil C. Để download thư viện các bạn hãy đọc bài viết: Hướng dẫn download thư viện STM32

Add file CLCD.c vào Project bằng cách nhấn chuột phải -> Add Existing

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Thêm đường dẫn vào thư viện mà bạn down về. Nhấn vào biểu tượng Option -> C/C++ -> Inclue Path. Sau đó trỏ tới nơi lưu file CLCD.h

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Add CLCD.h vào main.c

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Khởi tạo một LCD tên là LCD1.

Các bạn có thể khởi tạo nhiều LCD trong project của bạn.

Khởi tạo 1 buffer để hiển thị lên LCD và biến Count.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Truyền vào LCD1 các tham số setup như: &LCD1 địa chỉ LCD, số hàng và cột 16×2. Các chân kết nối với LCD

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Trong While

Đầu tiên nhảy con trỏ tới nơi cần ghi, sau đó ghi giá trị vào ô 0,0

Lệnh sprintf sẽ ghi giá trị của Count vào chuỗi. Sau đó ghi vào LCD.

Tiếp tới tăng giá trị Count và delay 1s.

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Kết quả

Lập trình STM32 LCD1602 chế độ 4bit

Với chế dộ 4bit, chúng ta chỉ cần khởi tạo lại LCD với chế độ 4bit

Sau đó ghi LCD như bình thường

Hướng dẫn lập trình cho lcd tft stm32 năm 2024

Kết

Đến đây bạn đã có thể điều khiển LCD1602, sử dụng LCD1602 để hiển thị một số kết quả đo đạc từ sensor hay các linh kiện khác rất đơn giản. Hi vọng bạn đã hiểu rõ cách điều khiển LCD.

Nếu thấy bài viết này hay, hãy chia sẻ tới những người bạn học hay đồng nghiệp của mình. Và nếu thắc mắc điều gì, hãy để lại bình luận nhé