Giao tiếp STM32F103C8T6 với LCD 16×2 thông qua moudle I2C

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 4Add thư viện i2c_lcd.hi2c_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