LCD 16×2 là một ngoại vi ouput được sử dụng rất nhiều trong các đề tài, dự án để hiển thị các thông tin dưới dạng text cho người dùng. Trong bài viết này sẽ giới thiệu và hướng dẫn các bạn giao tiếp hiển thị thông tin lên LCD 16×2 sử dụng MCU STM32F103C8T6 thông qua module I2C. Project này được thực hiện trên phần mềm STM32CubeMX 5.2.0 và KeilC uVision 5.26.2.0
[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]
1. Kết nối MCU STM32 với LCD
Module I2C PCF8574 được sử dụng để làm trung gian kết nối giữa MCU STM32F103C8T6 và LCD như hình và bảng bên dưới:
Các chân GND, VCC, SDA, SCL được nối với STM32 như sau:
STM32 | PCF8574 |
GND | GND |
VCC (nối nguồn ngoài 5V) | |
PB6 | SCL |
PB7 | SDA |
Nguồn 5V của LCD có thể được lấy từ chân 5V trên kit nạp ST Link V2. Trên module I2C có biến trở điều chỉnh độ tương phản của màn hình LCD khi cần.
2.Địa chỉ của Module I2C PCF8574
Module I2C PCF8574 hỗ trợ giao tiếp I2C với 7bit địa chỉ, trong đó có 4 bit cố định và 3 bit có thể được người dùng tùy chỉnh có dạng 0 1 0 0 A2 A1 A0. Mặc định, trên module nhà sản xuất để các chân A0, A1, A2 ở mức logic cao nên PCF8574 có địa chỉ là 0x27. Để thay đổi địa chỉ của IC này khi cần, bạn có thể tùy chọn thay đổi các mức logic của 3 chân này. (Xem datasheet của PCF8574 tại đây)
Khi lập trình I2C để giao tiếp STM32 và module này, thì byte đầu tiên sẽ bao gồm 7bit địa chỉ và 1bit W vào vị trí có trọng số thấp nhất(ghi dữ liệu), lúc này Byte đầu tiên của giao tiếp I2C sẽ có giá trị: 01001110 (0x4E)
3. Ví dụ đo nhiệt độ cảm biến LM35 (ADC) và hiển thị LCD
Sơ đồ nối chân cảm biến LM35 và STM32F103C8T6
STM32 | LM35 |
5V | VCC |
GND | GND |
PA0 | Analog Out |
Lưu ý: Xem cấu hình CubeMX cho ADC tại đây
Bước 1: Chọn các chức năng cho ví dụ này: Serial wire (nạp code và debug), ADC (đọc cảm biến LM35), I2C (giao tiếp module I2C PCF8574 hiển thị LCD):
Bước 2: Cấu hình I2C. Phần cấu hình ADC và ngắt ADC các bạn xem ở link đính kèm bên trên
Bước 3: Generate code
Bước 4: Add thư viện i2c_lcd.h và i2c_lcd.c vào Keil C project.
- Copy file i2c_lcd.c vào thư mục Src của project
- Copy file i2c_lcd.h vào thư mục Inc của project
Bước 5: Trong project kích chuột phải vào thư mục Application/User chọn Add Existing Files to Group Application/User. Sau đó chọn thư mục Src rồi add file i2c_lcd.c
Bước 6: Include thư viện i2c_lcd.h vào file main.c
Một số hàm trong file i2c_lcd.h:
void lcd_init (void); // initialize lcd
void lcd_send_cmd (char cmd); // send command to the lcd
void lcd_send_data (char data); // send data to the lcd
void lcd_send_string (char *str); // send string to the lcd
void lcd_clear_display (void); //clear display lcd
void lcd_goto_XY (int row, int col); //set proper location on screen
Chương trình ngắt ADC để đọc giá trị nhiệt độ đo được:
Chương trình hiển thị dữ liệu lên LCD:
Kết quả:
Tải thư viện I2C tại đây.
* Nếu như sau khi nạp code màn hình không hiển thị dữ liệu. các bạn đổi địa chỉ SLAVE_ADDRESS_LCD từ 0x4E sang 0x7E và build chương trình, sau đó nạp lại code. Chúc các bạn thành công!
Xem thêm: Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây.
Nhóm TAPIT ARM R&D