PDA

View Full Version : Bắt đầu học Giao tiếp với LCD HD44780.


doducanh88
02-11-2009, 11:59 PM
Em mới bắt đầu học về giao tiếp Pic16f877a với LCD HD44780.
Em có tìm nhiều tài liệu trên mạng, nhiều tài liệu về đo nhiệt độ hiển thị trên LCD, đã làm thử, và nó chạy bình thường.

Tuy nhiên, thực sự là em chưa biết lập trình với LCD như thế nào, em có đọc code nhưng không hiểu phần hiển thị trên LCD như thế nào.

Do đó,
1. Em muốn nhờ một anh nào đó có thể viết cho em một đoạn code để hiển thị chữ "xin chao" lên trên LCD được không? (mong anh chú thích từng câu lệnh, nhiệm vụ của từng nhóm lệnh)

Viết bằng asm (vì em đọc mấy tài liệu toàn viết bằng C và ko hiểu gì ^^, em học asm từ đầu mà)

phần cứng em sử dụng:
Pic16f877a
thạch anh 4Mhz
LCD em mua ngoài chợ trời là 16*2 (???)

em định sử dụng port b RBo-RB7 nối vào DB0-DB7
RD7 nối vào E
RD6 nối vào R/W
RD5 nối vào RS

2. Em muốn hỏi chế độ 8bit khác 4bit ở điểm nào
khi nào dùng chế độ nào
nên dùng chế độ nào (ưu, nhược điểm)

vì em đọc mấy tài liệu thì thấy mọi người hay dùng chế độ 4bit.

3...
4... chưa nghĩ ra ^^


Mong các anh giúp đỡ. Gia đình xin cảm ơn và hậu tạ :D

s3vngroup
03-11-2009, 12:55 PM
8 bits và 4 bits chỉ khác nhau ở số lượng data bits ta sử dụng (8 bits dùng 8 pins D7-D0, còn 4 bits dùng 4 pins D7-D4) và vì vậy có thể thấy ưu nhược điểm rất rõ ràng:

Khi số lượng I/0 có đủ cho mode 8 bits và bạn cần nhanh dùng 8 bits
Khi số lượng I/0 hạn chế hoặc đơn giản là bạn muốn tối ưu I/O hãy dùng 4 bits.

Noted: 8 bits hay 4 bits bạn set up cho LCD, thư viện cho lập trình hai modes này nhiều compilers đều hỗ trợ sẵn rồi

Mình thấy trên diễn đàn rất nhiều topic về cái này, bạn chịu khó đọc, rồi hỏi những câu hỏi cụ thể hơn, mọi người sẽ trả lời cho bạn, mình post thêm 1 vài link cần thiết:
http://www.ant7.com/forum/forum_post.asp?TID=1675&PN=3
http://www.df.unipi.it/~flaminio/laboratori/pdf_files/hd44780.pdf

Thân,
S3VNGroup

doducanh88
04-11-2009, 12:28 AM
cảm ơn anh chú ý tới.
Em cũng tìm từ trang dầu tiên về tới đây, và thấy bài nào cũng có câu là "mình thấy trên diễn đàn này nhiều bài về cái này rồi, bạn tìm thử xem sao", nên rốt cuộc em cũng chưa biết bắt đầu từ đầu.

Những bài em đọc được thì toàn viết trên C, nên em cũng ko hiểu vì em mới bắt đầu bằng ASM.

Còn câu hỏi của em đã rõ là
"Em muốn nhờ một anh nào đó có thể viết cho em một đoạn code để hiển thị chữ "xin chao" lên trên LCD được không? (mong anh chú thích từng câu lệnh, nhiệm vụ của từng nhóm lệnh)
Viết bằng asm"

Hoặc anh nào biết topic nào thì có thể cho em link cụ thể được ko ạ

Cảm ơn anh nhiều.

namqn
04-11-2009, 08:26 AM
cảm ơn anh chú ý tới.
Em cũng tìm từ trang dầu tiên về tới đây, và thấy bài nào cũng có câu là "mình thấy trên diễn đàn này nhiều bài về cái này rồi, bạn tìm thử xem sao", nên rốt cuộc em cũng chưa biết bắt đầu từ đầu.

Những bài em đọc được thì toàn viết trên C, nên em cũng ko hiểu vì em mới bắt đầu bằng ASM.

Còn câu hỏi của em đã rõ là
"Em muốn nhờ một anh nào đó có thể viết cho em một đoạn code để hiển thị chữ "xin chao" lên trên LCD được không? (mong anh chú thích từng câu lệnh, nhiệm vụ của từng nhóm lệnh)
Viết bằng asm"

Hoặc anh nào biết topic nào thì có thể cho em link cụ thể được ko ạ

Cảm ơn anh nhiều.
Nếu hiểu được quy trình giao tiếp thì viết bằng ngôn ngữ nào cũng được. Tại sao cứ phải đúng ngôn ngữ mà bạn đang học.

Các ví dụ viết bằng C là rất thích hợp cho việc tìm hiểu các thuật toán, quy trình thực hiện. Trừ khi bạn chưa học C, việc học cách giao tiếp với LCD ký tự từ code C là dễ dàng. Nếu bạn thực sự chưa học C, tôi nghĩ bạn học hợp ngữ sẽ càng khó, vì C là ngôn ngữ cấp cao, gần gũi với con người hơn so với hợp ngữ là ngôn ngữ cấp thấp.

Thân,

s3vngroup
05-11-2009, 09:04 AM
cảm ơn anh chú ý tới.
Em cũng tìm từ trang dầu tiên về tới đây, và thấy bài nào cũng có câu là "mình thấy trên diễn đàn này nhiều bài về cái này rồi, bạn tìm thử xem sao", nên rốt cuộc em cũng chưa biết bắt đầu từ đầu.

Những bài em đọc được thì toàn viết trên C, nên em cũng ko hiểu vì em mới bắt đầu bằng ASM.

Còn câu hỏi của em đã rõ là
"Em muốn nhờ một anh nào đó có thể viết cho em một đoạn code để hiển thị chữ "xin chao" lên trên LCD được không? (mong anh chú thích từng câu lệnh, nhiệm vụ của từng nhóm lệnh)
Viết bằng asm"

Hoặc anh nào biết topic nào thì có thể cho em link cụ thể được ko ạ

Cảm ơn anh nhiều.

Hi bạn,
Mình hiểu ý kiến của bạn, bước đầu tiên bao giờ cũng rất khó khăn, bạn làm ASM hay C mình không có ý kiến gì, tuy vậy, mình nghĩ bạn nên bắt tay trực tiếp vào làm, và đã làm thì nhất quyết phải đi đến cùng, mọi người sẽ giúp bạn nếu bạn gặp vấn đề về code không chạy. mạch có vấn đề....Bằng cách này bạn có thể đạt được nhiều hơn chỉ là một đoạn code thành công, đó là kỹ năng giải quyết vấn đề, khả năng nghiên cứu giải quyết vấn đề một cách độc lập...

Thân,
s3vngroup

tdm
05-11-2009, 12:50 PM
Em mới bắt đầu học về giao tiếp Pic16f877a với LCD HD44780.
Em có tìm nhiều tài liệu trên mạng, nhiều tài liệu về đo nhiệt độ hiển thị trên LCD, đã làm thử, và nó chạy bình thường.

Tuy nhiên, thực sự là em chưa biết lập trình với LCD như thế nào, em có đọc code nhưng không hiểu phần hiển thị trên LCD như thế nào.

Do đó,
1. Em muốn nhờ một anh nào đó có thể viết cho em một đoạn code để hiển thị chữ "xin chao" lên trên LCD được không? (mong anh chú thích từng câu lệnh, nhiệm vụ của từng nhóm lệnh)

Viết bằng asm (vì em đọc mấy tài liệu toàn viết bằng C và ko hiểu gì ^^, em học asm từ đầu mà)

phần cứng em sử dụng:
Pic16f877a
thạch anh 4Mhz
LCD em mua ngoài chợ trời là 16*2 (???)

em định sử dụng port b RBo-RB7 nối vào DB0-DB7
RD7 nối vào E
RD6 nối vào R/W
RD5 nối vào RS

2. Em muốn hỏi chế độ 8bit khác 4bit ở điểm nào
khi nào dùng chế độ nào
nên dùng chế độ nào (ưu, nhược điểm)

vì em đọc mấy tài liệu thì thấy mọi người hay dùng chế độ 4bit.

3...
4... chưa nghĩ ra ^^


Mong các anh giúp đỡ. Gia đình xin cảm ơn và hậu tạ :D
để bạn tiêp cận lcd được nhanh hơn tôi gửi bạn một ví dụ về cách viết chương trinh lcd .sau đó bạn tìm hiều thêm đề có cách viêt cho riêng minh.

doducanh88
05-11-2009, 09:21 PM
@ namqn
thanks anh.
Nếu như em nhớ ko nhầm, khi mới bắt đầu học PIC, em có vào "tham quan" nhiều diễn đàn về điện tử, và trong picvietnam, em có thấy có mấy anh hỏi là tại sao ko thấy tut viết bằng ngôn ngữ C và anh nhiều lần trả lời mọi người là diễn đàn chủ trương dạy mọi người học những điều căn bản nhất, và đó là lập trình hợp ngữ
-> nên em mới học ấy chứ, giờ anh lại nói thế thì em chẳng biết học sao nữa T_T

@ s3vngroup
Thanks anh.
Em cũng rất hiểu ý mọi người.
Tuy nhiên, nếu như ko có ai hướng dẫn thì việc tự mày mò để hiểu được là rất mất thời gian (mặc dù việc tự mày mò thì sẽ nhớ lâu).


@ tdm
Thanks anh nhiều nhiều ^^
Ví dụ của anh rất dễ hiểu

namqn
05-11-2009, 09:59 PM
@ namqn
thanks anh.
Nếu như em nhớ ko nhầm, khi mới bắt đầu học PIC, em có vào "tham quan" nhiều diễn đàn về điện tử, và trong picvietnam, em có thấy có mấy anh hỏi là tại sao ko thấy tut viết bằng ngôn ngữ C và anh nhiều lần trả lời mọi người là diễn đàn chủ trương dạy mọi người học những điều căn bản nhất, và đó là lập trình hợp ngữ
-> nên em mới học ấy chứ, giờ anh lại nói thế thì em chẳng biết học sao nữa T_T
Tôi cần giải thích rõ ý của tôi trong bài viết.

Đoạn thứ nhất, tôi viết như vậy để bạn hiểu rằng ngôn ngữ mà bạn dùng để viết code không liên quan thuật toán. Thuật toán (hay cụ thể là quy trình giao tiếp LCD ký tự) không phụ thuộc vào việc bạn dùng ngôn ngữ nào, do đó bạn có thể học thuật toán đó ở những chương trình viết bằng những ngôn ngữ khác (đây là việc tôi vẫn thường làm).

Đoạn thứ hai, tôi muốn nói rằng những chương trình viết bằng ngôn ngữ cấp cao thường dễ hiểu hơn so với những chương trình viết bằng ngôn ngữ cấp thấp. Nếu bạn gặp khó khăn khi đọc những chương trình viết bằng ngôn ngữ cấp cao (C trong trường hợp của bạn) thì có nhiều khả năng bạn sẽ càng gặp khó khăn với code hợp ngữ. Trong trường hợp một sinh viên ĐHBK, ở khoa Điện - Điện tử, họ sẽ được trang bị tư duy lập trình bằng một ngôn ngữ cấp cao, sau đó được giới thiệu một ngôn ngữ cấp cao khác làm công cụ, rồi mới tiếp cận vi xử lý/vi điều khiển.

Tôi vẫn khẳng định: "Để hiểu rõ vi điều khiển PIC, nên học nó thông qua hợp ngữ", nhưng bạn đừng đem ý kiến này áp dụng cho việc học cách giao tiếp với module LCD ký tự, vì module LCD ký tự không phải là vi điều khiển PIC.

Thân,