Mình dùng PIC8F4XXX kết nối với LCD 16x2.
Sơ đồ kết nối như sau :
8bit PORTC -> D0 - D7 của LCD
RD0 -> RS
GND -> RW
RD2 -> E
Khi mình nối chân A và K vào nguồn thì LCD có sáng đèn BackGround, nhưng mà mình không thể khởi tạo được LCD.
Mình dùng chương trình như sau:
Code:
LIST P=18F4523 ;directive to define processor
#include <P18F4523.INC> ;processor specific variable definitions
ORG 0x0020
COUNT_L RES 1
COUNT_H RES 1
#define RS PORTD,0
#define EN PORTD,2
#define LCD PORTC
ORG 0x0000
GOTO MAIN
ORG 0x0020
;====================================
MAIN
CLRF TRISC
CLRF TRISD
CLRF PORTC ;Đặt portC, portC là output
CLRF PORTD
CALL DELAY
MOVLW H'38' ;Khởi tạo chế độ 8bit
MOVWF LCD
CALL WRITECMD
MOVLW H'0F' ;Bật hiển thị, Cursor ON
MOVWF LCD
CALL WRITECMD
MOVLW H'85' ;Di chuyển con trỏ
MOVWF LCD
CALL WRITECMD
MOVLW 'F' ;Ghi dữ liệu
MOVWF PORTC
CALL WRITEDATA
GOTO $ ;Dừng c.trình
;=========================================
DELAY
MOVLW D'255'
MOVWF COUNT_L
DL1
CALL DELAY2
DECFSZ COUNT_L,1
GOTO DL1
RETURN
;=========================================
DELAY2
MOVLW D'255'
MOVWF COUNT_H
DL2 DECFSZ COUNT_H,1
GOTO DL2
RETURN
;=========================================
WRITECMD
BCF RS ; RS = 0
BSF EN ; EN = 1
NOP
NOP
BCF EN ; EN = 0
CALL DELAY
RETURN
;=========================================
WRITEDATA
BSF RS ; RS = 1
CALL DELAY2
BSF EN ; EN = 1
NOP
NOP
BCF EN ; EN = 0
CALL DELAY
RETURN
;=========================================
END
Chương trình trên mình không khởi tạo được LCD, LCD ko hiển thị gì hết. Mình đã có cắm thử LED vào các chân của LCD để kiểm tra (tăng DELAY lên) thì các LED sáng đúng như trình tự chương trình.
Vì nếu khởi tạo thành công thì sau khi send 2 lệnh 0x38 và 0x0F thì LCD phải có con trỏ nhấp nháy. Không biết có phải mình sai sót gì khi ra lệnh cho LCD ( có thể do xung chốt EN không?, hay có khi nào LCD hỏng không? - vì mình thấy đèn background của LCD vẫn sáng?)
Mong các bạn giúp mình với !