Ðề tài: Lcd
View Single Post
Old 16-04-2007, 12:48 PM   #1
friends
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 19
:
Thumbs up Lcd

Cac huynh de cho minh hoi chut xiu :
Chuong trinh ben duoi minh viet de hien thi ki tu A len LCD ,nhung khi mo phong no thi khong chay ,minh khong biet sai o cho nao ,cac huynh de kiem tra dum va sua dum cho minh nha ,minh dang lam de tai nen dang can gap .Cam on nhieu!

Code:
TITLE "HIEN THI LEN LCD"
PROCESSOR P16F876A
#INCLUDE <P16F876A.INC> ;CHEN THU VIEN LIEN KET CHO CHUONG TRINH
__CONFIG 3F71H ;CAU HINH CAC BIT HE THONG
ERRORLEVEL -302 ;BO DI CAC LOI CHON BANK

cblock 0X020

LCD_TEMP
LCD_TEMP1
DELAY 
X_DELAY 
endc 
LCD_DATA EQU PORTB 
LCD_DATA_TRIS EQU TRISB
LCD_CTRL EQU PORTA 

; PORTA control bits
LCD_E EQU 2 
LCD_RW EQU 1 
LCD_RS EQU 0


org 0x000
GOTO START 
START 

;HIEN THI NHIET DO LEN LCD

LCDINIT

CLRF LCD_CTRL 

MOVLW 0x01E
CALL X_DELAY500 ; 30 * 0.5mS = 15mS

MOVLW 0x038 ; 8-bit-interface, 2-lines
CALL LCDPUTCMD
MOVLW 0x000 ; disp.off, curs.off, no-blink
CALL LCDDMODE
CALL LCDCLEAR
MOVLW 0x004 ; disp.on, curs.off
CALL LCDDMODE
MOVLW 0x002 ; auto-inc (shift-cursor)
CALL LCDEMODE
;MOVLW 0x01E
;CALL X_DELAY500
CALL LCDPUTCHAR
RETURN
;************************************************* *********************

LCDBUSY
BSF STATUS,RP0 ; bank 1
MOVLW 0x0FF ; Set PORTB for input
MOVWF LCD_DATA_TRIS
BCF STATUS, RP0 ; bank 0
BCF LCD_CTRL, LCD_RS ; lenh dang duoc viet len LCD
BSF LCD_CTRL, LCD_RW ; vdk doc du lieu tu LCD
BSF LCD_CTRL, LCD_E ; cho phep giao tiep LCD
MOVF LCD_DATA, W ; Read busy flag + DDram address
BCF LCD_CTRL, LCD_E ; cam
ANDLW 0x80 ; Check Busy flag, High = Busy
BTFSS STATUS, Z
GOTO LCDBUSY
LCDNOTBUSY
BCF LCD_CTRL, LCD_RW
BSF STATUS, RP0 ; bank 1
MOVLW 0x000
MOVWF LCD_DATA_TRIS ; Set PORTB for output
BCF STATUS, RP0 ; bank 0
RETURN
;************************************************* ********************

LCDDMODE
ANDLW 0x007 ; Strip upper bits
IORLW 0x008 ; Function set
CALL LCDPUTCMD
RETURN
;************************************************* *********************

LCDCLEAR
MOVLW 0x001
CALL LCDPUTCMD
RETURN
;************************************************* ********************

LCDEMODE
ANDLW 0x003 ; Strip upper bits
IORLW 0x004 ; Function set
CALL LCDPUTCMD
RETURN

;************************************************* *********************

LCDPUTCHAR
Movlw 0x080 ;dinh dia chi de xuat A
CALL LCDPUTCMD 
Movlw 'A'
movwf LCD_TEMP
CALL LCDBUSY ; Wait for LCD to be ready
BCF LCD_CTRL, LCD_RW ; vdk viet du lieu len LCD
BSF LCD_CTRL, LCD_RS ; du lieu dang duoc viet len LCD
BSF LCD_CTRL, LCD_E ; cho phep giao tiep LCD
MOVF LCD_TEMP, W 
MOVWF LCD_DATA ; Send data to LCD
BCF LCD_CTRL, LCD_E ; cam giao tiep LCD
RETURN



;************************************************* *********************

LCDPUTCMD
MOVWF LCD_TEMP ; Command to send is in W
CALL LCDBUSY ; Wait for LCD to be ready
BCF LCD_CTRL, LCD_RW ; vdk viet du lieu len LCD
BCF LCD_CTRL, LCD_RS ; lenh dang duoc viet len LCD
BSF LCD_CTRL, LCD_E ; cho phep giao tiep LCD
MOVF LCD_TEMP, W
MOVWF LCD_DATA ; Send data to LCD
BCF LCD_CTRL, LCD_E ; cam giao tiep LCD
RETURN

;************************************************* ******************
DELAY500
MOVLW D'165' ; +1 1 cycle
MOVWF DELAY ; +2 1 cycle
DELAY500_LOOP
DECFSZ DELAY, F ; step1 1 cycle
GOTO DELAY500_LOOP ; step2 2 cycles
DELAY500_END
RETURN ; +3 2 cycles

;*********************************** a delay of 'W' * 500mS
X_DELAY500
MOVWF X_DELAY ; +1 1 cycle
X_DELAY500_LOOP
CALL DELAY500 ; step1 wait 500uSec
DECFSZ X_DELAY, F ; step2 1 cycle
GOTO X_DELAY500_LOOP ; step3 2 cycles
X_DELAY500_END
RETURN ; +2 2 cycles
end

hinh mo_phong_LCD duoi day:
Hình Kèm Theo
File Type: gif mo_phong_LCD.gif (8.2 KB, 713 lần tải)

thay đổi nội dung bởi: namqn, 16-04-2007 lúc 07:00 PM.
friends vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn