#1.1_LCD 16×02 | LCD 1602
LCD 1602 là ngoại vi đầu tiên ta cùng tìm hiểu trong chuyên mục STM32 và ngoại vi này. Lý do đơn giản là để viết “Hello World” như bao ngôn ngữ lập trình khác. Hello World chúng ta tìm hiểu sau đây sẽ ở 1 dạng riêng biệt.
———————————
Cùng xem bài viết bên dưới.
Giới thiệu ngoại vi LCD 1602
- Đầu tiên là về giới thiệu, LCD 1602 là 1 dạng màn hình LCD để hiển thị hoạt động dựa trên nguyên tắc ánh sáng nền (Wikipedia). Dù wikipedia có nói gì thì nó vẫn được dùng để hiển thị thông số, sau khi STM32 xử lý, đọc nhiệt độ, đọc tốc độ của cảm biến… đưa lên màn hình để tiện cho việc theo dõi.
Chúng được sử dụng rất nhiều trong các dự án, do giá thành và hiệu quả của nó mang lại. Thông tin hiển thị tối đa ở 2 hàng, mỗi hàng tối đa 16 ký tự.
- Do tính phổ biến như vậy nên datasheet của LCD 1602 trình bày rất cụ thể các đặc điểm, cách dùng.
- Nếu muốn tìm thêm về LCD 1602 bạn tải datasheet ở ngay bên dưới nhá.
Thực hành trên STM32cubeIDE
Cấu hình chân
- Đầu tiên sẽ là kết nối chân thực tế và cấu hình từ cubeMX. Thư viện HAL sử dụng chỉ hỗ trợ delay tối thiểu 1ms trong khi khởi tạo LCD cần delay chính xác đến µS nên TIM1 được sử dụng.
- VSS: tương đương với GND – cực âm
- VDD: tương đương với VCC – cực dương (5V)
- Constrast Voltage (Vo): điều khiển độ sáng màn hình
- Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu
- 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.
- Enable pin: Cho phép ghi vào LCD
- 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)
- Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình LCD.
Trong ví dụ này ta dùng 4 chân dữ liệu từ D4->D7 với chế độ 4bit. Cách dùng TIMER ta đã tìm hiểu trong chuyên mục STM32 cơ bản. Nếu chưa rõ cách sử dụng bạn xem lại trước khi đọc tiếp nhá. Xung nhịp từ APB2 là 100MHz, TIM1 lúc này sẽ chọn Hệ số PREDIV_S là 100. Lúc này bộ đếm sẽ đếm với tần số 1MHz (~1µs). Thông số và kết nối của các chân lúc này đã xong. 1 số lưu ý và lỗi mắc phải:
- Cấp điện áp cho Backlight thì đèn nền của LCD mới sáng được.
- Độ tương phản rất quan trọng, do vậy cần nhớ dùng biến trở cho chân V0 để chỉnh độ sáng màn hình (1 số trường hợp nạp code đúng nhưng ko hiển thị do chân V0 này)
- Thư viện LCD1602.c tải về, chú ý khai báo chân theo khai báo trong cubeMX.
Lập trình LCD 1602 và thư viện
- Tiếp theo là khởi tạo code và lập trình. Đầu tiên cần làm là thêm ngay 2 file thư viện vào mục Inc (LCD1602.h) và Src (LCD1602.c). Sau đó là khai báo chân tương ứng với khai báo trong cubeMX.
Các hàm thường sử dụng trong thư viện:
- lcd_init để thiết lập chế độ ban đầu của LCD
- lcd_send_string để truyền chuỗi dữ liệu lên LCD
- lcd_put_cur để xác định con trỏ tới vị trí bất kỳ trong 2 hàng và 16 cột
- lcd_clear để xóa màn hình.
Và đây là Hello World của chúng ta.
Để có thể truyền dữ liệu lên LCD ta dùng sprintf để chuyển sang chuỗi trước khi dùng lcd_send_string. Cuối cùng là kết quả thu được.
- Giá thành rẻ, dễ sử dụng
- Tốn rất nhiều chân của vi điều khiển, gây rối rắm, khó khăn khi kết nối dây.
- Không đẹp mắt, hoa mỹ, chỉ có 2 màu đen xanh.
Phần cứng và code
Phần cứng tiếp tục sử dụng STM32F411, LCD 1602 và biến trở. Phần mềm sử dụng là stm32cubeIDE. File code ví dụ các bạn tải về bên dưới, phần cứng Shoppe.
Kết thúc bài viết đầu tiên trong chuyên mục STM32 và ngoại vi, ta đã cùng tìm hiểu về ngoại vi LCD 1602. Trong bài viết tiếp theo ta sẽ tìm hiểu về LCD 1602 dùng I2C, đây là giải pháp khắc phục nhược điểm sử dụng quá nhiều chân vi điều khiển, chuyển thành sử dụng giao tiếp I2C với 2 chân SDA và SCL.
Các bài viết khác cùng chuyên mục trong “STM32 và ngoại vi“.
Các chuyên mục khác:
Bạn có thắc mắc gì trong bài viết không?
Đánh giá và để lại bình luận bên dưới nhá.