- Hoạt động của màn hình LCD 16x2
- Sơ đồ mạch đến màn hình LCD giao diện với vi điều khiển STM8
- Thư viện LCD STM8 - Tệp tiêu đề cho STM8S103F3P6
- Chương trình LCD cho Vi điều khiển STM8S
- STM8 với màn hình LCD - Đang hoạt động
Màn hình LCD chữ và số 16x2 là màn hình được sử dụng phổ biến nhất đối với những người yêu thích và đam mê. Màn hình rất hữu ích khi bạn muốn hiển thị thông tin cơ bản cho người dùng và cũng có thể giúp kiểm tra hoặc gỡ lỗi mã của chúng tôi. Mô-đun LCD 16x2 đặc biệt này rất dễ sử dụng và đã phổ biến trong một thời gian dài. Bạn có thể tìm hiểu thêm về kiến thức cơ bản của mô-đun LCD 16x2 trong bài viết được liên kết.
Để tiếp tục với loạt bài hướng dẫn về Vi điều khiển STM8, trong hướng dẫn này, chúng ta sẽ tìm hiểu cách giao tiếp màn hình LCD với Vi điều khiển STM8. Trước đây chúng tôi cũng đã từng giao tiếp LCD 16x2 với nhiều bộ vi điều khiển khác, các hướng dẫn được liệt kê bên dưới và bạn có thể kiểm tra nếu quan tâm.
Nếu bạn chưa quen với STM8, hãy xem bài viết bắt đầu với Vi điều khiển STM8 để hiểu những kiến thức cơ bản về bảng điều khiển và môi trường lập trình. Chúng tôi sẽ không đề cập đến những điều cơ bản trong hướng dẫn này.
Hoạt động của màn hình LCD 16x2
Như tên cho thấy, một màn hình LCD 16x2 sẽ có 16 Cột và 2 Hàng. Vì vậy, tổng cộng, chúng tôi sẽ có thể hiển thị 32 ký tự trên màn hình này và những ký tự này có thể là bảng chữ cái hoặc số hoặc thậm chí là ký hiệu. Sơ đồ chân LCD 16x2 đơn giản mà chúng tôi sử dụng trong hướng dẫn này được hiển thị bên dưới-
Như bạn thấy, màn hình có 16 chân và chúng ta có thể chia nó thành năm loại, Chân nguồn, chân tương phản, Chân điều khiển, Chân dữ liệu và chân đèn nền như trong bảng dưới đây. Chúng ta sẽ đi vào chi tiết của từng chân khi chúng ta thảo luận về sơ đồ mạch của hướng dẫn này.
thể loại | Ghim KHÔNG. | Tên ghim | Chức năng |
Chân điện | 1 | VSS | Chân nối đất, kết nối với mặt đất |
2 | VDD hoặc Vcc | Pin điện áp + 5V | |
Pin tương phản | 3 | V0 hoặc VEE | Thiết lập độ tương phản, được kết nối với Vcc thông qua một biến trở. |
Ghim điều khiển | 4 | RS | Đăng ký Chọn Pin, RS = 0 Chế độ lệnh, RS = 1 Chế độ dữ liệu |
5 | RW | Chân đọc / ghi, RW = 0 Chế độ ghi, RW = 1 Chế độ đọc | |
6 | E | Kích hoạt, xung cao đến thấp cần kích hoạt màn hình LCD | |
Ghim dữ liệu | 7-14 | D0-D7 | Ghim dữ liệu, Lưu trữ dữ liệu được hiển thị trên màn hình LCD hoặc các lệnh |
Ghim đèn nền | 15 | LED + hoặc A | Để cấp nguồn cho Đèn nền + 5V |
16 | LED- hoặc K | Đèn nền |
Ở mặt sau của màn hình LCD, như trong hình bên dưới, bạn sẽ tìm thấy hai chấm đen, bên trong chúng ta có IC điều khiển màn hình LCD HD44780 (bao quanh màu đỏ). Bộ vi điều khiển của chúng ta phải giao tiếp với vi mạch này, từ đó sẽ điều khiển những gì đang được hiển thị trên màn hình LCD. Nếu bạn muốn biết chính xác tất cả những điều này hoạt động như thế nào, bạn nên kiểm tra hoạt động của màn hình LCD 16x2, nơi chúng ta đã thảo luận chi tiết về cách thức hoạt động của màn hình LCD.
Trong hướng dẫn này, chúng tôi sẽ thảo luận về sơ đồ mạch và mã để hiển thị ký tự alphamerical (chữ cái và số) trên một màn hình LCD 16x2 sử dụng đơn giản LCD_print _char và LCD_print_string lệnh. Các lệnh này có thể được sử dụng trực tiếp trong chương trình sau khi bao gồm tệp tiêu đề của chúng tôi. Tệp tiêu đề đề cập đến hầu hết mọi thứ cho bạn vì vậy không bắt buộc phải biết cách hiển thị hoặc vi mạch trình điều khiển HD44780 hoạt động.
Sơ đồ mạch đến màn hình LCD giao diện với vi điều khiển STM8
Bạn có thể tìm thấy toàn bộ mạch LCD STM8 trong hình dưới đây. Như bạn có thể thấy kết nối Bộ điều khiển STM8S103F3P6 với LCD rất đơn giản, chúng tôi có màn hình LCD được kết nối trực tiếp với bo mạch của chúng tôi và liên kết ST cũng được kết nối để lập trình bo mạch.
Các chân nguồn Vss và Vcc được kết nối với chân 5V trên bảng STM8S, lưu ý rằng điện áp hoạt động của LCD là 5V và được kết nối để hoạt động trên 3.3V. Vì vậy, mặc dù Vi điều khiển STM8S103F3P6 hoạt động trên 3.3V bắt buộc phải có nguồn 5V cho màn hình LCD, bạn có thể tránh điều này bằng cách sử dụng IC điều khiển sạc nhưng chúng ta sẽ không thảo luận về điều đó trong hướng dẫn này.
Tiếp theo, chúng tôi có chân tương phản được sử dụng để thiết lập độ tương phản của màn hình LCD, chúng tôi đã kết nối nó với chiết áp để chúng tôi có thể kiểm soát độ tương phản. Chúng tôi đã sử dụng nồi 10k, nhưng bạn cũng có thể sử dụng các giá trị lân cận khác, nồi hoạt động như một bộ chia tiềm năng để cung cấp 0-5 V cho chân tương phản, thông thường bạn cũng có thể sử dụng điện trở trực tiếp để cung cấp khoảng 2,2V để có độ tương phản hợp lý giá trị. Sau đó, chúng tôi có các chân thiết lập lại (RS), Đọc / Ghi (RW) và Bật (E). Chân đọc-ghi được nối đất vì chúng ta sẽ không đọc bất cứ thứ gì từ màn hình LCD mà chúng ta sẽ chỉ thực hiện các thao tác ghi. Hai chân điều khiển còn lại Rs và E được kết nối tương ứng với các chân PA1 và PA2.
Sau đó, chúng tôi có các chân dữ liệu DB0 đến DB7. Màn hình LCD 16x2 có thể hoạt động ở hai chế độ, một là chế độ hoạt động 8 bit, nơi chúng ta phải sử dụng tất cả 8 chân dữ liệu (DB0-DB7) trên màn hình LCD và chế độ còn lại là chế độ hoạt động 4 bit, nơi chúng ta chỉ cần 4 chân. chân dữ liệu (DB4-DB7). Chế độ 4 bit thường được sử dụng vì nó yêu cầu ít chân GPIO hơn từ bộ điều khiển, vì vậy chúng tôi cũng đã sử dụng chế độ 4 bit trong hướng dẫn này và chỉ kết nối các chân DB4, DB5, DB6 và DB7 với các chân PD1, PD2, PD3 và PD4 tương ứng.
Hai chân BLA và BLK cuối cùng được sử dụng để cấp nguồn cho đèn LED nền bên trong, chúng tôi đã sử dụng điện trở 560-ohm làm điện trở hạn chế dòng điện. Bộ lập trình ST-Link được kết nối luôn như trong hướng dẫn trước của chúng tôi. Tôi đã thực hiện kết nối hoàn chỉnh trên breadboard và thiết lập của tôi trông giống như thể hiện trong hình ảnh bên dưới.
Thư viện LCD STM8 - Tệp tiêu đề cho STM8S103F3P6
Trước khi tiến hành sơ đồ mạch, hãy lấy tệp tiêu đề LCD STM8 từ GitHub bằng liên kết sau-
Tệp tiêu đề LCD STM8S 16x2
Bạn có thể tải xuống toàn bộ repo và lấy tệp stm8s103_LCD_16x2.h hoặc mã đơn giản từ liên kết trên. Trong khi thiết lập dự án, hãy đảm bảo rằng bạn bao gồm tất cả các tệp tiêu đề bắt buộc trong thư mục inc cùng với tệp tiêu đề này.
Nếu bạn không chắc chắn về cách thêm tệp tiêu đề và biên dịch chương trình, hãy làm theo video ở cuối trang này. Và nếu bạn tò mò về cách mã bên trong tệp tiêu đề hoạt động, bạn có thể xem PIC với hướng dẫn trên màn hình LCD. Tệp tiêu đề được sử dụng trong dự án này rất giống với tệp được giải thích ở đó, vì vậy chúng tôi sẽ không đi sâu vào chi tiết của nó.
Chương trình LCD cho Vi điều khiển STM8S
Đối với phần trình diễn, chúng tôi sẽ lập trình bộ điều khiển STM8S của mình để hiển thị một chuỗi đơn giản như “Thông báo về mạch” và sau đó chúng tôi sẽ tăng giá trị “Kiểm tra” cho mỗi giây trong dòng thứ hai. Chương trình hoàn chỉnh có thể được tìm thấy ở cuối trang này. Lời giải thích như sau.
Chúng tôi bắt đầu chương trình của mình bằng cách xác định các chân và thêm các tệp tiêu đề cần thiết như mọi khi. Trong sơ đồ mạch đã thảo luận ở trên, chúng tôi đã kết nối LCD_RS với PA1 nên chúng tôi đã định nghĩa nó là LCD_RS GPIOA, GPIO_PIN_1. Tương tự, chúng ta cũng thực hiện tương tự cho các ghim khác. Nếu chúng đang theo một mạch khác, hãy đảm bảo rằng bạn thay đổi các giá trị này cho phù hợp.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD, GPIO_PIN_3 #define_PIN16 "LCD_DB102.
Tiếp theo bên trong chương trình chính của chúng tôi, chúng tôi đã khai báo các biến cần thiết cho mã mẫu này. Chúng tôi có một biến kiểm tra được gọi là test_var được khởi tạo bằng 0, chúng tôi sẽ tăng biến và hiển thị trên màn hình LCD. Các ký tự d1 đến d4 đại diện cho 4 chữ số của biến kiểm tra vì màn hình LCD của chúng tôi không thể hiển thị trực tiếp giá trị int, chúng tôi phải chuyển đổi chúng thành ký tự.
// Khai báo biến int test_var = 0; char d4, d3, d2, d1;
Hàm LCD_Begin () được sử dụng để khởi tạo màn hình LCD. Chức năng này sẽ khởi tạo tất cả các chân GPIO cần thiết và cũng đặt màn hình LCD ở chế độ LCD 16x2. Sau đó, chúng ta có hàm LCD_Clear () được sử dụng để xóa tất cả các giá trị trên màn hình LCD, điều này sẽ xóa mọi thứ trên màn hình LCD để việc ghi các giá trị mới trở nên sạch sẽ. Sau đó, chúng ta có hàm LCD_Set_Cursor (x, y) trong đó x và y là các vị trí mà chúng ta cần viết ký tự mới của mình. Ví dụ: (1,1) có nghĩa là hàng đầu tiên và cột đầu tiên, tương tự (2,12) có nghĩa là cột thứ hai 12, tương tự như vậy. Lưu ý rằng chúng ta có 2 hàng và 16 cột ở đây như chúng ta đã thảo luận trước đó.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Bây giờ, màn hình LCD đã được đặt, xóa và con trỏ ở đúng vị trí. Điều tiếp theo là in một cái gì đó trên màn hình. Chúng ta có thể sử dụng LCD_Print_String (“Chuỗi mẫu”) để in một chuỗi ra LCD và LCD_Print_Char (a) để in một giá trị ký tự lên LCD. Trong chương trình của chúng tôi ở đây, chúng tôi đã in “STM8S103F3P3 LCD” và tạo độ trễ 5 giây bằng cách sử dụng mã dưới đây.
Lcd_Print_String ("LCD STM8S103F3P3"); delay_ms (5000);
Sau 5 giây chậm trễ, chúng tôi xóa màn hình LCD một lần nữa và hiển thị “Thông báo mạch” ở hàng đầu tiên và “Kiểm tra:” I ở hàng thứ hai.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Thông báo mạch"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Kiểm tra:");
Bên trong vòng lặp while, chúng ta sẽ chia giá trị trên biến số nguyên test_var thành các ký tự riêng lẻ để nó có thể được hiển thị trên màn hình LCD bằng các toán tử phân chia và mô đun đơn giản. Chúng tôi cũng đã thêm '0' để chuyển đổi giá trị ASCII thành ký tự.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Sau đó, chúng tôi đã đặt con trỏ thành (2,6) vì chúng tôi đã viết “Kiểm tra:” ở hàng thứ hai có 6 ký tự. Nếu chúng tôi ghi đè, ký tự hiện có sẽ được thay thế bằng một ký tự mới trên màn hình LCD. Chúng tôi cũng đã thêm thời gian trễ 1 giây và tăng biến.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
STM8 với màn hình LCD - Đang hoạt động
Để kiểm tra chương trình của chúng tôi, chỉ cần tải mã lên bộ điều khiển của chúng tôi và kích hoạt nó bằng cổng micro-USB. Lưu ý rằng màn hình LCD yêu cầu 5V để hoạt động nên bắt buộc phải cấp nguồn cho bo mạch từ cổng USB. Trước đây chúng tôi đã cấp nguồn trực tiếp từ ST-link vì chúng tôi không cần nguồn cung cấp 5V.
Như bạn có thể thấy, màn hình LCD đang hoạt động như mong đợi với giá trị biến kiểm tra được tăng lên trong khoảng mỗi giây. Ngoài ra, lưu ý rằng chúng tôi chưa sử dụng bộ định thời và chỉ sử dụng chức năng trì hoãn để tạo độ trễ này nên đừng mong đợi khoảng thời gian trễ là chính xác, chúng tôi sẽ sử dụng bộ định thời sau trong một hướng dẫn khác cho mục đích đó.
Hoạt động hoàn chỉnh của dự án có thể được tìm thấy trong video được liên kết bên dưới. Hy vọng bạn thích hướng dẫn và học được điều gì đó hữu ích. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại chúng trong phần bình luận hoặc sử dụng diễn đàn của chúng tôi cho các truy vấn kỹ thuật khác.