Em học 1 tới phần giao tiếp 4 LCD = 4 chân cao của vi xử lý 8051. Nhưng không hiểu cách hoạt động của nó. Xin anh chỉ nào hiểu thì cho em ý tưởng để em mường tượng ra nó hoạt động như thế nào không ạ! Em có code mà không hiểu lắm!
Lập trình giao tiếp LCD vi điều khiển 8051
Con LCD bạn dùng chắc loại TextLCD 16x2, 20x2, 16x1…
Nó có 2 chế độ giao tiếp 4bit và 8 bit.
Ở chế độ 8bit thì cần kết nối 8 chân data từ D0 đến D7 của LCD vào 8 chân MCU(VĐK). Mỗi lần truyền được 1 byte(8bit).
Ở chế độ 4bit cần kết nối 4 chân data từ D4 đến D7 vào MCU. Mỗi lần truyền được 4 bit. Để truyền được đủ 1 byte thì phải cắt byte đó ra làm 2 phần (gọi là nibble) và truyền 2 lần liên tiếp.
4bit cao nhất trong byte là high nibble được truyền đi trước.
4bit thấp nhất còn lại là low nibble được truyền đi sau.
Việc kết nối chân nào của LCD vào chân nào của MCU là không bắt buộc cố định. Nếu kết nối theo đúng PORT thì giảm được dung lượng Firmware nhưng hạn chế về mặt thiết kế phần cứng, và ngược lai.
Em không hiểu truyền 4 bit cao vs thấp lắm anh có thể giải thích rỏ cho em không? Em đang học khởi tạo lcd dùng 4 chân! Nhưng không hiểu tại sao lại dùng truyền 4 bit thấp!. Em cảm ơn anh nhiều.
Mỗi lần em truyền lệnh hay dữ liệu hoặc nhận dữ liệu với LCD em phải truyền theo từng byte. Mỗi byte là 8 bit.
Anh ví dụ với lệnh xoá LCD là 1 byte có giá trị 0x01. Viết ra dạng bit (binary) nó là 00000001 ứng với 8 bit.
Do em phải truyền 8 bit nhưng chỉ dùng 4 bit phần cứng thôi nên em phải cắt 8 bit ra làm 2 phần mỗi phần 4 bit là
0000 và 0001. Sau đó em sẽ truyền từng phần một lên LCD.
4 bit 0000 nằm bên trái mang giá trị cao được gọi là high nibble và truyền trước.
4 bit 0001 nằm bên phải mang giá trị thấp gọi là low nibble sẽ truyền sau.
Em có thể đọc thêm tại đây, mục 3.3 sẽ nói rõ nhé:
http://www.hocavr.com/index.php/app/textlcd
Em cảm ơn anh rất nhiều!
anh cho em hỏi thêm 1 câu nữa nha! Có 2 cách chờ thực thi lệnh chờ của LCD. 1 là check cờ D7, 2 là dùng cách delay thì anh có thể cho em hỏi cách nào nên dùng khi nào và có những điểm lợi và hại nào không?
Với delay:
Ưu:
Đơn giản.
Tối ưu hoá thời gian, bởi vì cứ sau một khoảng delay sẽ chuyển sang việc khác, việc giao tiếp LCD thực hiện nhanh hơn.
Tối ưu hoá IO vì có thể bỏ chân RW.
Tối ưu hoá tài nguyên vì không cần viết các hàm đọc và xử lý LCD.
Nhược:
Không giám sát được LCD, có thể gặp trường hợp LCD bị treo không hiển thị được. Giải quyết vấn đề này thì khởi động lại LCD sau một thời gian nào đó.
Với đọc D7:
Hoàn toàn giám sát được LCD, xử lý kịp thời lỗi giao tiếp hoặc lỗi hiển thị.
Nhược:
Chậm, tốn tài nguyên, phức tạp hơn.
[/quote]Em cảm ơn anh nhiều!