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!
hinh mo_phong_LCD duoi day:
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:
namqn
Comment