Để thiết lập một giao tiếp tốt giữa thế giới con người và thế giới máy móc, các đơn vị hiển thị đóng một vai trò quan trọng. Và vì vậy chúng là một phần quan trọng của hệ thống nhúng. Các đơn vị hiển thị - lớn hay nhỏ, hoạt động theo nguyên tắc cơ bản giống nhau. Bên cạnh các đơn vị hiển thị phức tạp như màn hình đồ họa và trình chiếu 3D, người ta phải biết làm việc với các màn hình đơn giản như đơn vị 16x1 và 16x2. Đơn vị hiển thị 16x1 sẽ có 16 ký tự và nằm trên một dòng. Các 16x2 LCD sẽ có 32 nhân vật trong tổng 16in 1 st dòng và một 16 trong 2 ndhàng. Ở đây ta phải hiểu rằng trong mỗi ký tự có 5x10 = 50 pixel nên để hiển thị một ký tự thì tất cả 50 pixel phải hoạt động cùng nhau. Nhưng chúng ta không cần phải lo lắng về điều đó vì có một bộ điều khiển khác (HD44780) trong bộ hiển thị thực hiện công việc điều khiển các pixel. (bạn có thể nhìn thấy nó trong đơn vị LCD, nó là mắt đen ở phía sau).
Thành phần bắt buộc
Phần cứng:
Vi điều khiển ATmega32
Nguồn điện (5v)
Lập trình viên AVR-ISP
JHD_162ALCD (LCD 16x2)
Tụ điện 100uF.
Phần mềm:
Atmel studio 6.1
Progisp hoặc phép thuật flash
Sơ đồ mạch và giải thích
Như được hiển thị trong giao diện LCD với mạch ATmega32, bạn có thể thấy rằng PORTA của ATMEGA32 được kết nối với màn hình LCD cổng dữ liệu. Ở đây người ta nên nhớ vô hiệu hóa giao tiếp JTAG trong PORTC của ATMEGA bằng cách thay đổi các byte cầu chì, nếu người ta muốn sử dụng PORTC như một cổng giao tiếp thông thường. Trong LCD 16x2 có 16 chân trên tất cả, nếu có đèn nền, nếu không có đèn nền sẽ có 14 chân. Người ta có thể cấp nguồn hoặc để lại các chân đèn sau. Bây giờ trong 14 chân có 8 dữ liệu ghim (7-14 hoặc D0-D7), 2 chân cung cấp điện (1 & 2 hoặc VSS & VDD hoặc GND & + 5V), 3 thứ pin cho điều khiển độ tương phản (VEE-điều khiển như thế nào dày các nhân vật nên được hiển thị), 3 chân điều khiển (RS & RW & E)
Trong mạch trên để giao diện LCD 16x2 với vi điều khiển AVR, bạn có thể quan sát thấy tôi chỉ lấy hai chân điều khiển. Điều này mang lại sự linh hoạt của sự hiểu biết tốt hơn. Bit tương phản và READ / WRITE không thường xuyên được sử dụng để chúng có thể được nối đất. Điều này đặt LCD ở chế độ đọc và độ tương phản cao nhất. Chúng ta chỉ cần điều khiển các chân ENABLE và RS để gửi các ký tự và dữ liệu cho phù hợp.
Các kết nối giữa vi điều khiển ATmega32 và màn hình LCD 16x2 được đưa ra dưới đây:
PIN1 hoặc VSS - mặt đất
PIN2 hoặc VDD hoặc VCC - nguồn + 5v
PIN3 hoặc VEE - mặt đất (mang lại độ tương phản tối đa tốt nhất cho người mới bắt đầu)
PIN4 hoặc RS (Lựa chọn đăng ký) - PD6 của vi điều khiển
PIN5 hoặc RW (Đọc / Ghi) - nối đất (đặt màn hình LCD ở chế độ đọc giúp giảm bớt giao tiếp cho người dùng)
PIN6 hoặc E (Bật) - PD5 của vi điều khiển
PIN7 hoặc D0 - PA0 của vi điều khiển
PIN8 hoặc D1 - PA1
PIN9 hoặc D2 - PA2
PIN10 hoặc D3 - PA3
PIN11 hoặc D4 - PA4
PIN12 hoặc D5 - PA5
PIN13 hoặc D6 - PA6
PIN14 hoặc D7 - PA7
Trong mạch, bạn có thể thấy chúng tôi đã sử dụng giao tiếp 8bit (D0-D7) tuy nhiên điều này không bắt buộc và chúng ta cũng có thể sử dụng giao tiếp 4bit (D4-D7) nhưng với 4 bit chương trình giao tiếp trở nên hơi phức tạp đối với người mới bắt đầu vì vậy chúng tôi chỉ làm với Giao tiếp 8 bit.
Vì vậy, chỉ quan sát từ bảng trên, chúng tôi đang kết nối 10 chân của LCD với bộ điều khiển trong đó 8 chân là chân dữ liệu và 2 chân để điều khiển.
Đang làm việc
Bây giờ để bắt đầu bạn phải biết chức năng của 10 chân của LCD 16x2 (8 chân dữ liệu + 2 chân điều khiển). 8 chân dữ liệu dùng để gửi dữ liệu hoặc lệnh tới LCD. Trong hai chân điều khiển:
1. Chân RS (Lựa chọn thanh ghi) là để cho màn hình LCD biết chúng ta đang gửi dữ liệu đến nó hay lệnh cho nó.
Ví dụ:
Trong bảng trên, một giá trị của cổng Dữ liệu (D7-D0) là “0b0010 1000 hoặc 0x28” cho màn hình LCD hiển thị ký hiệu “(”. Trong bảng hai, giá trị giống nhau của 0x28 cho màn hình LCD biết “bạn là màn hình LCD 5x7 và hành xử như một ”, vì vậy với cùng một giá trị, người dùng có thể xác định hai điều, bây giờ tình huống này được hóa giải bởi chân Đăng ký Lựa chọn, nếu chân RS được đặt ở mức thấp thì LCD hiểu rằng chúng ta đang gửi lệnh. Nếu chúng ta đặt chân RS thành cao thì LCD hiểu rằng chúng ta đang gửi dữ liệu và vì vậy trong cả hai trường hợp, LCD đều tôn trọng giá trị cổng dữ liệu theo giá trị chân RS.
2. Chân E (Enable) chỉ đơn giản để thông báo “đèn LED báo nguồn của PC”, chân này được đặt thành cao để báo cho màn hình LCD “nhận cổng dữ liệu dạng dữ liệu của bộ điều khiển”. Khi chân này xuống thấp sau cao, màn hình LCD sẽ xử lý dữ liệu nhận được và hiển thị kết quả tương ứng. Vì vậy, chân này được đặt ở mức cao trước khi gửi dữ liệu và được kéo xuống mặt đất sau khi gửi dữ liệu.
Bây giờ sau khi kết nối phần cứng, khởi động Atmel studio và bắt đầu một dự án mới để viết chương trình, bây giờ mở màn hình lập trình và bắt đầu vắt chương trình. Chương trình phải thực hiện như hiển thị sau đây.
Đầu tiên, chúng tôi cho bộ điều khiển biết chúng tôi đang sử dụng cổng nào cho dữ liệu và điều khiển LCD. Sau đó, cho bộ điều khiển biết thời điểm gửi dữ liệu hoặc lệnh tương ứng bằng cách chơi với các chân RS và E.
Giải thích ngắn gọn về các khái niệm được sử dụng trong chương trình:
1. E được đặt ở mức cao (thông báo cho LCD nhận dữ liệu) và RS được đặt ở mức thấp (cho LCD biết chúng tôi đang ra lệnh)
2. Cung cấp giá trị 0x01 cho cổng dữ liệu như một lệnh để xóa màn hình
3. E được đặt ở mức cao (cho LCD nhận dữ liệu) và RS được đặt ở mức cao (cho LCD biết chúng tôi đang cung cấp dữ liệu)
4. Lấy một chuỗi ký tự gửi từng ký tự trong chuỗi một.
5. E được đặt ở mức thấp (cho LCD biết rằng chúng tôi đã gửi xong dữ liệu)
6. Sau lệnh cuối cùng, màn hình LCD kết thúc giao tiếp và xử lý dữ liệu và hiển thị chuỗi ký tự trên màn hình.
Trong kịch bản này, chúng tôi sẽ gửi các nhân vật lần lượt. Các ký tự được cấp cho màn hình LCD bằng mã ASCII (Mã tiêu chuẩn của Mỹ để trao đổi thông tin).
Bảng mã ASCII được hiển thị ở trên. Ở đây để màn hình LCD hiển thị ký tự “@”, chúng ta cần gửi một mã thập lục phân “64”. Nếu chúng tôi gửi '0x62' đến màn hình LCD, nó sẽ hiển thị biểu tượng '>'. Như thế này, chúng ta sẽ gửi các mã thích hợp đến màn hình LCD để hiển thị tên.
Cách giao tiếp giữa LCD và vi điều khiển ATmega32 AVR được giải thích rõ nhất trong từng bước của mã C dưới đây,