PDA

View Full Version : Cho em hỏi về LCD


atclub
05-05-2007, 03:11 PM
Em đang tập viết PIC6F877A cho LCD1602.
Sau khi tham khảo data sheet của LCD1602, em viết thử đưa con trỏ về đầu dòng màn hình nhưng không được, mong mọi người chỉ giúp


;***********************************
;Pic 16F877A
;Su dung Thach Anh 20 MHz
;LCD1602
;Các chân của LCD:
;RS : RD0
;R/W : RD1
;E : RD2
;DB7 DB6 DB5 DB4 : RB7 RB6 RB5 RB4
;DB3 DB2 DB1 DB0 : RB3 RB2 RB1 RB0
;***********************************

;---------------------------------------------------------------
;----------------- Khoi Tao Vi dieu khien ----------------------

processor 16f877a
include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ; khai báo “configuration bit”

;---------------- Khoi tao xong --------------------------------
;---------------------------------------------------------------

;---------------------------------------------------------------
;---------------- Khai bao cho LCD -----------------------------
#DEFINE RS PORTB,0 ;RS - RD0
#DEFINE RW PORTB,1 ;R/W - RD1
#DEFINE EN PORTB,2 ;E - RD2

;---------------------------------------------------------------


;---------------------------------------------------------------
;---------------- Chuong trình chính ---------------------------

ORG 0x0000
GOTO MAIN

ORG 0x0005


MAIN

BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB

BANKSEL TRISD
CLRF TRISD
BANKSEL PORTD
BSF RS
BCF RW
BSF EN

BANKSEL PORTB
MOVLW B'00000001' ; DB0 = 1, đưa con trỏ về đầu dòng
MOVWF PORTB

LOOP
GOTO LOOP



END

spl0818
06-05-2007, 10:25 PM
Bạn nên hỏi diễn đàn xem là lập trình cho LCD cần những bước nào, các câu lệnh liên quan, các cách khai báo cho LCD đã thì mới viết được

namqn
06-05-2007, 10:39 PM
Em đang tập viết PIC6F877A cho LCD1602.
Sau khi tham khảo data sheet của LCD1602, em viết thử đưa con trỏ về đầu dòng màn hình nhưng không được, mong mọi người chỉ giúp

Thông thường, cần chờ cho LCD khởi động xong, rồi khởi tạo chế độ giao tiếp với LCD, sau đó mới có thể thực hiện các lệnh điều khiển hay chuyển dữ liệu vào/ra LCD. Bạn xem kỹ lại datasheet, phần nói về giao tiếp với MCU.

Thân,

tranvanthuong
07-05-2007, 05:36 PM
hic hic, mấy anh ơi ai có font 32x16 cho em xin với

namqn
07-05-2007, 07:42 PM
hic hic, mấy anh ơi ai có font 32x16 cho em xin với
Bạn muốn nói đến font cho LED ma trận chăng? Bạn quét hàng hay quét cột? Những phần mềm tiện ích để tạo font lớn như vậy thường không phải là miễn phí, nếu có ai đó bỏ công sức viết ra thì họ cũng không dễ gì đem cho không. Bạn cứ cho biết mục đích của bạn, tôi có thể hướng dẫn bạn cách tự làm.

Thân,

atclub
08-05-2007, 01:02 AM
Anh namqn cho em hỏi, em có vào trang http://www.myke.com/lcd.htm và đọc thấy có trình tự lập trình LCD như sau:

Wait more than 15 msecs after power is applied. (Đợi 15ms sau khi cấp nguồn)
Write 0x030 to LCD and wait 5 msecs for the instruction to complete
(Viết 0x030 tới LCD và đợi 5ms)
Write 0x030 to LCD and wait 160 usecs for instruction to complete
(viết 0x030 tới LCD và đợi 160us)
Write 0x030 AGAIN to LCD and wait 160 usecs or Poll the Busy Flag
(viết 0x030 lại lần nữa tới LCD và đợi 160us hoặc kiểm tra BF)
Set the Operating Characteristics of the LCD
Write "Set Interface Length"
Write 0x010 to turn off the Display
Write 0x001 to Clear the Display
Write "Set Cursor Move Direction" Setting Cursor Behaviour Bits
Write "Enable Display/Cursor" & enable Display and Optional Cursor

Em không hiểu lệnh viết cho LCD 0x030 là như thế nào(chân DB0-DB3 của LCD em kéo xuống đất), nếu muốn sử dụng 4bit thì khai báo ra làm sao, mong anh chỉ giúp!

namqn
08-05-2007, 03:52 AM
Loạt thao tác ghi 0x03 đến LCD là để reset chip điều khiển LCD. Bạn phải ghi thành 2 lần cho mỗi byte, vì chỉ dùng có 4 bit dữ liệu, tức là bạn ghi '0000' nhị phân ra DB7-DB4, tạo xung E, rồi ghi '0011' nhị phân ra DB7-DB4, tạo thêm một xung E nữa. Theo kinh nghiệm của tôi thì bạn không nên nối các chân DB0-DB3 vào đâu cả, tức là để hở chúng.

Ở trang web của Myke Predko mà bạn vừa nêu, đã có nói đến trình tự khởi tạo cho cả giao tiếp 8-bit lẫn 4-bit. Bạn chú ý là từ bước 1 đến bước 4 trong trình tự khởi tạo cho giao tiếp 4-bit vẫn dùng 8-bit.

Trong module LCD mà tôi đã dùng thì tôi chỉ cần khởi tạo đúng trình tự trên trong lần đầu tiên, những lần sau đó tôi có thể dùng ngay các lệnh giao tiếp 4-bit. Tôi tạm kết luận rằng những thiết lập về chế độ giao tiếp được ghi nhớ trong chip điều khiển.

Thân,